diff options
author | Davide Italiano <davide@freebsd.org> | 2015-08-21 20:28:30 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2015-08-21 20:28:30 +0000 |
commit | 241f716c4bf1f3def9a507940a9e67e2637343ef (patch) | |
tree | 33f80c7bbabdaa3f5797bd5b6a8a615b420b1d3c /tools/llvm-readobj/MachODumper.cpp | |
parent | 5e8c2097ae29dd38cf66a6633030b1a7764fd1d1 (diff) |
[llvm-readobj] Add support for MachO DataInCodeDataCommand.
Example output:
File: <stdin>
Format: Mach-O arm
Arch: arm
AddressSize: 32bit
DataInCode {
Data offset: 300
Data size: 32
Data Regions [
DICE {
Index: 0
Offset: 0
Length: 4
Kind: 1
}
DICE {
Index: 1
Offset: 4
Length: 4
Kind: 4
}
DICE {
Index: 2
Offset: 8
Length: 2
Kind: 3
}
DICE {
Index: 3
Offset: 10
Length: 1
Kind: 2
}
]
}
Differential Revision: http://reviews.llvm.org/D12084
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245732 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-readobj/MachODumper.cpp')
-rw-r--r-- | tools/llvm-readobj/MachODumper.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp index 6b1889a66b6..4628d7ab294 100644 --- a/tools/llvm-readobj/MachODumper.cpp +++ b/tools/llvm-readobj/MachODumper.cpp @@ -40,6 +40,9 @@ public: void printUnwindInfo() override; void printStackMap() const override; + // MachO-specific. + void printMachODataInCode() override; + private: template<class MachHeader> void printFileHeaders(const MachHeader &Header); @@ -600,3 +603,25 @@ void MachODumper::printStackMap() const { prettyPrintStackMap(llvm::outs(), StackMapV1Parser<support::big>(StackMapContentsArray)); } + +void MachODumper::printMachODataInCode() { + for (const auto &Load : Obj->load_commands()) { + if (Load.C.cmd == MachO::LC_DATA_IN_CODE) { + MachO::linkedit_data_command LLC = Obj->getLinkeditDataLoadCommand(Load); + DictScope Group(W, "DataInCode"); + W.printNumber("Data offset", LLC.dataoff); + W.printNumber("Data size", LLC.datasize); + ListScope D(W, "Data entries"); + unsigned NumRegions = LLC.datasize / sizeof(MachO::data_in_code_entry); + for (unsigned i = 0; i < NumRegions; ++i) { + MachO::data_in_code_entry DICE = Obj->getDataInCodeTableEntry( + LLC.dataoff, i); + DictScope Group(W, "Entry"); + W.printNumber("Index", i); + W.printNumber("Offset", DICE.offset); + W.printNumber("Length", DICE.length); + W.printNumber("Kind", DICE.kind); + } + } + } +} |