diff options
| author | Rui Ueyama <ruiu@google.com> | 2018-03-07 17:24:46 +0000 | 
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2018-03-07 17:24:46 +0000 | 
| commit | b0084a0eee27527981130bdc85d1810082fabf00 (patch) | |
| tree | 8204e27a1aca6ff89792d2024229fc3059e92db0 | |
| parent | 7b7224051cf5b520789a50471b1798dda4e9764c (diff) | |
| download | bcm5719-llvm-b0084a0eee27527981130bdc85d1810082fabf00.tar.gz bcm5719-llvm-b0084a0eee27527981130bdc85d1810082fabf00.zip  | |
Revert r326911: Improve --warn-symbol-ordering.
This reverts commit r326911 because it was committed by accident.
llvm-svn: 326914
| -rw-r--r-- | lld/ELF/Writer.cpp | 43 | ||||
| -rw-r--r-- | lld/test/ELF/symbol-ordering-file-icf.s | 9 | ||||
| -rw-r--r-- | 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 b29c383007a..309022dbb92 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1045,35 +1045,28 @@ static DenseMap<const InputSectionBase *, int> 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<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());        } -      if (Sym->isShared()) { -        Warning("unable to order shared symbol"); +      if (!D)          continue; -      } -      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; +      if (auto *Sec = dyn_cast_or_null<InputSectionBase>(D->Section)) { +        int &Priority = SectionOrder[cast<InputSectionBase>(Sec->Repl)]; +        Priority = std::min(Priority, Ent.Priority);        } - -      int &Priority = SectionOrder[cast<InputSectionBase>(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 14a835c18cc..93e377cb53b 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 a41a9fc6071..aabac53b06b 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  | 

