decompiler
1.0.0
|
A disjoint set of Ranges, possibly across multiple address spaces. More...
#include <address.hh>
Public Member Functions | |
RangeList (const RangeList &op2) | |
Copy constructor. | |
RangeList (void) | |
Construct an empty container. | |
void | clear (void) |
Clear this container to empty. | |
bool | empty (void) const |
Return true if this is empty. | |
set< Range >::const_iterator | begin (void) const |
Get iterator to beginning Range. | |
set< Range >::const_iterator | end (void) const |
Get iterator to ending Range. | |
int4 | numRanges (void) const |
Return the number of Range objects in container. | |
const Range * | getFirstRange (void) const |
Get the first Range. More... | |
const Range * | getLastRange (void) const |
Get the last Range. More... | |
const Range * | getLastSignedRange (AddrSpace *spaceid) const |
Get the last Range viewing offsets as signed. More... | |
const Range * | getRange (AddrSpace *spaceid, uintb offset) const |
Get Range containing the given byte. More... | |
void | insertRange (AddrSpace *spc, uintb first, uintb last) |
Insert a range of addresses. More... | |
void | removeRange (AddrSpace *spc, uintb first, uintb last) |
Remove a range of addresses. More... | |
void | merge (const RangeList &op2) |
Merge another RangeList into this. | |
bool | inRange (const Address &addr, int4 size) const |
Check containment an address range. More... | |
uintb | longestFit (const Address &addr, uintb maxsize) const |
Find size of biggest Range containing given address. More... | |
void | printBounds (ostream &s) const |
Print a description of this RangeList to stream. More... | |
void | encode (Encoder &encoder) const |
Encode this RangeList to a stream. More... | |
void | decode (Decoder &decoder) |
Decode this RangeList from a <rangelist> element. More... | |
Private Attributes | |
set< Range > | tree |
The sorted list of Range objects. | |
A disjoint set of Ranges, possibly across multiple address spaces.
This is a container for addresses. It maintains a disjoint list of Ranges that cover all the addresses in the container. Ranges can be inserted and removed, but overlapping/adjacent ranges will get merged.
void ghidra::RangeList::decode | ( | Decoder & | decoder | ) |
Decode this RangeList from a <rangelist> element.
Recover each individual disjoint Range for this RangeList.
decoder | is the stream decoder |
References ghidra::calc_mask(), ghidra::Decoder::closeElement(), ghidra::Range::decode(), ghidra::Decoder::openElement(), and ghidra::Decoder::peekElement().
Referenced by ghidra::SymbolEntry::decode(), and ghidra::ScopeInternal::decode().
void ghidra::RangeList::encode | ( | Encoder & | encoder | ) | const |
Encode this RangeList to a stream.
Encode this as a <rangelist> element
encoder | is the stream encoder |
References ghidra::Encoder::closeElement(), and ghidra::Encoder::openElement().
Referenced by ghidra::SymbolEntry::encode(), and ghidra::ScopeInternal::encode().
const Range * ghidra::RangeList::getFirstRange | ( | void | ) | const |
Get the first Range.
Referenced by ghidra::ScopeLocal::addRecommendName(), ghidra::SymbolEntry::getFirstUseAddress(), and ghidra::SymbolEntry::getSubsort().
const Range * ghidra::RangeList::getLastRange | ( | void | ) | const |
Get the last Range.
Get the last Range viewing offsets as signed.
Treating offsets with their high-bits set as coming before offset where the high-bit is clear, return the last/latest contiguous Range within the given address space
spaceid | is the given address space |
References ghidra::AddrSpace::getHighest().
Referenced by ghidra::MapState::initialize().
bool ghidra::RangeList::inRange | ( | const Address & | addr, |
int4 | size | ||
) | const |
Check containment an address range.
Make sure indicated range of addresses is contained in this RangeList
addr | is the first Address in the target range |
size | is the number of bytes in the target range |
References ghidra::Address::getOffset(), ghidra::Address::getSpace(), and ghidra::Address::isInvalid().
Referenced by ghidra::MapState::addRange(), ghidra::ScopeLocal::buildVariableName(), ghidra::FuncCallSpecs::checkInputTrialUse(), ghidra::BlockBasic::contains(), ghidra::Heritage::handleNewLoadCopies(), ghidra::Scope::inScope(), ghidra::SymbolEntry::inUse(), and ghidra::ScopeGhidra::removeQuery().
void ghidra::RangeList::insertRange | ( | AddrSpace * | spc, |
uintb | first, | ||
uintb | last | ||
) |
Insert a range of addresses.
Insert a new Range merging as appropriate to maintain the disjoint cover
spc | is the address space containing the new range |
first | is the offset of the first byte in the new range |
last | is the offset of the last byte in the new range |
Referenced by ghidra::Scope::addDynamicSymbol(), ghidra::Scope::addEquateSymbol(), ghidra::Scope::addMapPoint(), ghidra::Scope::addUnionFacetSymbol(), ghidra::ScopeGhidra::decodeHole(), ghidra::ScopeGhidra::dump2Cache(), ghidra::ParamListStandard::getRangeList(), ghidra::LoadImageXml::getReadonly(), ghidra::Heritage::handleNewLoadCopies(), ghidra::ScopeLocal::remapSymbol(), and ghidra::ScopeLocal::remapSymbolDynamic().
uintb ghidra::RangeList::longestFit | ( | const Address & | addr, |
uintb | maxsize | ||
) | const |
Find size of biggest Range containing given address.
Return the size of the biggest contiguous sequence of addresses in this RangeList which contain the given address
addr | is the given address |
maxsize | is the large range to consider before giving up |
References ghidra::Address::getOffset(), ghidra::Address::getSpace(), and ghidra::Address::isInvalid().
Referenced by ghidra::ScopeLocal::adjustFit().
void ghidra::RangeList::printBounds | ( | ostream & | s | ) | const |
Print a description of this RangeList to stream.
Print a one line description of each disjoint Range making up this RangeList
s | is the output stream |
Referenced by ghidra::Scope::printBounds(), and ghidra::SymbolEntry::printEntry().
void ghidra::RangeList::removeRange | ( | AddrSpace * | spc, |
uintb | first, | ||
uintb | last | ||
) |
Remove a range of addresses.
Remove/narrow/split existing Range objects to eliminate the indicated addresses while still maintaining a disjoint cover.
spc | is the address space of the address range to remove |
first | is the offset of the first byte of the range |
last | is the offset of the last byte of the range |
Referenced by ghidra::MapState::MapState().