Просмотр исходного кода

[lld-link] Add support for /ignore:4037.

Fixes PR36657.
https://reviews.llvm.org/D44286


git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@327124 91177308-0d34-0410-b5e6-96231b3b80d8
Nico Weber 7 лет назад
Родитель
Сommit
be9c93ab96
3 измененных файлов с 16 добавлено и 4 удалено
  1. 1 0
      COFF/Config.h
  2. 7 3
      COFF/Driver.cpp
  3. 8 1
      test/COFF/order.test

+ 1 - 0
COFF/Config.h

@@ -187,6 +187,7 @@ struct Configuration {
   bool HighEntropyVA = false;
   bool HighEntropyVA = false;
   bool AppContainer = false;
   bool AppContainer = false;
   bool MinGW = false;
   bool MinGW = false;
+  bool WarnMissingOrderSymbol = true;
   bool WarnLocallyDefinedImported = true;
   bool WarnLocallyDefinedImported = true;
   bool Incremental = true;
   bool Incremental = true;
 };
 };

+ 7 - 3
COFF/Driver.cpp

@@ -804,8 +804,10 @@ static void parseOrderFile(StringRef Arg) {
     if (Config->Machine == I386 && !isDecorated(S))
     if (Config->Machine == I386 && !isDecorated(S))
       S = "_" + S;
       S = "_" + S;
 
 
-    if (Set.count(S) == 0)
-      warn("/order:" + Arg + ": missing symbol: " + S);
+    if (Set.count(S) == 0) {
+      if (Config->WarnMissingOrderSymbol)
+        warn("/order:" + Arg + ": missing symbol: " + S);
+    }
     else
     else
       Config->Order[S] = INT_MIN + Config->Order.size();
       Config->Order[S] = INT_MIN + Config->Order.size();
   }
   }
@@ -899,7 +901,9 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
 
 
   // Handle /ignore
   // Handle /ignore
   for (auto *Arg : Args.filtered(OPT_ignore)) {
   for (auto *Arg : Args.filtered(OPT_ignore)) {
-    if (StringRef(Arg->getValue()) == "4217")
+    if (StringRef(Arg->getValue()) == "4037")
+      Config->WarnMissingOrderSymbol = false;
+    else if (StringRef(Arg->getValue()) == "4217")
       Config->WarnLocallyDefinedImported = false;
       Config->WarnLocallyDefinedImported = false;
     // Other warning numbers are ignored.
     // Other warning numbers are ignored.
   }
   }

+ 8 - 1
test/COFF/order.test

@@ -16,7 +16,7 @@
 # CHECK: unrelated2
 # CHECK: unrelated2
 
 
 # RUN: lld-link -entry:fn1 -subsystem:console -opt:noref -debug %t1.obj %t2.obj \
 # RUN: lld-link -entry:fn1 -subsystem:console -opt:noref -debug %t1.obj %t2.obj \
-# RUN:   -lldmap:- -out:%t.exe | FileCheck -check-prefix=DEFAULT %s
+# RUN:   -lldmap:- -ignore:4037 -out:%t.exe | FileCheck -check-prefix=DEFAULT %s
 # DEFAULT: fn2
 # DEFAULT: fn2
 # DEFAULT: fn3
 # DEFAULT: fn3
 # DEFAULT: unrelated1
 # DEFAULT: unrelated1
@@ -35,6 +35,13 @@
 # WARN-NOT: f2
 # WARN-NOT: f2
 # WARN-NOT: f3
 # WARN-NOT: f3
 # WARN-NOT: f4
 # WARN-NOT: f4
+# RUN: lld-link -entry:fn1 -subsystem:console -debug %t1.obj %t2.obj \
+# RUN:   -out:%t.exe -order:@%t2.order -ignore:4037 2>&1 | \
+# RUN:   FileCheck -allow-empty -check-prefix=NOWARN %s
+# NOWARN-NOT: warning: /order:{{.*}} missing symbol: foo
+# NOWARN-NOT: f2
+# NOWARN-NOT: f3
+# NOWARN-NOT: f4
 
 
 --- !COFF
 --- !COFF
 header:
 header: