[lld] bdd0cec - [lld-macho] Include symbol sizes in mapfile

Jez Ng via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 13 13:45:00 PDT 2022


Author: Jez Ng
Date: 2022-10-13T16:44:29-04:00
New Revision: bdd0cec5697f1df988cda1b5305fe9a8b869a680

URL: https://github.com/llvm/llvm-project/commit/bdd0cec5697f1df988cda1b5305fe9a8b869a680
DIFF: https://github.com/llvm/llvm-project/commit/bdd0cec5697f1df988cda1b5305fe9a8b869a680.diff

LOG: [lld-macho] Include symbol sizes in mapfile

This matches ld64's behavior.

Additionally, I edited the "Dead Stripped Symbols" header to omit "Address" --
this also matches ld64.

Reviewed By: #lld-macho, oontvoo

Differential Revision: https://reviews.llvm.org/D135883

Added: 
    

Modified: 
    lld/MachO/MapFile.cpp
    lld/test/MachO/dead-strip.s
    lld/test/MachO/map-file.s

Removed: 
    


################################################################################
diff  --git a/lld/MachO/MapFile.cpp b/lld/MachO/MapFile.cpp
index 84c536e0464ef..1f0a9ba44a5d9 100644
--- a/lld/MachO/MapFile.cpp
+++ b/lld/MachO/MapFile.cpp
@@ -154,10 +154,10 @@ void macho::writeMapFile() {
   DenseMap<Symbol *, std::string> liveSymbolStrings =
       getSymbolStrings(liveSymbols);
   os << "# Symbols:\n";
-  os << "# Address\t    File  Name\n";
-  for (Symbol *sym : liveSymbols) {
+  os << "# Address\tSize    \tFile  Name\n";
+  for (Defined *sym : liveSymbols) {
     assert(sym->isLive());
-    os << format("0x%08llX\t[%3u] %s\n", sym->getVA(),
+    os << format("0x%08llX\t0x%08llX\t[%3u] %s\n", sym->getVA(), sym->size,
                  readerToFileOrdinal[sym->getFile()],
                  liveSymbolStrings[sym].c_str());
   }
@@ -166,10 +166,11 @@ void macho::writeMapFile() {
     DenseMap<Symbol *, std::string> deadSymbolStrings =
         getSymbolStrings(deadSymbols);
     os << "# Dead Stripped Symbols:\n";
-    os << "# Address\t    File  Name\n";
-    for (Symbol *sym : deadSymbols) {
+    os << "#        \tSize    \tFile  Name\n";
+    for (Defined *sym : deadSymbols) {
       assert(!sym->isLive());
-      os << format("<<dead>>\t[%3u] %s\n", readerToFileOrdinal[sym->getFile()],
+      os << format("<<dead>>\t0x%08llX\t[%3u] %s\n", sym->size,
+                   readerToFileOrdinal[sym->getFile()],
                    deadSymbolStrings[sym].c_str());
     }
   }

diff  --git a/lld/test/MachO/dead-strip.s b/lld/test/MachO/dead-strip.s
index ef92a96202883..e2de6198e8abf 100644
--- a/lld/test/MachO/dead-strip.s
+++ b/lld/test/MachO/dead-strip.s
@@ -48,12 +48,12 @@
 
 # MAP: _main
 # MAP-LABEL: Dead Stripped Symbols
-# MAP: <<dead>> [ 1] _unref_com
-# MAP: <<dead>> [ 1] _unref_data
-# MAP: <<dead>> [ 1] _unref_extern
-# MAP: <<dead>> [ 1] _unref_local
-# MAP: <<dead>> [ 1] _unref_private_extern
-# MAP: <<dead>> [ 1] l_unref_data
+# MAP: <<dead>> 0x00000000 [ 1] _unref_com
+# MAP: <<dead>> 0x00000008 [ 1] _unref_data
+# MAP: <<dead>> 0x00000006 [ 1] _unref_extern
+# MAP: <<dead>> 0x00000001 [ 1] _unref_local
+# MAP: <<dead>> 0x00000007 [ 1] _unref_private_extern
+# MAP: <<dead>> 0x00000008 [ 1] l_unref_data
 
 ## Run dead stripping on code without any dead symbols.
 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
@@ -64,10 +64,10 @@
 # RUN: FileCheck --check-prefix=NODEADSYMBOLS %s < %t/no-dead-symbols-map
 
 # NODEADSYMBOLS-LABEL: # Symbols:
-# NODEADSYMBOLS-NEXT: # Address File Name
-# NODEADSYMBOLS-NEXT: _main
+# NODEADSYMBOLS-NEXT:  # Address Size File Name
+# NODEADSYMBOLS-NEXT:  _main
 # NODEADSYMBOLS-LABEL: # Dead Stripped Symbols:
-# NODEADSYMBOLS-NEXT: # Address File Name
+# NODEADSYMBOLS-NEXT:  # Size File Name
 # NODEADSYMBOLS-EMPTY:
 
 # RUN: %lld -dylib -dead_strip -u _ref_private_extern_u %t/basics.o -o %t/basics.dylib
@@ -347,7 +347,7 @@
 # RUN: FileCheck --check-prefix=DUPMAP %s < %t/stripped-duplicate-map
 # DUPMAP: _main
 # DUPMAP-LABEL: Dead Stripped Symbols
-# DUPMAP: <<dead>> [ 2] _foo
+# DUPMAP: <<dead>> 0x00000001 [ 2] _foo
 
 #--- duplicate1.s
 .text

diff  --git a/lld/test/MachO/map-file.s b/lld/test/MachO/map-file.s
index 6c381eacfd27f..759a9ba445f81 100644
--- a/lld/test/MachO/map-file.s
+++ b/lld/test/MachO/map-file.s
@@ -37,10 +37,10 @@
 # CHECK-NEXT: 0x[[#%X,BSS]]   0x{{[0-9a-f]+}}   __DATA   __common
 
 # CHECK-NEXT: # Symbols:
-# CHECK-NEXT: # Address           File   Name
-# CHECK-NEXT: 0x[[#%X,MAIN]]      [  1]  _main
-# CHECK-NEXT: 0x[[#%X,FOO]]       [  2]  _foo
-# CHECK-NEXT: 0x[[#%X,NUMBER]]    [  1]  _number
+# CHECK-NEXT: # Address           Size        File   Name
+# CHECK-NEXT: 0x[[#%X,MAIN]]      0x00000001  [  1]  _main
+# CHECK-NEXT: 0x[[#%X,FOO]]       0x00000000  [  2]  _foo
+# CHECK-NEXT: 0x[[#%X,NUMBER]]    0x00000000  [  1]  _number
 
 # RUN: %lld -map %t/c-string-literal-map %t/c-string-literal.o -o %t/c-string-literal-out
 # RUN: FileCheck --check-prefix=CSTRING %s < %t/c-string-literal-map
@@ -56,10 +56,10 @@
 
 ## C-string literals should be printed as "literal string: <C string literal>"
 # DEADCSTRING-LABEL: Symbols:
-# DEADCSTRING-DAG: _main
-# DEADCSTRING-DAG: literal string: Hello world!\n
+# DEADCSTRING-DAG:   0x0000001D [  1] _main
+# DEADCSTRING-DAG:   0x0000000E [  1] literal string: Hello world!\n
 # DEADCSTRING-LABEL: Dead Stripped Symbols:
-# DEADCSTRING-DAG: literal string: Hello, it's me
+# DEADCSTRING-DAG:   <<dead>> 0x0000000F [  1] literal string: Hello, it's me
 
 # MAPFILE: "name":"Total Write map file"
 


        


More information about the llvm-commits mailing list