[PATCH] D65727: [LLD] [COFF] Omit automatically imported symbols from the symbol table

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 5 04:57:37 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL367836: [COFF] Omit automatically imported symbols from the symbol table (authored by mstorsjo, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D65727?vs=213265&id=213325#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65727/new/

https://reviews.llvm.org/D65727

Files:
  lld/trunk/COFF/Writer.cpp
  lld/trunk/test/COFF/autoimport-gnu-implib.s
  lld/trunk/test/COFF/autoimport-x86.s


Index: lld/trunk/COFF/Writer.cpp
===================================================================
--- lld/trunk/COFF/Writer.cpp
+++ lld/trunk/COFF/Writer.cpp
@@ -1095,6 +1095,13 @@
   }
   }
 
+  // Symbols that are runtime pseudo relocations don't point to the actual
+  // symbol data itself (as they are imported), but points to the IAT entry
+  // instead. Avoid emitting them to the symbol table, as they can confuse
+  // debuggers.
+  if (def->isRuntimePseudoReloc)
+    return None;
+
   StringRef name = def->getName();
   if (name.size() > COFF::NameSize) {
     sym.Name.Offset.Zeroes = 0;
Index: lld/trunk/test/COFF/autoimport-gnu-implib.s
===================================================================
--- lld/trunk/test/COFF/autoimport-gnu-implib.s
+++ lld/trunk/test/COFF/autoimport-gnu-implib.s
@@ -7,9 +7,10 @@
 # RUN: llvm-ar rcs %t-implib.a %t-dabcdh.o %t-dabcds00000.o %t-dabcdt.o
 
 # RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.obj
-# RUN: lld-link -lldmingw -out:%t.exe -entry:main %t.obj %t-implib.a -verbose
+# RUN: lld-link -lldmingw -debug:symtab -out:%t.exe -entry:main %t.obj %t-implib.a -verbose
 
 # RUN: llvm-readobj --coff-imports %t.exe | FileCheck -check-prefix=IMPORTS %s
+# RUN: llvm-nm %t.exe | FileCheck -check-prefix=SYMBOLS %s
 
 # IMPORTS: Import {
 # IMPORTS-NEXT: Name: foo.dll
@@ -18,6 +19,10 @@
 # IMPORTS-NEXT: Symbol: data (0)
 # IMPORTS-NEXT: }
 
+# Check that the automatically imported symbol "data" is not listed in
+# the symbol table.
+# SYMBOLS-NOT: {{ }}data
+
     .global main
     .text
 main:
Index: lld/trunk/test/COFF/autoimport-x86.s
===================================================================
--- lld/trunk/test/COFF/autoimport-x86.s
+++ lld/trunk/test/COFF/autoimport-x86.s
@@ -5,11 +5,12 @@
 # RUN: lld-link -out:%t-lib.dll -dll -entry:DllMainCRTStartup %t-lib.obj -lldmingw -implib:%t-lib.lib
 
 # RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.obj
-# RUN: lld-link -lldmingw -out:%t.exe -entry:main %t.obj %t-lib.lib -verbose
+# RUN: lld-link -lldmingw -debug:symtab -out:%t.exe -entry:main %t.obj %t-lib.lib -verbose
 
 # RUN: llvm-readobj --coff-imports %t.exe | FileCheck -check-prefix=IMPORTS %s
 # RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=DISASM %s
 # RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=CONTENTS %s
+# RUN: llvm-nm %t.exe | FileCheck -check-prefix=SYMBOLS %s
 
 # IMPORTS: Import {
 # IMPORTS-NEXT: Name: autoimport-x86.s.tmp-lib.dll
@@ -20,7 +21,7 @@
 
 # DISASM: Disassembly of section .text:
 # DISASM-EMPTY:
-# DISASM: .text:
+# DISASM: main:
 # Relative offset at 0x1002 pointing at the IAT at 0x2080.
 # DISASM: 140001000:      8b 05 7a 10 00 00       movl    4218(%rip), %eax
 # DISASM: 140001006:      c3      retq
@@ -41,6 +42,10 @@
 # CONTENTS:  140003000 80200040 01000000 00200040 01000000
 # CONTENTS:  140003010 24200040 01000000
 
+# Check that the automatically imported symbol "variable" is not listed in
+# the symbol table.
+# SYMBOLS-NOT: variable
+
     .global main
     .text
 main:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65727.213325.patch
Type: text/x-patch
Size: 3062 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190805/f4382429/attachment.bin>


More information about the llvm-commits mailing list