diff options
author | Alexandre Ganea <alexandre.ganea@ubisoft.com> | 2019-01-11 19:10:01 +0000 |
---|---|---|
committer | Alexandre Ganea <alexandre.ganea@ubisoft.com> | 2019-01-11 19:10:01 +0000 |
commit | bb590804f339175c458cca242fc4d88defd242ab (patch) | |
tree | 695ba4b6e53c2a6a3d77ef386a763d3242295941 /lld | |
parent | 2948827c5676c4e89917978b01893cde8644d111 (diff) |
[LLD][COFF] Support /ignore:4099. Support /ignore with comma-separated arguments.
Differential Revision: https://reviews.llvm.org/D56392
Diffstat (limited to 'lld')
-rw-r--r-- | lld/COFF/Config.h | 1 | ||||
-rw-r--r-- | lld/COFF/Driver.cpp | 16 | ||||
-rw-r--r-- | lld/COFF/PDB.cpp | 6 | ||||
-rw-r--r-- | lld/test/COFF/ignore-many.test | 16 | ||||
-rw-r--r-- | lld/test/COFF/pdb-type-server-missing.yaml | 19 | ||||
-rw-r--r-- | lld/test/COFF/precomp-link.test | 6 |
6 files changed, 49 insertions, 15 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 12b74c799db..8915b6a3bdd 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -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; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 78b47040e03..2e4b1e6d314 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -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 diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 10b3fc1108d..296009b461a 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -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; diff --git a/lld/test/COFF/ignore-many.test b/lld/test/COFF/ignore-many.test new file mode 100644 index 00000000000..31398106c17 --- /dev/null +++ b/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 diff --git a/lld/test/COFF/pdb-type-server-missing.yaml b/lld/test/COFF/pdb-type-server-missing.yaml index 7766a48c1cf..1a8c9a05c3d 100644 --- a/lld/test/COFF/pdb-type-server-missing.yaml +++ b/lld/test/COFF/pdb-type-server-missing.yaml @@ -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: diff --git a/lld/test/COFF/precomp-link.test b/lld/test/COFF/precomp-link.test index f7be26c8779..b60b0b2f1d7 100644 --- a/lld/test/COFF/precomp-link.test +++ b/lld/test/COFF/precomp-link.test @@ -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
|