Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -494,7 +494,7 @@ static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName, const Symbol &B) { - if (B.isFile() || B.isSection()) + if (B.isSection()) return false; // If sym references a section in a discarded group, don't keep it. Index: test/ELF/file-sym.s =================================================================== --- test/ELF/file-sym.s +++ test/ELF/file-sym.s @@ -1,12 +0,0 @@ -# Check that we do not keep STT_FILE symbols in the symbol table - -# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o -# RUN: ld.lld %t.o -shared -o %t.so -# RUN: llvm-readobj -symbols %t.so | FileCheck %s - -# REQUIRES: x86 - -# CHECK-NOT: Name: xxx - -.file "xxx" -.file "" Index: test/ELF/local-symbols-order.s =================================================================== --- test/ELF/local-symbols-order.s +++ test/ELF/local-symbols-order.s @@ -0,0 +1,27 @@ +# REQUIRES: x86 + +# RUN: echo '.file "file2"; foo2:; .global bar2; .hidden bar2; bar2:' > %t2.s +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %t2.s -o %t2.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o + +# RUN: ld.lld -o %t %t1.o %t2.o +# RUN: llvm-readobj -symbols -elf-output-style=GNU %t | FileCheck %s + +## Show the order of the local symbols produced currently by LLD. + +# CHECK: Num: Value Size Type Bind Vis Ndx Name +# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND +# CHECK-NEXT: 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS file1 +# CHECK-NEXT: 2: 0000000000201000 0 NOTYPE LOCAL DEFAULT 1 foo1 +# CHECK-NEXT: 3: 0000000000000000 0 FILE LOCAL DEFAULT ABS file2 +# CHECK-NEXT: 4: 0000000000201000 0 NOTYPE LOCAL DEFAULT 1 foo2 +# CHECK-NEXT: 5: 0000000000201000 0 NOTYPE LOCAL HIDDEN 1 bar1 +# CHECK-NEXT: 6: 0000000000201000 0 NOTYPE LOCAL HIDDEN 1 bar2 + +foo1: + +.global bar1 +.hidden bar1 +bar1: + +.file "file1" Index: test/ELF/lto/data-ordering-lto.s =================================================================== --- test/ELF/lto/data-ordering-lto.s +++ test/ELF/lto/data-ordering-lto.s @@ -12,13 +12,14 @@ # Check that the order is tin -> dipsy -> pat. -# CHECK: Symbol table '.symtab' contains 5 entries: +# CHECK: Symbol table '.symtab' contains 6 entries: # CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name # CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND -# CHECK-NEXT: 1: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 1 _start -# CHECK-NEXT: 2: 0000000000202004 4 OBJECT GLOBAL DEFAULT 2 dipsy -# CHECK-NEXT: 3: 0000000000202008 4 OBJECT GLOBAL DEFAULT 2 pat -# CHECK-NEXT: 4: 0000000000202000 4 OBJECT GLOBAL DEFAULT 2 tin +# CHECK-NEXT: 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS {{.*}}.o +# CHECK-NEXT: 2: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 1 _start +# CHECK-NEXT: 3: 0000000000202004 4 OBJECT GLOBAL DEFAULT 2 dipsy +# CHECK-NEXT: 4: 0000000000202008 4 OBJECT GLOBAL DEFAULT 2 pat +# CHECK-NEXT: 5: 0000000000202000 4 OBJECT GLOBAL DEFAULT 2 tin .globl _start _start: Index: test/ELF/lto/parallel-internalize.ll =================================================================== --- test/ELF/lto/parallel-internalize.ll +++ test/ELF/lto/parallel-internalize.ll @@ -18,6 +18,24 @@ ; CHECK-NEXT: Section: Undefined (0x0) ; CHECK-NEXT: } ; CHECK-NEXT: Symbol { +; CHECK-NEXT: Name: {{.*}}.o +; CHECK-NEXT: Value: 0x0 +; CHECK-NEXT: Size: 0 +; CHECK-NEXT: Binding: Local +; CHECK-NEXT: Type: File +; CHECK-NEXT: Other: 0 +; CHECK-NEXT: Section: Absolute +; CHECK-NEXT: } +; CHECK-NEXT: Symbol { +; CHECK-NEXT: Name: {{.*}}.o +; CHECK-NEXT: Value: 0x0 +; CHECK-NEXT: Size: 0 +; CHECK-NEXT: Binding: Local +; CHECK-NEXT: Type: File +; CHECK-NEXT: Other: 0 +; CHECK-NEXT: Section: Absolute +; CHECK-NEXT: } +; CHECK-NEXT: Symbol { ; CHECK-NEXT: Name: bar ; CHECK-NEXT: Value: 0x201010 ; CHECK-NEXT: Size: 8 Index: test/ELF/lto/relocatable.ll =================================================================== --- test/ELF/lto/relocatable.ll +++ test/ELF/lto/relocatable.ll @@ -14,6 +14,15 @@ ; CHECK-NEXT: Section: Undefined ; CHECK-NEXT: } ; CHECK-NEXT: Symbol { +; CHECK-NEXT: Name: {{.*}}.o +; CHECK-NEXT: Value: 0x0 +; CHECK-NEXT: Size: 0 +; CHECK-NEXT: Binding: Local +; CHECK-NEXT: Type: File +; CHECK-NEXT: Other: 0 +; CHECK-NEXT: Section: Absolute +; CHECK-NEXT: } +; CHECK-NEXT: Symbol { ; CHECK-NEXT: Name: ; CHECK-NEXT: Value: 0x0 ; CHECK-NEXT: Size: 0 Index: test/ELF/lto/symbol-ordering-lto.s =================================================================== --- test/ELF/lto/symbol-ordering-lto.s +++ test/ELF/lto/symbol-ordering-lto.s @@ -12,12 +12,13 @@ # Check that the order is tin -> _start -> pat. -# CHECK: Symbol table '.symtab' contains 4 entries: +# CHECK: Symbol table '.symtab' contains 5 entries: # CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name # CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND -# CHECK-NEXT: 1: 0000000000201008 0 NOTYPE GLOBAL DEFAULT 1 _start -# CHECK-NEXT: 2: 0000000000201020 6 FUNC GLOBAL DEFAULT 1 pat -# CHECK-NEXT: 3: 0000000000201000 6 FUNC GLOBAL DEFAULT 1 tin +# CHECK-NEXT: 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS {{.*}}.o +# CHECK-NEXT: 2: 0000000000201008 0 NOTYPE GLOBAL DEFAULT 1 _start +# CHECK-NEXT: 3: 0000000000201020 6 FUNC GLOBAL DEFAULT 1 pat +# CHECK-NEXT: 4: 0000000000201000 6 FUNC GLOBAL DEFAULT 1 tin .globl _start _start: