mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
MC CFG: Add MCObjectDisassembler Mach-O implementation.
Supports: - entrypoint, using LC_MAIN. - static ctors/dtors, using __mod_{init,exit}_func - translation between effective and object load address, using dyld's VM address slide. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188886 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -23,6 +23,7 @@ namespace llvm {
|
||||
|
||||
namespace object {
|
||||
class ObjectFile;
|
||||
class MachOObjectFile;
|
||||
}
|
||||
|
||||
class MCBasicBlock;
|
||||
@ -100,6 +101,36 @@ private:
|
||||
void buildCFG(MCModule *Module);
|
||||
};
|
||||
|
||||
class MCMachOObjectDisassembler : public MCObjectDisassembler {
|
||||
const object::MachOObjectFile &MOOF;
|
||||
|
||||
uint64_t VMAddrSlide;
|
||||
uint64_t HeaderLoadAddress;
|
||||
|
||||
// __DATA;__mod_init_func support.
|
||||
llvm::StringRef ModInitContents;
|
||||
// __DATA;__mod_exit_func support.
|
||||
llvm::StringRef ModExitContents;
|
||||
|
||||
public:
|
||||
/// \brief Construct a Mach-O specific object disassembler.
|
||||
/// \param VMAddrSlide The virtual address slide applied by dyld.
|
||||
/// \param HeaderLoadAddress The load address of the mach_header for this
|
||||
/// object.
|
||||
MCMachOObjectDisassembler(const object::MachOObjectFile &MOOF,
|
||||
const MCDisassembler &Dis,
|
||||
const MCInstrAnalysis &MIA, uint64_t VMAddrSlide,
|
||||
uint64_t HeaderLoadAddress);
|
||||
|
||||
protected:
|
||||
uint64_t getEffectiveLoadAddr(uint64_t Addr) LLVM_OVERRIDE;
|
||||
uint64_t getOriginalLoadAddr(uint64_t EffectiveAddr) LLVM_OVERRIDE;
|
||||
uint64_t getEntrypoint() LLVM_OVERRIDE;
|
||||
|
||||
ArrayRef<uint64_t> getStaticInitFunctions() LLVM_OVERRIDE;
|
||||
ArrayRef<uint64_t> getStaticExitFunctions() LLVM_OVERRIDE;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user