diff options
author | Davide Italiano <davide@freebsd.org> | 2015-09-09 00:21:18 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2015-09-09 00:21:18 +0000 |
commit | 793616c0683e78783153dd48bfc9be00a1082b6b (patch) | |
tree | b6d084a2212d839b44c3fb7af4923ae300b75ccc /tools/llvm-readobj/MachODumper.cpp | |
parent | 18329ced975b85fbcf34aaa928e5d66fe8da8282 (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.cpp | 20 |
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; + } + } + } +} |