summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/MachODumper.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-08-21 20:28:30 +0000
committerDavide Italiano <davide@freebsd.org>2015-08-21 20:28:30 +0000
commit07e7acb635e36bebbcee0e730fdb03b3fffbc99f (patch)
tree11146c3ce73d7bf1e0f1e9d78c916b0a7f514916 /llvm/tools/llvm-readobj/MachODumper.cpp
parent6ea895b557008212bc781841521af8694d5e47f7 (diff)
downloadbcm5719-llvm-07e7acb635e36bebbcee0e730fdb03b3fffbc99f.tar.gz
bcm5719-llvm-07e7acb635e36bebbcee0e730fdb03b3fffbc99f.zip
[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 llvm-svn: 245732
Diffstat (limited to 'llvm/tools/llvm-readobj/MachODumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/MachODumper.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index 6b1889a66b6..4628d7ab294 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/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);
+ }
+ }
+ }
+}
OpenPOWER on IntegriCloud