forked from OSchip/llvm-project
[COFF] Improve the autoexport check for symbols from import libraries with -opt:noref
If -opt:noref is specified, they can end up with isLive() == 1 when the autoexport check is run. To reduce the risk of potential issues, only consider exporting DefinedRegular and DefinedCommon, nothing else. Differential Revision: https://reviews.llvm.org/D40014 llvm-svn: 318384
This commit is contained in:
parent
3920189bcc
commit
fe3eda9137
|
@ -91,8 +91,16 @@ AutoExporter::AutoExporter() {
|
|||
bool AutoExporter::shouldExport(Defined *Sym) const {
|
||||
if (!Sym || !Sym->isLive() || !Sym->getChunk())
|
||||
return false;
|
||||
// Only allow the symbol kinds that make sense to export; in particular,
|
||||
// disallow import symbols.
|
||||
if (!isa<DefinedRegular>(Sym) && !isa<DefinedCommon>(Sym))
|
||||
return false;
|
||||
if (ExcludeSymbols.count(Sym->getName()))
|
||||
return false;
|
||||
// Check that file is non-null before dereferencing it, symbols not
|
||||
// originating in regular object files probably shouldn't be exported.
|
||||
if (!Sym->getFile())
|
||||
return false;
|
||||
StringRef LibName = sys::path::filename(Sym->getFile()->ParentName);
|
||||
// Drop the file extension.
|
||||
LibName = LibName.substr(0, LibName.rfind('.'));
|
||||
|
|
|
@ -65,3 +65,14 @@ _dataSym:
|
|||
# CHECK-EXCLUDE: EXPORTS
|
||||
# CHECK-EXCLUDE-NEXT: foobar @1
|
||||
# CHECK-EXCLUDE-NEXT: EOF
|
||||
|
||||
# Test that we handle import libraries together with -opt:noref.
|
||||
|
||||
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
|
||||
# RUN: lld-link -lldmingw -dll -out:%t.dll -entry:main@0 %t.obj -implib:%t.lib -opt:noref %p/Inputs/std32.lib -output-def:%t.def
|
||||
# RUN: echo "EOF" >> %t.def
|
||||
# RUN: cat %t.def | FileCheck -check-prefix=CHECK-IMPLIB %s
|
||||
|
||||
# CHECK-IMPLIB: EXPORTS
|
||||
# CHECK-IMPLIB-NEXT: main@0 @1
|
||||
# CHECK-IMPLIB-NEXT: EOF
|
||||
|
|
Loading…
Reference in New Issue