diff options
Diffstat (limited to 'llvm/lib/MC/MCModule.cpp')
-rw-r--r-- | llvm/lib/MC/MCModule.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCModule.cpp b/llvm/lib/MC/MCModule.cpp index 9a9d90e5b6a..bdd5cc6b1cd 100644 --- a/llvm/lib/MC/MCModule.cpp +++ b/llvm/lib/MC/MCModule.cpp @@ -18,6 +18,10 @@ static bool AtomComp(const MCAtom *L, uint64_t Addr) { return L->getEndAddr() < Addr; } +static bool AtomCompInv(uint64_t Addr, const MCAtom *R) { + return Addr < R->getEndAddr(); +} + void MCModule::map(MCAtom *NewAtom) { uint64_t Begin = NewAtom->Begin; @@ -77,13 +81,23 @@ const MCAtom *MCModule::findAtomContaining(uint64_t Addr) const { } MCAtom *MCModule::findAtomContaining(uint64_t Addr) { - AtomListTy::iterator I = std::lower_bound(atom_begin(), atom_end(), - Addr, AtomComp); - if (I != atom_end() && (*I)->getBeginAddr() <= Addr) + return const_cast<MCAtom*>( + const_cast<const MCModule *>(this)->findAtomContaining(Addr)); +} + +const MCAtom *MCModule::findFirstAtomAfter(uint64_t Addr) const { + AtomListTy::const_iterator I = std::upper_bound(atom_begin(), atom_end(), + Addr, AtomCompInv); + if (I != atom_end()) return *I; return 0; } +MCAtom *MCModule::findFirstAtomAfter(uint64_t Addr) { + return const_cast<MCAtom*>( + const_cast<const MCModule *>(this)->findFirstAtomAfter(Addr)); +} + MCFunction *MCModule::createFunction(StringRef Name) { Functions.push_back(new MCFunction(Name, this)); return Functions.back(); |