[PATCH] D44180: Improve --warn-symbol-ordering.

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 7 09:18:22 PST 2018


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD326911: Improve --warn-symbol-ordering. (authored by ruiu, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D44180?vs=137412&id=137413#toc

Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D44180

Files:
  ELF/Writer.cpp
  test/ELF/symbol-ordering-file-icf.s
  test/ELF/symbol-ordering-file-warnings.s


Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -1045,28 +1045,35 @@
       SymbolOrderEntry &Ent = It->second;
       Ent.Present = true;
 
-      auto *D = dyn_cast<Defined>(Sym);
-      if (Config->WarnSymbolOrdering) {
-        if (Sym->isUndefined())
-          warn(File->getName() +
-               ": unable to order undefined symbol: " + Sym->getName());
-        else if (Sym->isShared())
-          warn(File->getName() +
-               ": unable to order shared symbol: " + Sym->getName());
-        else if (D && !D->Section)
-          warn(File->getName() +
-               ": unable to order absolute symbol: " + Sym->getName());
-        else if (D && !D->Section->Live)
-          warn(File->getName() +
-               ": unable to order discarded symbol: " + Sym->getName());
+      auto Warning = [&](StringRef Msg) {
+        if (Config->WarnSymbolOrdering)
+          warn(File->getName() + ": " + Msg + ": " + Sym->getName());
+      };
+
+      if (Sym->isUndefined()) {
+        Warning("unable to order undefined symbol");
+        continue;
       }
-      if (!D)
+      if (Sym->isShared()) {
+        Warning("unable to order shared symbol");
         continue;
+      }
 
-      if (auto *Sec = dyn_cast_or_null<InputSectionBase>(D->Section)) {
-        int &Priority = SectionOrder[cast<InputSectionBase>(Sec->Repl)];
-        Priority = std::min(Priority, Ent.Priority);
+      auto *Sec = dyn_cast_or_null<InputSectionBase>(cast<Defined>(Sym)->Section);
+      if (!Sec) {
+        Warning("unable to order absolute symbol");
+        continue;
+      }
+      if (!Sec->Live) {
+        if (Sec->Repl == Sec)
+          Warning("unable to order discarded symbol");
+        else
+          Warning("unable to order a symbol merged by ICF");
+        continue;
       }
+
+      int &Priority = SectionOrder[cast<InputSectionBase>(Sec->Repl)];
+      Priority = std::min(Priority, Ent.Priority);
     }
   }
 
Index: test/ELF/symbol-ordering-file-warnings.s
===================================================================
--- test/ELF/symbol-ordering-file-warnings.s
+++ test/ELF/symbol-ordering-file-warnings.s
@@ -109,7 +109,7 @@
 # WARN-NOT:    warning:
 # MISSING:     warning: symbol ordering file: no such symbol: missing
 # MISSING2:    warning: symbol ordering file: no such symbol: missing_sym
-# ICF:         warning: {{.*}}1.o: unable to order discarded symbol: icf2
+# ICF:         warning: {{.*}}1.o: unable to order a symbol merged by ICF: icf2
 # COMDAT:      warning: {{.*}}1.o: unable to order discarded symbol: comdat
 # COMDAT-NEXT: warning: {{.*}}2.o: unable to order discarded symbol: comdat
 # MULTI:       warning: {{.*}}2.o: unable to order absolute symbol: multi
Index: test/ELF/symbol-ordering-file-icf.s
===================================================================
--- test/ELF/symbol-ordering-file-icf.s
+++ test/ELF/symbol-ordering-file-icf.s
@@ -6,11 +6,10 @@
 # RUN: ld.lld --icf=all --symbol-ordering-file %t.order -shared %t.o -o %t.so
 # RUN: llvm-nm %t.so | FileCheck %s
 
-## Check that after ICF merges 'foo' and 'zed' we still
-## place them before 'bar', in according to ordering file.
-# CHECK-DAG: 0000000000001000 T foo
-# CHECK-DAG: 0000000000001000 T zed
-# CHECK-DAG: 0000000000001004 T bar
+## Check that we do not sort ICF'ed symbols 'foo' and 'zed'.
+# CHECK-DAG: 0000000000001000 T bar
+# CHECK-DAG: 0000000000001004 T foo
+# CHECK-DAG: 0000000000001004 T zed
 
 .section .text.foo,"ax", at progbits
 .align 4


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44180.137413.patch
Type: text/x-patch
Size: 3586 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180307/9c9dcaf1/attachment.bin>


More information about the llvm-commits mailing list