Skip to content

Commit bdd0cec

Browse files
committed
[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
1 parent aa5bc41 commit bdd0cec

File tree

3 files changed

+24
-23
lines changed

3 files changed

+24
-23
lines changed

lld/MachO/MapFile.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,10 @@ void macho::writeMapFile() {
154154
DenseMap<Symbol *, std::string> liveSymbolStrings =
155155
getSymbolStrings(liveSymbols);
156156
os << "# Symbols:\n";
157-
os << "# Address\t File Name\n";
158-
for (Symbol *sym : liveSymbols) {
157+
os << "# Address\tSize \tFile Name\n";
158+
for (Defined *sym : liveSymbols) {
159159
assert(sym->isLive());
160-
os << format("0x%08llX\t[%3u] %s\n", sym->getVA(),
160+
os << format("0x%08llX\t0x%08llX\t[%3u] %s\n", sym->getVA(), sym->size,
161161
readerToFileOrdinal[sym->getFile()],
162162
liveSymbolStrings[sym].c_str());
163163
}
@@ -166,10 +166,11 @@ void macho::writeMapFile() {
166166
DenseMap<Symbol *, std::string> deadSymbolStrings =
167167
getSymbolStrings(deadSymbols);
168168
os << "# Dead Stripped Symbols:\n";
169-
os << "# Address\t File Name\n";
170-
for (Symbol *sym : deadSymbols) {
169+
os << "# \tSize \tFile Name\n";
170+
for (Defined *sym : deadSymbols) {
171171
assert(!sym->isLive());
172-
os << format("<<dead>>\t[%3u] %s\n", readerToFileOrdinal[sym->getFile()],
172+
os << format("<<dead>>\t0x%08llX\t[%3u] %s\n", sym->size,
173+
readerToFileOrdinal[sym->getFile()],
173174
deadSymbolStrings[sym].c_str());
174175
}
175176
}

lld/test/MachO/dead-strip.s

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@
4848

4949
# MAP: _main
5050
# MAP-LABEL: Dead Stripped Symbols
51-
# MAP: <<dead>> [ 1] _unref_com
52-
# MAP: <<dead>> [ 1] _unref_data
53-
# MAP: <<dead>> [ 1] _unref_extern
54-
# MAP: <<dead>> [ 1] _unref_local
55-
# MAP: <<dead>> [ 1] _unref_private_extern
56-
# MAP: <<dead>> [ 1] l_unref_data
51+
# MAP: <<dead>> 0x00000000 [ 1] _unref_com
52+
# MAP: <<dead>> 0x00000008 [ 1] _unref_data
53+
# MAP: <<dead>> 0x00000006 [ 1] _unref_extern
54+
# MAP: <<dead>> 0x00000001 [ 1] _unref_local
55+
# MAP: <<dead>> 0x00000007 [ 1] _unref_private_extern
56+
# MAP: <<dead>> 0x00000008 [ 1] l_unref_data
5757

5858
## Run dead stripping on code without any dead symbols.
5959
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
@@ -64,10 +64,10 @@
6464
# RUN: FileCheck --check-prefix=NODEADSYMBOLS %s < %t/no-dead-symbols-map
6565

6666
# NODEADSYMBOLS-LABEL: # Symbols:
67-
# NODEADSYMBOLS-NEXT: # Address File Name
68-
# NODEADSYMBOLS-NEXT: _main
67+
# NODEADSYMBOLS-NEXT: # Address Size File Name
68+
# NODEADSYMBOLS-NEXT: _main
6969
# NODEADSYMBOLS-LABEL: # Dead Stripped Symbols:
70-
# NODEADSYMBOLS-NEXT: # Address File Name
70+
# NODEADSYMBOLS-NEXT: # Size File Name
7171
# NODEADSYMBOLS-EMPTY:
7272

7373
# RUN: %lld -dylib -dead_strip -u _ref_private_extern_u %t/basics.o -o %t/basics.dylib
@@ -347,7 +347,7 @@
347347
# RUN: FileCheck --check-prefix=DUPMAP %s < %t/stripped-duplicate-map
348348
# DUPMAP: _main
349349
# DUPMAP-LABEL: Dead Stripped Symbols
350-
# DUPMAP: <<dead>> [ 2] _foo
350+
# DUPMAP: <<dead>> 0x00000001 [ 2] _foo
351351

352352
#--- duplicate1.s
353353
.text

lld/test/MachO/map-file.s

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
# CHECK-NEXT: 0x[[#%X,BSS]] 0x{{[0-9a-f]+}} __DATA __common
3838

3939
# CHECK-NEXT: # Symbols:
40-
# CHECK-NEXT: # Address File Name
41-
# CHECK-NEXT: 0x[[#%X,MAIN]] [ 1] _main
42-
# CHECK-NEXT: 0x[[#%X,FOO]] [ 2] _foo
43-
# CHECK-NEXT: 0x[[#%X,NUMBER]] [ 1] _number
40+
# CHECK-NEXT: # Address Size File Name
41+
# CHECK-NEXT: 0x[[#%X,MAIN]] 0x00000001 [ 1] _main
42+
# CHECK-NEXT: 0x[[#%X,FOO]] 0x00000000 [ 2] _foo
43+
# CHECK-NEXT: 0x[[#%X,NUMBER]] 0x00000000 [ 1] _number
4444

4545
# RUN: %lld -map %t/c-string-literal-map %t/c-string-literal.o -o %t/c-string-literal-out
4646
# RUN: FileCheck --check-prefix=CSTRING %s < %t/c-string-literal-map
@@ -56,10 +56,10 @@
5656

5757
## C-string literals should be printed as "literal string: <C string literal>"
5858
# DEADCSTRING-LABEL: Symbols:
59-
# DEADCSTRING-DAG: _main
60-
# DEADCSTRING-DAG: literal string: Hello world!\n
59+
# DEADCSTRING-DAG: 0x0000001D [ 1] _main
60+
# DEADCSTRING-DAG: 0x0000000E [ 1] literal string: Hello world!\n
6161
# DEADCSTRING-LABEL: Dead Stripped Symbols:
62-
# DEADCSTRING-DAG: literal string: Hello, it's me
62+
# DEADCSTRING-DAG: <<dead>> 0x0000000F [ 1] literal string: Hello, it's me
6363

6464
# MAPFILE: "name":"Total Write map file"
6565

0 commit comments

Comments
 (0)