diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 076561807af47..ef9d051bf976e 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -1553,7 +1553,7 @@ void Writer::createSymbolAndStringTable() { dthunk->wrappedSym->writtenToSymtab = true; if (std::optional sym = createSymbol(dthunk->wrappedSym)) { - if (d->getName().size() > COFF::NameSize) + if (dthunk->wrappedSym->getName().size() > COFF::NameSize) longNameSymbols.emplace_back(outputSymtab.size(), dthunk->wrappedSym->getName()); outputSymtab.push_back(*sym); diff --git a/lld/test/COFF/strtab.s b/lld/test/COFF/strtab.s index fbdd8df52d540..9edc13e19e825 100644 --- a/lld/test/COFF/strtab.s +++ b/lld/test/COFF/strtab.s @@ -1,17 +1,32 @@ # REQUIRES: x86 # RUN: llvm-mc -triple=x86_64-windows-msvc %s -filetype=obj -o %t.obj -# RUN: lld-link -out:%t.exe -entry:main %t.obj -debug:dwarf +# RUN: lld-link -machine:x64 -def:%S/Inputs/library.def -implib:%t.lib +# RUN: lld-link -out:%t.exe -entry:main %t.obj %t.lib -debug:dwarf # RUN: llvm-readobj --string-table %t.exe | FileCheck %s +# RUN: llvm-nm %t.exe | FileCheck %s --check-prefix=SYMBOLS + +# Note, for this test to have the intended test coverage, the imported symbol +# "function" needs to be such that the symbol name itself is <= 8 chars, while +# "__imp_"+name is >8 chars. # CHECK: StringTable { -# CHECK-NEXT: Length: 87 +# CHECK-NEXT: Length: 102 # CHECK-NEXT: [ 4] .debug_abbrev # CHECK-NEXT: [ 12] .debug_line # CHECK-NEXT: [ 1e] long_name_symbolz # CHECK-NEXT: [ 30] .debug_abbrez -# CHECK-NEXT: [ 3e] __impl_long_name_symbolA +# CHECK-NEXT: [ 3e] __imp_function +# CHECK-NEXT: [ 4d] __impl_long_name_symbolA # CHECK-NEXT: } +# SYMBOLS: 140001000 N .debug_abbrez +# SYMBOLS-NEXT: 140002070 R __imp_function +# SYMBOLS-NEXT: 140001000 t __impl_long_name_symbolA +# SYMBOLS-NEXT: 140001010 T function +# SYMBOLS-NEXT: 140001000 t long_name_symbolA +# SYMBOLS-NEXT: 140001000 t long_name_symbolz +# SYMBOLS-NEXT: 140001000 T main +# SYMBOLS-NEXT: 140001000 t name_symbolA .global main .text @@ -21,6 +36,7 @@ long_name_symbolA: __impl_long_name_symbolA: name_symbolA: .debug_abbrez: + call function ret .section .debug_abbrev,"dr"