summaryrefslogtreecommitdiff
path: root/tools/llvm-readobj/MachODumper.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2015-09-09 00:21:18 +0000
committerDavide Italiano <davide@freebsd.org>2015-09-09 00:21:18 +0000
commit793616c0683e78783153dd48bfc9be00a1082b6b (patch)
treeb6d084a2212d839b44c3fb7af4923ae300b75ccc /tools/llvm-readobj/MachODumper.cpp
parent18329ced975b85fbcf34aaa928e5d66fe8da8282 (diff)
[llvm-readobj] MachO -- dump LinkerOptions load command.
Example output: Linker Options { Size: 32 Count: 2 Strings [ Value: -framework Value: Cocoa ] } There were only two tests using this -- so I converted them as part of this commit rather than separately. Differential Revision: http://reviews.llvm.org/D12702 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247106 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-readobj/MachODumper.cpp')
-rw-r--r--tools/llvm-readobj/MachODumper.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp
index fd6e00b9e83..177f79fb9c1 100644
--- a/tools/llvm-readobj/MachODumper.cpp
+++ b/tools/llvm-readobj/MachODumper.cpp
@@ -46,6 +46,7 @@ public:
void printMachODysymtab() override;
void printMachOSegment() override;
void printMachOIndirectSymbols() override;
+ void printMachOLinkerOptions () override;
private:
template<class MachHeader>
@@ -791,3 +792,22 @@ void MachODumper::printMachOIndirectSymbols() {
}
}
}
+
+void MachODumper::printMachOLinkerOptions() {
+ for (const auto &Load : Obj->load_commands()) {
+ if (Load.C.cmd == MachO::LC_LINKER_OPTION) {
+ MachO::linker_option_command LOLC = Obj->getLinkerOptionLoadCommand(Load);
+ DictScope Group(W, "Linker Options");
+ W.printNumber("Size", LOLC.cmdsize);
+ ListScope D(W, "Strings");
+ uint64_t DataSize = LOLC.cmdsize - sizeof(MachO::linker_option_command);
+ const char *P = Load.Ptr + sizeof(MachO::linker_option_command);
+ StringRef Data(P, DataSize);
+ for (unsigned i = 0; i < LOLC.count; ++i) {
+ std::pair<StringRef,StringRef> Split = Data.split('\0');
+ W.printString("Value", Split.first);
+ Data = Split.second;
+ }
+ }
+ }
+}