MCObjectSymbolizer.h [plain text]
#ifndef LLVM_MC_MCOBJECTSYMBOLIZER_H
#define LLVM_MC_MCOBJECTSYMBOLIZER_H
#include "llvm/ADT/DenseMap.h"
#include "llvm/MC/MCSymbolizer.h"
#include "llvm/Object/ObjectFile.h"
#include <vector>
namespace llvm {
class MCExpr;
class MCInst;
class MCRelocationInfo;
class raw_ostream;
class MCObjectSymbolizer : public MCSymbolizer {
protected:
const object::ObjectFile *Obj;
const object::RelocationRef *findRelocationAt(uint64_t Addr);
const object::SectionRef *findSectionContaining(uint64_t Addr);
MCObjectSymbolizer(MCContext &Ctx, OwningPtr<MCRelocationInfo> &RelInfo,
const object::ObjectFile *Obj);
public:
bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &cStream,
int64_t Value, uint64_t Address,
bool IsBranch, uint64_t Offset,
uint64_t InstSize);
void tryAddingPcLoadReferenceComment(raw_ostream &cStream,
int64_t Value, uint64_t Address);
virtual StringRef findExternalFunctionAt(uint64_t Addr);
static MCObjectSymbolizer *
createObjectSymbolizer(MCContext &Ctx, OwningPtr<MCRelocationInfo> &RelInfo,
const object::ObjectFile *Obj);
private:
typedef DenseMap<uint64_t, object::RelocationRef> AddrToRelocMap;
typedef std::vector<object::SectionRef> SortedSectionList;
SortedSectionList SortedSections;
AddrToRelocMap AddrToReloc;
void buildSectionList();
void buildRelocationByAddrMap();
};
}
#endif