aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/MC
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2013-08-21 07:28:44 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2013-08-21 07:28:44 +0000
commit0e83b902834530da4670ad8416cf44afba9b4111 (patch)
tree62dd59d82ab30e22bd7ce7dd769c42b05768d8a4 /include/llvm/MC
parentfe018c414542141010ef0706820ebfde0a4b3e41 (diff)
downloadexternal_llvm-0e83b902834530da4670ad8416cf44afba9b4111.zip
external_llvm-0e83b902834530da4670ad8416cf44afba9b4111.tar.gz
external_llvm-0e83b902834530da4670ad8416cf44afba9b4111.tar.bz2
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
Diffstat (limited to 'include/llvm/MC')
-rw-r--r--include/llvm/MC/MCObjectDisassembler.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/include/llvm/MC/MCObjectDisassembler.h b/include/llvm/MC/MCObjectDisassembler.h
index edaf7dc..4ac3456 100644
--- a/include/llvm/MC/MCObjectDisassembler.h
+++ b/include/llvm/MC/MCObjectDisassembler.h
@@ -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