[LLD] [COFF] Actually include the exported comdat symbols

This is a followup to 2b01a417d7ccb001ccc1185ef5fdc967c9fac8d7;
previously the RVAs of the exported symbols from comdats were left
zero.

Thanks to Kleis Auke Wolthuizen for the fix suggestion and pointing
out the omission.

Differential Revision: https://reviews.llvm.org/D101615
This commit is contained in:
Martin Storsjö 2021-04-30 15:15:13 +03:00
parent e87fb6d387
commit 82de4e0753
2 changed files with 14 additions and 1 deletions

View File

@ -1205,6 +1205,11 @@ void LinkerDriver::maybeExportMinGWSymbols(const opt::InputArgList &args) {
if (!exporter.shouldExport(def))
return;
if (!def->isGCRoot) {
def->isGCRoot = true;
config->gcroot.push_back(def);
}
Export e;
e.name = def->getName();
e.sym = def;

View File

@ -4,6 +4,7 @@
# RUN: lld-link -lldmingw -dll -out:%t.dll -entry:DllMainCRTStartup@12 %t.obj -implib:%t.lib
# RUN: llvm-readobj --coff-exports %t.dll | grep Name: | FileCheck %s
# RUN: llvm-readobj --coff-exports %t.dll | FileCheck %s --check-prefix=CHECK-RVA
# RUN: llvm-readobj %t.lib | FileCheck -check-prefix=IMPLIB %s
# CHECK: Name:
@ -12,6 +13,13 @@
# CHECK-NEXT: Name: foobar
# CHECK-EMPTY:
# CHECK-RVA: Name: comdatFunc
# CHECK-RVA-NEXT: RVA: 0x1003
# CHECK-RVA: Name: dataSym
# CHECK-RVA-NEXT: RVA: 0x3000
# CHECK-RVA: Name: foobar
# CHECK-RVA-NEXT: RVA: 0x1001
# IMPLIB: Symbol: __imp__comdatFunc
# IMPLIB: Symbol: _comdatFunc
# IMPLIB: Symbol: __imp__dataSym
@ -33,7 +41,7 @@ _foobar:
ret
_unexported:
ret
.section .text@_comdatFunc,"xr",one_only,_comdatFunc
.section .text$_comdatFunc,"xr",one_only,_comdatFunc
_comdatFunc:
ret
.data