Skip to content

Commit

Permalink
[LLD][COFF] Support /ignore:4099. Support /ignore with comma-separate…
Browse files Browse the repository at this point in the history
…d arguments.

Differential Revision: https://reviews.llvm.org/D56392

llvm-svn: 350956
  • Loading branch information
aganea committed Jan 11, 2019
1 parent f8dded2 commit 27ba559
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 15 deletions.
1 change: 1 addition & 0 deletions lld/COFF/Config.h
Expand Up @@ -197,6 +197,7 @@ struct Configuration {
bool MinGW = false;
bool WarnMissingOrderSymbol = true;
bool WarnLocallyDefinedImported = true;
bool WarnDebugInfoUnusable = true;
bool Incremental = true;
bool IntegrityCheck = false;
bool KillAt = false;
Expand Down
16 changes: 11 additions & 5 deletions lld/COFF/Driver.cpp
Expand Up @@ -986,11 +986,17 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {

// Handle /ignore
for (auto *Arg : Args.filtered(OPT_ignore)) {
if (StringRef(Arg->getValue()) == "4037")
Config->WarnMissingOrderSymbol = false;
else if (StringRef(Arg->getValue()) == "4217")
Config->WarnLocallyDefinedImported = false;
// Other warning numbers are ignored.
SmallVector<StringRef, 8> Vec;
StringRef(Arg->getValue()).split(Vec, ',');
for (StringRef S : Vec) {
if (S == "4037")
Config->WarnMissingOrderSymbol = false;
else if (S == "4099")
Config->WarnDebugInfoUnusable = false;
else if (S == "4217")
Config->WarnLocallyDefinedImported = false;
// Other warning numbers are ignored.
}
}

// Handle /out
Expand Down
6 changes: 4 additions & 2 deletions lld/COFF/PDB.cpp
Expand Up @@ -1301,8 +1301,10 @@ void PDBLinker::addObjFile(ObjFile *File, CVIndexMap *ExternIndexMap) {

// If the .debug$T sections fail to merge, assume there is no debug info.
if (!IndexMapResult) {
auto FileName = sys::path::filename(Path);
warn("Cannot use debug info for '" + FileName + "'\n" +
if (!Config->WarnDebugInfoUnusable)
return;
StringRef FileName = sys::path::filename(Path);
warn("Cannot use debug info for '" + FileName + "' [LNK4099]\n" +
">>> failed to load reference " +
StringRef(toString(IndexMapResult.takeError())));
return;
Expand Down
16 changes: 16 additions & 0 deletions lld/test/COFF/ignore-many.test
@@ -0,0 +1,16 @@
Tests /ignore with more than one argument.

RUN: yaml2obj %S/ignore4217.yaml > %t1.obj
RUN: yaml2obj %S/Inputs/pdb-type-server-missing-2.yaml > %t2.obj
RUN: echo foo > %t3.order

RUN: lld-link /entry:main /out:%t.exe %t1.obj %t2.obj /order:@%t3.order /debug 2>&1 | FileCheck -check-prefix=WARNINGS %s
RUN: lld-link /entry:main /out:%t.exe %t1.obj %t2.obj /order:@%t3.order /debug /ignore:4217,4099,4037 2>&1 | FileCheck -allow-empty -check-prefix=SUPPRESSED %s

WARNINGS: locally defined symbol imported
WARNINGS: missing symbol: foo
WARNINGS: warning: Cannot use debug info for

SUPPRESSED-NOT: locally defined symbol imported
SUPPRESSED-NOT: missing symbol: foo
SUPPRESSED-NOT: warning: Cannot use debug info for
19 changes: 14 additions & 5 deletions lld/test/COFF/pdb-type-server-missing.yaml
Expand Up @@ -4,13 +4,22 @@

# RUN: yaml2obj %s -o %t1.obj
# RUN: yaml2obj %p/Inputs/pdb-type-server-missing-2.yaml -o %t2.obj
# RUN: lld-link %t1.obj %t2.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main 2>&1 | FileCheck %s
# RUN: lld-link %t1.obj %t2.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main 2>&1 | FileCheck %s -check-prefix=WARN
# RUN: lld-link %t1.obj %t2.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main /ignore:4099 2>&1 | FileCheck %s -check-prefix=IGNORE -allow-empty
# RUN: not lld-link %t1.obj %t2.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main /WX 2>&1 | FileCheck %s -check-prefix=ERR
# RUN: lld-link %t1.obj %t2.obj -out:%t.exe -debug -pdb:%t.pdb -nodefaultlib -entry:main /ignore:4099 /WX 2>&1 | FileCheck %s -check-prefix=IGNORE-ERR -allow-empty

# CHECK: warning: Cannot use debug info for {{.*}}.obj
# CHECK-NEXT: {{N|n}}o such file or directory
# WARN: warning: Cannot use debug info for '{{.*}}.obj' [LNK4099]
# WARN-NEXT: {{N|n}}o such file or directory

# CHECK: warning: Cannot use debug info for {{.*}}.obj
# CHECK-NEXT: {{N|n}}o such file or directory
# IGNORE-NOT: warning: Cannot use debug info for '{{.*}}.obj' [LNK4099]
# IGNORE-NOT: {{N|n}}o such file or directory

# ERR: error: Cannot use debug info for '{{.*}}.obj' [LNK4099]
# ERR-NEXT: {{N|n}}o such file or directory

# IGNORE-ERR-NOT: error: Cannot use debug info for '{{.*}}.obj' [LNK4099]
# IGNORE-ERR-NOT: {{N|n}}o such file or directory

--- !COFF
header:
Expand Down
6 changes: 3 additions & 3 deletions lld/test/COFF/precomp-link.test
Expand Up @@ -8,11 +8,11 @@ RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-invalid.obj %S/Inputs/pr

RUN: not lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj /nodefaultlib /entry:main /debug /pdb:%t.pdb /out:%t.exe /opt:ref /opt:icf 2>&1 | FileCheck %s -check-prefix FAILURE-MISSING-PRECOMPOBJ

FAILURE: warning: Cannot use debug info for 'precomp-invalid.obj'
FAILURE: warning: Cannot use debug info for 'precomp-invalid.obj' [LNK4099]
FAILURE-NEXT: failed to load reference '{{.*}}precomp.obj': The signature does not match; the file(s) might be out of date.

FAILURE-MISSING-PRECOMPOBJ: warning: Cannot use debug info for 'precomp-a.obj'
FAILURE-MISSING-PRECOMPOBJ-NEXT: failed to load reference 'precomp.obj': The path to this file must be provided on the command-line
FAILURE-MISSING-PRECOMPOBJ: warning: Cannot use debug info for 'precomp-a.obj' [LNK4099]
FAILURE-MISSING-PRECOMPOBJ-NEXT: failed to load reference '{{.*}}precomp.obj': The path to this file must be provided on the command-line

CHECK: Types (TPI Stream)
CHECK-NOT: LF_PRECOMP
Expand Down

0 comments on commit 27ba559

Please sign in to comment.