From b0084a0eee27527981130bdc85d1810082fabf00 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 7 Mar 2018 17:24:46 +0000 Subject: [PATCH] Revert r326911: Improve --warn-symbol-ordering. This reverts commit r326911 because it was committed by accident. llvm-svn: 326914 --- lld/ELF/Writer.cpp | 43 ++++++++------------ lld/test/ELF/symbol-ordering-file-icf.s | 9 ++-- lld/test/ELF/symbol-ordering-file-warnings.s | 2 +- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index b29c383007ac..309022dbb929 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1045,35 +1045,28 @@ static DenseMap buildSectionOrder() { SymbolOrderEntry &Ent = It->second; Ent.Present = true; - auto Warning = [&](StringRef Msg) { - if (Config->WarnSymbolOrdering) - warn(File->getName() + ": " + Msg + ": " + Sym->getName()); - }; - - if (Sym->isUndefined()) { - Warning("unable to order undefined symbol"); - continue; + auto *D = dyn_cast(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()); } - if (Sym->isShared()) { - Warning("unable to order shared symbol"); + if (!D) continue; - } - auto *Sec = dyn_cast_or_null(cast(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; + if (auto *Sec = dyn_cast_or_null(D->Section)) { + int &Priority = SectionOrder[cast(Sec->Repl)]; + Priority = std::min(Priority, Ent.Priority); } - - int &Priority = SectionOrder[cast(Sec->Repl)]; - Priority = std::min(Priority, Ent.Priority); } } diff --git a/lld/test/ELF/symbol-ordering-file-icf.s b/lld/test/ELF/symbol-ordering-file-icf.s index 14a835c18ccc..93e377cb53b0 100644 --- a/lld/test/ELF/symbol-ordering-file-icf.s +++ b/lld/test/ELF/symbol-ordering-file-icf.s @@ -6,10 +6,11 @@ # 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 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 +## 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 .section .text.foo,"ax",@progbits .align 4 diff --git a/lld/test/ELF/symbol-ordering-file-warnings.s b/lld/test/ELF/symbol-ordering-file-warnings.s index a41a9fc60718..aabac53b06be 100644 --- a/lld/test/ELF/symbol-ordering-file-warnings.s +++ b/lld/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 a symbol merged by ICF: icf2 +# ICF: warning: {{.*}}1.o: unable to order discarded symbol: 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 -- 2.34.1