summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/llvm-nm/X86/Inputs/libExample.a.macho-x86_64bin0 -> 832 bytes
-rw-r--r--llvm/test/tools/llvm-nm/X86/posixArchiveMachO.test5
-rw-r--r--llvm/test/tools/llvm-nm/X86/posixELF.test4
-rw-r--r--llvm/test/tools/llvm-nm/X86/posixMachO.test6
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp33
5 files changed, 31 insertions, 17 deletions
diff --git a/llvm/test/tools/llvm-nm/X86/Inputs/libExample.a.macho-x86_64 b/llvm/test/tools/llvm-nm/X86/Inputs/libExample.a.macho-x86_64
new file mode 100644
index 00000000000..a5d1096daa3
--- /dev/null
+++ b/llvm/test/tools/llvm-nm/X86/Inputs/libExample.a.macho-x86_64
Binary files differ
diff --git a/llvm/test/tools/llvm-nm/X86/posixArchiveMachO.test b/llvm/test/tools/llvm-nm/X86/posixArchiveMachO.test
new file mode 100644
index 00000000000..071cf29432c
--- /dev/null
+++ b/llvm/test/tools/llvm-nm/X86/posixArchiveMachO.test
@@ -0,0 +1,5 @@
+# RUN: llvm-nm -P -A %p/Inputs/libExample.a.macho-x86_64 | FileCheck %s
+
+# CHECK: libExample.a.macho-x86_64[example.o]: EH_frame0 s 30 0
+# CHECK: libExample.a.macho-x86_64[example.o]: _f T 0 0
+# CHECK: libExample.a.macho-x86_64[example.o]: _f.eh S 48 0
diff --git a/llvm/test/tools/llvm-nm/X86/posixELF.test b/llvm/test/tools/llvm-nm/X86/posixELF.test
index 6b4e9549612..f66e1befc8f 100644
--- a/llvm/test/tools/llvm-nm/X86/posixELF.test
+++ b/llvm/test/tools/llvm-nm/X86/posixELF.test
@@ -1,4 +1,4 @@
# RUN: llvm-nm -P %p/Inputs/hello.obj.elf-x86_64 | FileCheck %s
-CHECK: main T 0000000000000000 0000000000000000
-CHECK: puts U 0000000000000000
+CHECK: main T 0 0
+CHECK: puts U 0 0
diff --git a/llvm/test/tools/llvm-nm/X86/posixMachO.test b/llvm/test/tools/llvm-nm/X86/posixMachO.test
index a0d114237ce..5a82bbb88e9 100644
--- a/llvm/test/tools/llvm-nm/X86/posixMachO.test
+++ b/llvm/test/tools/llvm-nm/X86/posixMachO.test
@@ -1,7 +1,7 @@
# RUN: llvm-nm -P %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
-# CHECK: EH_frame0 s 104 0
-# CHECK: L_.str s 59 0
+# CHECK: EH_frame0 s 68 0
+# CHECK: L_.str s 3b 0
# CHECK: _main T 0 0
-# CHECK: _main.eh S 128 0
+# CHECK: _main.eh S 80 0
# CHECK: _printf U 0 0
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 65e9156a74d..241ee8fb40f 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -583,26 +583,26 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
printDashes = "----------------";
switch (AddressRadix) {
case Radix::o:
- printFormat = "%016" PRIo64;
+ printFormat = OutputFormat == posix ? "%" PRIo64 : "%016" PRIo64;
break;
case Radix::x:
- printFormat = "%016" PRIx64;
+ printFormat = OutputFormat == posix ? "%" PRIx64 : "%016" PRIx64;
break;
default:
- printFormat = "%016" PRId64;
+ printFormat = OutputFormat == posix ? "%" PRId64 : "%016" PRId64;
}
} else {
printBlanks = " ";
printDashes = "--------";
switch (AddressRadix) {
case Radix::o:
- printFormat = "%08" PRIo64;
+ printFormat = OutputFormat == posix ? "%" PRIo64 : "%08" PRIo64;
break;
case Radix::x:
- printFormat = "%08" PRIx64;
+ printFormat = OutputFormat == posix ? "%" PRIx64 : "%08" PRIx64;
break;
default:
- printFormat = "%08" PRId64;
+ printFormat = OutputFormat == posix ? "%" PRId64 : "%08" PRId64;
}
}
@@ -617,9 +617,13 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
if (PrintFileName) {
if (!ArchitectureName.empty())
outs() << "(for architecture " << ArchitectureName << "):";
- if (!ArchiveName.empty())
- outs() << ArchiveName << ":";
- outs() << CurrentFilename << ": ";
+ if (OutputFormat == posix && !ArchiveName.empty())
+ outs() << ArchiveName << "[" << CurrentFilename << "]: ";
+ else {
+ if (!ArchiveName.empty())
+ outs() << ArchiveName << ":";
+ outs() << CurrentFilename << ": ";
+ }
}
if ((JustSymbolName || (UndefinedOnly && isa<MachOObjectFile>(Obj) &&
OutputFormat != darwin)) && OutputFormat != posix) {
@@ -630,8 +634,13 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
char SymbolAddrStr[18] = "";
char SymbolSizeStr[18] = "";
- if (OutputFormat == sysv || I->TypeChar == 'U')
- strcpy(SymbolAddrStr, printBlanks);
+ if (OutputFormat == sysv || I->TypeChar == 'U') {
+ if (OutputFormat == posix)
+ format(printFormat, I->Address)
+ .print(SymbolAddrStr, sizeof(SymbolAddrStr));
+ else
+ strcpy(SymbolAddrStr, printBlanks);
+ }
if (OutputFormat == sysv)
strcpy(SymbolSizeStr, printBlanks);
@@ -656,7 +665,7 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
} else if (OutputFormat == posix) {
outs() << I->Name << " " << I->TypeChar << " ";
if (MachO)
- outs() << I->Address << " " << "0" /* SymbolSizeStr */ << "\n";
+ outs() << SymbolAddrStr << " " << "0" /* SymbolSizeStr */ << "\n";
else
outs() << SymbolAddrStr << " " << SymbolSizeStr << "\n";
} else if (OutputFormat == bsd || (OutputFormat == darwin && !MachO)) {
OpenPOWER on IntegriCloud