Skip to content

Commit

Permalink
[LLD] [COFF] Fix def file exporting of symbols containing periods
Browse files Browse the repository at this point in the history
This fixes an accidental breakage of exporting symbols using def
files, when the symbol name contains a period, since commit
0ca06f7, mixing up a symbol name containing a period with
the case of exporting a symbol as a forward to another dll.

Differential Revision: https://reviews.llvm.org/D79619
  • Loading branch information
mstorsjo committed May 10, 2020
1 parent d6425e2 commit ed0a57f
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lld/COFF/Driver.cpp
Expand Up @@ -848,7 +848,8 @@ static void parseModuleDefs(StringRef path) {
// and set as "ExtName = Name". If Name has the form "OtherDll.Func",
// it shouldn't be a normal exported function but a forward to another
// DLL instead. This is supported by both MS and GNU linkers.
if (e1.ExtName != e1.Name && StringRef(e1.Name).contains('.')) {
if (!e1.ExtName.empty() && e1.ExtName != e1.Name &&
StringRef(e1.Name).contains('.')) {
e2.name = saver.save(e1.ExtName);
e2.forwardTo = saver.save(e1.Name);
config->exports.push_back(e2);
Expand Down
29 changes: 29 additions & 0 deletions lld/test/COFF/export-tricky-names.s
@@ -0,0 +1,29 @@
# REQUIRES: x86

# RUN: echo -e "EXPORTS\n foo.bar" > %t.def

# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc -defsym drectve=0 %s -o %t.obj
# RUN: lld-link -entry:dllmain -dll -def:%t.def %t.obj -out:%t.1.dll
# RUN: llvm-readobj --coff-exports %t.1.dll | FileCheck %s

# RUN: lld-link -entry:dllmain -dll %t.obj -out:%t.2.dll -export:foo.bar
# RUN: llvm-readobj --coff-exports %t.2.dll | FileCheck %s

# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc -defsym drectve=1 %s -o %t.drectve.obj
# RUN: lld-link -entry:dllmain -dll %t.drectve.obj -out:%t.3.dll
# RUN: llvm-readobj --coff-exports %t.3.dll | FileCheck %s

# CHECK: Name: foo.bar

.text
.globl dllmain
.globl foo.bar
dllmain:
ret
foo.bar:
ret

.if drectve==1
.section .drectve
.ascii "-export:foo.bar"
.endif

0 comments on commit ed0a57f

Please sign in to comment.