diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1205,6 +1205,11 @@ 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; diff --git a/lld/test/COFF/export-all.s b/lld/test/COFF/export-all.s --- a/lld/test/COFF/export-all.s +++ b/lld/test/COFF/export-all.s @@ -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 @@ ret _unexported: ret -.section .text@_comdatFunc,"xr",one_only,_comdatFunc +.section .text$_comdatFunc,"xr",one_only,_comdatFunc _comdatFunc: ret .data