Update MCSymbolizer and its subclasses' constructors to reflect the fact that

they take ownership of the RelocationInfo they're constructed with.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204891 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Lang Hames 2014-03-27 02:39:01 +00:00
parent 7d3c316353
commit 7fd03c55f3
8 changed files with 27 additions and 24 deletions

View File

@ -39,11 +39,11 @@ class MCExternalSymbolizer : public MCSymbolizer {
public: public:
MCExternalSymbolizer(MCContext &Ctx, MCExternalSymbolizer(MCContext &Ctx,
std::unique_ptr<MCRelocationInfo> &RelInfo, std::unique_ptr<MCRelocationInfo> RelInfo,
LLVMOpInfoCallback getOpInfo, LLVMOpInfoCallback getOpInfo,
LLVMSymbolLookupCallback symbolLookUp, void *disInfo) LLVMSymbolLookupCallback symbolLookUp, void *disInfo)
: MCSymbolizer(Ctx, RelInfo), GetOpInfo(getOpInfo), : MCSymbolizer(Ctx, std::move(RelInfo)), GetOpInfo(getOpInfo),
SymbolLookUp(symbolLookUp), DisInfo(disInfo) {} SymbolLookUp(symbolLookUp), DisInfo(disInfo) {}
bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream, bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream,
int64_t Value, uint64_t Address, bool IsBranch, int64_t Value, uint64_t Address, bool IsBranch,

View File

@ -41,7 +41,7 @@ protected:
const object::RelocationRef *findRelocationAt(uint64_t Addr); const object::RelocationRef *findRelocationAt(uint64_t Addr);
const object::SectionRef *findSectionContaining(uint64_t Addr); const object::SectionRef *findSectionContaining(uint64_t Addr);
MCObjectSymbolizer(MCContext &Ctx, std::unique_ptr<MCRelocationInfo> &RelInfo, MCObjectSymbolizer(MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo,
const object::ObjectFile *Obj); const object::ObjectFile *Obj);
public: public:
@ -65,7 +65,7 @@ public:
/// \brief Create an object symbolizer for \p Obj. /// \brief Create an object symbolizer for \p Obj.
static MCObjectSymbolizer * static MCObjectSymbolizer *
createObjectSymbolizer(MCContext &Ctx, createObjectSymbolizer(MCContext &Ctx,
std::unique_ptr<MCRelocationInfo> &RelInfo, std::unique_ptr<MCRelocationInfo> RelInfo,
const object::ObjectFile *Obj); const object::ObjectFile *Obj);
private: private:

View File

@ -46,7 +46,7 @@ protected:
public: public:
/// \brief Construct an MCSymbolizer, taking ownership of \p RelInfo. /// \brief Construct an MCSymbolizer, taking ownership of \p RelInfo.
MCSymbolizer(MCContext &Ctx, std::unique_ptr<MCRelocationInfo> &RelInfo); MCSymbolizer(MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo);
virtual ~MCSymbolizer(); virtual ~MCSymbolizer();
/// \brief Try to add a symbolic operand instead of \p Value to the MCInst. /// \brief Try to add a symbolic operand instead of \p Value to the MCInst.

View File

@ -25,8 +25,9 @@ void MCDisassembler::setupForSymbolicDisassembly(
this->Ctx = Ctx; this->Ctx = Ctx;
assert(Ctx != 0 && "No MCContext given for symbolic disassembly"); assert(Ctx != 0 && "No MCContext given for symbolic disassembly");
if (!Symbolizer) if (!Symbolizer)
Symbolizer.reset(new MCExternalSymbolizer(*Ctx, RelInfo, GetOpInfo, Symbolizer.reset(new MCExternalSymbolizer(*Ctx, std::move(RelInfo),
SymbolLookUp, DisInfo)); GetOpInfo, SymbolLookUp,
DisInfo));
} }
void MCDisassembler::setupForSymbolicDisassembly( void MCDisassembler::setupForSymbolicDisassembly(

View File

@ -191,8 +191,8 @@ MCSymbolizer *createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo,
MCRelocationInfo *RelInfo) { MCRelocationInfo *RelInfo) {
assert(Ctx != 0 && "No MCContext given for symbolic disassembly"); assert(Ctx != 0 && "No MCContext given for symbolic disassembly");
std::unique_ptr<MCRelocationInfo> RelInfoOwingPtr(RelInfo); return new MCExternalSymbolizer(*Ctx,
return new MCExternalSymbolizer(*Ctx, RelInfoOwingPtr, GetOpInfo, std::unique_ptr<MCRelocationInfo>(RelInfo),
SymbolLookUp, DisInfo); GetOpInfo, SymbolLookUp, DisInfo);
} }
} }

View File

@ -35,7 +35,7 @@ class MCMachObjectSymbolizer : public MCObjectSymbolizer {
public: public:
MCMachObjectSymbolizer(MCContext &Ctx, MCMachObjectSymbolizer(MCContext &Ctx,
std::unique_ptr<MCRelocationInfo> &RelInfo, std::unique_ptr<MCRelocationInfo> RelInfo,
const MachOObjectFile *MOOF); const MachOObjectFile *MOOF);
StringRef findExternalFunctionAt(uint64_t Addr) override; StringRef findExternalFunctionAt(uint64_t Addr) override;
@ -46,10 +46,10 @@ public:
} // End unnamed namespace } // End unnamed namespace
MCMachObjectSymbolizer::MCMachObjectSymbolizer( MCMachObjectSymbolizer::MCMachObjectSymbolizer(
MCContext &Ctx, std::unique_ptr<MCRelocationInfo> &RelInfo, MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo,
const MachOObjectFile *MOOF) const MachOObjectFile *MOOF)
: MCObjectSymbolizer(Ctx, RelInfo, MOOF), MOOF(MOOF), StubsStart(0), : MCObjectSymbolizer(Ctx, std::move(RelInfo), MOOF), MOOF(MOOF),
StubsCount(0), StubSize(0), StubsIndSymIndex(0) { StubsStart(0), StubsCount(0), StubSize(0), StubsIndSymIndex(0) {
for (const SectionRef &Section : MOOF->sections()) { for (const SectionRef &Section : MOOF->sections()) {
StringRef Name; StringRef Name;
@ -121,9 +121,10 @@ tryAddingPcLoadReferenceComment(raw_ostream &cStream, int64_t Value,
//===- MCObjectSymbolizer -------------------------------------------------===// //===- MCObjectSymbolizer -------------------------------------------------===//
MCObjectSymbolizer::MCObjectSymbolizer( MCObjectSymbolizer::MCObjectSymbolizer(
MCContext &Ctx, std::unique_ptr<MCRelocationInfo> &RelInfo, MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo,
const ObjectFile *Obj) const ObjectFile *Obj)
: MCSymbolizer(Ctx, RelInfo), Obj(Obj), SortedSections(), AddrToReloc() {} : MCSymbolizer(Ctx, std::move(RelInfo)), Obj(Obj), SortedSections(),
AddrToReloc() {}
bool MCObjectSymbolizer:: bool MCObjectSymbolizer::
tryAddingSymbolicOperand(MCInst &MI, raw_ostream &cStream, tryAddingSymbolicOperand(MCInst &MI, raw_ostream &cStream,
@ -191,11 +192,11 @@ StringRef MCObjectSymbolizer::findExternalFunctionAt(uint64_t Addr) {
} }
MCObjectSymbolizer *MCObjectSymbolizer::createObjectSymbolizer( MCObjectSymbolizer *MCObjectSymbolizer::createObjectSymbolizer(
MCContext &Ctx, std::unique_ptr<MCRelocationInfo> &RelInfo, MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo,
const ObjectFile *Obj) { const ObjectFile *Obj) {
if (const MachOObjectFile *MOOF = dyn_cast<MachOObjectFile>(Obj)) if (const MachOObjectFile *MOOF = dyn_cast<MachOObjectFile>(Obj))
return new MCMachObjectSymbolizer(Ctx, RelInfo, MOOF); return new MCMachObjectSymbolizer(Ctx, std::move(RelInfo), MOOF);
return new MCObjectSymbolizer(Ctx, RelInfo, Obj); return new MCObjectSymbolizer(Ctx, std::move(RelInfo), Obj);
} }
// SortedSections implementation. // SortedSections implementation.

View File

@ -13,8 +13,8 @@
using namespace llvm; using namespace llvm;
MCSymbolizer::MCSymbolizer(MCContext &Ctx, MCSymbolizer::MCSymbolizer(MCContext &Ctx,
std::unique_ptr<MCRelocationInfo> &RelInfo) std::unique_ptr<MCRelocationInfo> RelInfo)
: Ctx(Ctx), RelInfo(RelInfo.release()) {} : Ctx(Ctx), RelInfo(std::move(RelInfo)) {}
MCSymbolizer::~MCSymbolizer() { MCSymbolizer::~MCSymbolizer() {
} }

View File

@ -325,7 +325,8 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
TheTarget->createMCRelocationInfo(TripleName, *Ctx.get())); TheTarget->createMCRelocationInfo(TripleName, *Ctx.get()));
if (RelInfo) { if (RelInfo) {
std::unique_ptr<MCSymbolizer> Symzer( std::unique_ptr<MCSymbolizer> Symzer(
MCObjectSymbolizer::createObjectSymbolizer(*Ctx.get(), RelInfo, Obj)); MCObjectSymbolizer::createObjectSymbolizer(*Ctx.get(),
std::move(RelInfo), Obj));
if (Symzer) if (Symzer)
DisAsm->setSymbolizer(std::move(Symzer)); DisAsm->setSymbolizer(std::move(Symzer));
} }