[llvm] r247106 - [llvm-readobj] MachO -- dump LinkerOptions load command.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 8 17:21:18 PDT 2015
Author: davide
Date: Tue Sep 8 19:21:18 2015
New Revision: 247106
URL: http://llvm.org/viewvc/llvm-project?rev=247106&view=rev
Log:
[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
Modified:
llvm/trunk/test/MC/MachO/linker-option-2.s
llvm/trunk/test/MC/MachO/linker-options.ll
llvm/trunk/tools/llvm-readobj/MachODumper.cpp
llvm/trunk/tools/llvm-readobj/ObjDumper.h
llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
Modified: llvm/trunk/test/MC/MachO/linker-option-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/linker-option-2.s?rev=247106&r1=247105&r2=247106&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/linker-option-2.s (original)
+++ llvm/trunk/test/MC/MachO/linker-option-2.s Tue Sep 8 19:21:18 2015
@@ -1,25 +1,18 @@
-// RUN: llvm-mc -n -triple x86_64-apple-darwin10 %s -filetype=obj | macho-dump | FileCheck %s
-
-// CHECK: ('load_commands_size', 120)
-// CHECK: ('load_commands', [
-// CHECK: # Load Command 2
-// CHECK: (('command', 45)
-// CHECK: ('size', 16)
-// CHECK: ('count', 1)
-// CHECK: ('_strings', [
-// CHECK: "a",
-// CHECK: ])
-// CHECK: ),
-// CHECK: # Load Command 3
-// CHECK: (('command', 45)
-// CHECK: ('size', 16)
-// CHECK: ('count', 2)
-// CHECK: ('_strings', [
-// CHECK: "a",
-// CHECK: "b",
-// CHECK: ])
-// CHECK: ),
-// CHECK: ])
+// RUN: llvm-mc -n -triple x86_64-apple-darwin10 %s -filetype=obj | llvm-readobj -macho-linker-options | FileCheck %s
.linker_option "a"
.linker_option "a", "b"
+
+// CHECK: Linker Options {
+// CHECK: Size: 16
+// CHECK: Strings [
+// CHECK: Value: a
+// CHECK: ]
+// CHECK: }
+// CHECK: Linker Options {
+// CHECK: Size: 16
+// CHECK: Strings [
+// CHECK: Value: a
+// CHECK: Value: b
+// CHECK: ]
+// CHECK: }
Modified: llvm/trunk/test/MC/MachO/linker-options.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/linker-options.ll?rev=247106&r1=247105&r2=247106&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/linker-options.ll (original)
+++ llvm/trunk/test/MC/MachO/linker-options.ll Tue Sep 8 19:21:18 2015
@@ -4,35 +4,28 @@
; CHECK-ASM: .linker_option "-lz"
; CHECK-ASM-NEXT: .linker_option "-framework", "Cocoa"
-; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | macho-dump > %t
+; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-readobj -macho-linker-options > %t
; RUN: FileCheck --check-prefix=CHECK-OBJ < %t %s
-; CHECK-OBJ: ('load_commands', [
-; CHECK-OBJ: # Load Command 1
-; CHECK-OBJ: (('command', 45)
-; CHECK-OBJ: ('size', 16)
-; CHECK-OBJ: ('count', 1)
-; CHECK-OBJ: ('_strings', [
-; CHECK-OBJ: "-lz",
-; CHECK-OBJ: ])
-; CHECK-OBJ: ),
-; CHECK-OBJ: # Load Command 2
-; CHECK-OBJ: (('command', 45)
-; CHECK-OBJ: ('size', 32)
-; CHECK-OBJ: ('count', 2)
-; CHECK-OBJ: ('_strings', [
-; CHECK-OBJ: "-framework",
-; CHECK-OBJ: "Cocoa",
-; CHECK-OBJ: ])
-; CHECK-OBJ: # Load Command 3
-; CHECK-OBJ: (('command', 45)
-; CHECK-OBJ: ('size', 24)
-; CHECK-OBJ: ('count', 1)
-; CHECK-OBJ: ('_strings', [
-; CHECK-OBJ: "-lmath",
-; CHECK-OBJ: ])
-; CHECK-OBJ: ),
-; CHECK-OBJ: ])
+; CHECK-OBJ: Linker Options {
+; CHECK-OBJ: Size: 16
+; CHECK-OBJ: Strings [
+; CHECK-OBJ: Value: -lz
+; CHECK-OBJ: ]
+; CHECK-OBJ: }
+; CHECK-OBJ: Linker Options {
+; CHECK-OBJ: Size: 32
+; CHECK-OBJ: Strings [
+; CHECK-OBJ: Value: -framework
+; CHECK-OBJ: Value: Cocoa
+; CHECK-OBJ: ]
+; CHECK-OBJ: }
+; CHECK-OBJ: Linker Options {
+; CHECK-OBJ: Size: 24
+; CHECK-OBJ: Strings [
+; CHECK-OBJ: Value: -lmath
+; CHECK-OBJ: ]
+; CHECK-OBJ: }
!0 = !{i32 6, !"Linker Options", !{!{!"-lz"}, !{!"-framework", !"Cocoa"}, !{!"-lmath"}}}
Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=247106&r1=247105&r2=247106&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Tue Sep 8 19:21:18 2015
@@ -46,6 +46,7 @@ public:
void printMachODysymtab() override;
void printMachOSegment() override;
void printMachOIndirectSymbols() override;
+ void printMachOLinkerOptions () override;
private:
template<class MachHeader>
@@ -790,4 +791,23 @@ void MachODumper::printMachOIndirectSymb
}
}
}
+}
+
+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;
+ }
+ }
+ }
}
Modified: llvm/trunk/tools/llvm-readobj/ObjDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.h?rev=247106&r1=247105&r2=247106&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ObjDumper.h (original)
+++ llvm/trunk/tools/llvm-readobj/ObjDumper.h Tue Sep 8 19:21:18 2015
@@ -61,6 +61,7 @@ public:
virtual void printMachODysymtab() { }
virtual void printMachOSegment() { }
virtual void printMachOIndirectSymbols() { }
+ virtual void printMachOLinkerOptions() { }
virtual void printStackMap() const = 0;
Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=247106&r1=247105&r2=247106&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp Tue Sep 8 19:21:18 2015
@@ -192,6 +192,11 @@ namespace opts {
MachOIndirectSymbols("macho-indirect-symbols",
cl::desc("Display MachO indirect symbols"));
+ // -macho-linker-options
+ cl::opt<bool>
+ MachOLinkerOptions("macho-linker-options",
+ cl::desc("Display MachO linker options"));
+
// -macho-segment
cl::opt<bool>
MachOSegment("macho-segment",
@@ -343,6 +348,8 @@ static void dumpObject(const ObjectFile
Dumper->printMachODataInCode();
if (opts::MachOIndirectSymbols)
Dumper->printMachOIndirectSymbols();
+ if (opts::MachOLinkerOptions)
+ Dumper->printMachOLinkerOptions();
if (opts::MachOSegment)
Dumper->printMachOSegment();
if (opts::MachOVersionMin)
More information about the llvm-commits
mailing list