diff options
| author | Haojian Wu <hokein@google.com> | 2019-05-28 11:21:59 +0000 |
|---|---|---|
| committer | Haojian Wu <hokein@google.com> | 2019-05-28 11:21:59 +0000 |
| commit | 241dcb386e7dfd4f775f79dab5386d0803911dda (patch) | |
| tree | 26dc83d3184b13adc9d7964f526e68c7307f7f6a | |
| parent | 48c8bdad2afb627a3a3ef7e6f450b97b6a4a6b9c (diff) | |
| download | bcm5719-llvm-241dcb386e7dfd4f775f79dab5386d0803911dda.tar.gz bcm5719-llvm-241dcb386e7dfd4f775f79dab5386d0803911dda.zip | |
Revert [ELF] Error on relocations to STT_SECTION symbols if the sections were discarded
This reverts r361792 (git commit cfca5095df0209c60109696d6cc368d49e2c5939), the
revision causes link errors internally, will share more details with the
author.
llvm-svn: 361806
| -rw-r--r-- | lld/ELF/InputFiles.cpp | 3 | ||||
| -rw-r--r-- | lld/ELF/InputSection.cpp | 3 | ||||
| -rw-r--r-- | lld/ELF/Relocations.cpp | 14 | ||||
| -rw-r--r-- | lld/test/ELF/comdat-discarded-error.s | 12 | ||||
| -rw-r--r-- | lld/test/ELF/comdat-discarded-reloc.s | 2 | ||||
| -rw-r--r-- | lld/test/ELF/comdat.s | 4 | ||||
| -rw-r--r-- | lld/test/ELF/invalid-undef-section-symbol.test | 2 | ||||
| -rw-r--r-- | lld/test/ELF/relocatable-eh-frame.s | 4 |
8 files changed, 11 insertions, 33 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 16991421fe6..2b89533191a 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -997,9 +997,6 @@ template <class ELFT> void ObjFile<ELFT>::initializeSymbols() { if (ESym.st_shndx == SHN_UNDEF) this->Symbols[I] = make<Undefined>(this, Name, Binding, StOther, Type); - else if (Sec == &InputSection::Discarded) - this->Symbols[I] = make<Undefined>(this, Name, Binding, StOther, Type, - /*DiscardedSecIdx=*/SecIdx); else this->Symbols[I] = make<Defined>(this, Name, Binding, StOther, Type, Value, Size, Sec); diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 74878931afb..07a30ed57c4 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -438,8 +438,7 @@ void InputSection::copyRelocations(uint8_t *Buf, ArrayRef<RelTy> Rels) { // hopefully creates a frame that is ignored at runtime. auto *D = dyn_cast<Defined>(&Sym); if (!D) { - warn("STT_SECTION symbol should be defined"); - P->setSymbolAndType(0, 0, false); + error("STT_SECTION symbol should be defined"); continue; } SectionBase *Section = D->Section->Repl; diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index a8ed792164b..12c38c70dcc 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -681,17 +681,9 @@ static std::string maybeReportDiscarded(Undefined &Sym, InputSectionBase &Sec, return ""; ArrayRef<Elf_Shdr_Impl<ELFT>> ObjSections = CHECK(File->getObj().sections(), File); - - std::string Msg; - if (Sym.Type == ELF::STT_SECTION) { - Msg = "relocation refers to a discarded section: "; - Msg += CHECK( - File->getObj().getSectionName(&ObjSections[Sym.DiscardedSecIdx]), File); - } else { - Msg = "relocation refers to a symbol in a discarded section: " + - toString(Sym); - } - Msg += "\n>>> defined in " + toString(File); + std::string Msg = + "relocation refers to a symbol in a discarded section: " + toString(Sym) + + "\n>>> defined in " + toString(File); Elf_Shdr_Impl<ELFT> ELFSec = ObjSections[Sym.DiscardedSecIdx - 1]; if (ELFSec.sh_type != SHT_GROUP) diff --git a/lld/test/ELF/comdat-discarded-error.s b/lld/test/ELF/comdat-discarded-error.s index 0f6b417b0fa..3584783cde0 100644 --- a/lld/test/ELF/comdat-discarded-error.s +++ b/lld/test/ELF/comdat-discarded-error.s @@ -5,7 +5,7 @@ # RUN: echo '.section .text.foo,"axG",@progbits,foo,comdat; .globl bar; bar:' | \ # RUN: llvm-mc -filetype=obj -triple=x86_64 - -o %t3.o -# RUN: not ld.lld %t2.o %t3.o %t1.o -o /dev/null 2>&1 | FileCheck %s +# RUN: not ld.lld %t1.o %t2.o %t3.o -o /dev/null 2>&1 | FileCheck %s # CHECK: error: relocation refers to a symbol in a discarded section: bar # CHECK-NEXT: >>> defined in {{.*}}3.o @@ -13,16 +13,6 @@ # CHECK-NEXT: >>> prevailing definition is in {{.*}}2.o # CHECK-NEXT: >>> referenced by {{.*}}1.o:(.text+0x1) -# CHECK: error: relocation refers to a discarded section: .text.foo -# CHECK-NEXT: >>> defined in {{.*}}1.o -# CHECK-NEXT: >>> section group signature: foo -# CHECK-NEXT: >>> prevailing definition is in {{.*}}2.o -# CHECK-NEXT: >>> referenced by {{.*}}1.o:(.data+0x0) - .globl _start _start: jmp bar - -.section .text.foo,"axG",@progbits,foo,comdat -.data - .quad .text.foo diff --git a/lld/test/ELF/comdat-discarded-reloc.s b/lld/test/ELF/comdat-discarded-reloc.s index d12732cd356..d23baf386e9 100644 --- a/lld/test/ELF/comdat-discarded-reloc.s +++ b/lld/test/ELF/comdat-discarded-reloc.s @@ -1,7 +1,7 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat-discarded-reloc.s -o %t2.o -# RUN: ld.lld -gc-sections --noinhibit-exec %t.o %t2.o -o /dev/null +# RUN: ld.lld -gc-sections %t.o %t2.o -o %t ## ELF spec doesn't allow a relocation to point to a deduplicated ## COMDAT section. Unfortunately this happens in practice (e.g. .eh_frame) diff --git a/lld/test/ELF/comdat.s b/lld/test/ELF/comdat.s index 9e3f5a81d30..86103e5d9eb 100644 --- a/lld/test/ELF/comdat.s +++ b/lld/test/ELF/comdat.s @@ -1,7 +1,7 @@ // REQUIRES: x86 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat.s -o %t2.o -// RUN: ld.lld -shared %t.o %t2.o -o %t +// RUN: ld.lld -shared %t.o %t.o %t2.o -o %t // RUN: llvm-objdump -d %t | FileCheck %s // RUN: llvm-readobj -S --symbols %t | FileCheck --check-prefix=READ %s @@ -31,7 +31,9 @@ foo: // CHECK-EMPTY: // CHECK-NEXT: bar: // 0x1000 - 0x1001 - 5 = -6 +// 0 - 0x1006 - 5 = -4107 // CHECK-NEXT: 1001: {{.*}} callq -6 +// CHECK-NEXT: 1006: {{.*}} callq -4107 .section .text3,"axG",@progbits,zed,comdat,unique,0 diff --git a/lld/test/ELF/invalid-undef-section-symbol.test b/lld/test/ELF/invalid-undef-section-symbol.test index 80e5a1464d7..1d66885eadf 100644 --- a/lld/test/ELF/invalid-undef-section-symbol.test +++ b/lld/test/ELF/invalid-undef-section-symbol.test @@ -1,5 +1,5 @@ # RUN: yaml2obj %s -o %t.o -# RUN: not ld.lld -r --fatal-warnings %t.o -o /dev/null 2>&1 | FileCheck %s +# RUN: not ld.lld -r %t.o -o /dev/null 2>&1 | FileCheck %s # We used to crash at this. # CHECK: STT_SECTION symbol should be defined diff --git a/lld/test/ELF/relocatable-eh-frame.s b/lld/test/ELF/relocatable-eh-frame.s index 6172dd355db..dee906acb87 100644 --- a/lld/test/ELF/relocatable-eh-frame.s +++ b/lld/test/ELF/relocatable-eh-frame.s @@ -1,12 +1,10 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o -# RUN: ld.lld -r %t.o %t.o -o %t 2>&1 | FileCheck --check-prefix=WARN %s +# RUN: ld.lld -r %t.o %t.o -o %t # RUN: llvm-readobj -r %t | FileCheck %s # RUN: ld.lld %t -o %t.so -shared # RUN: llvm-objdump -h %t.so | FileCheck --check-prefix=DSO %s -# WARN: STT_SECTION symbol should be defined - # DSO: .eh_frame 00000034 # CHECK: Relocations [ |

