Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert r362743 "Revert "Revert "Reland D61583 [ELF] Error on relocati…
…ons to STT_SECTION symbols if the sections were discarded""" (In effect, reverting "[ELF] Error on relocations to STT_SECTION symbols if the sections were discarded".) It caused debug info problems in LibreOffice [1] and Chromium/V8 [2]. Reverting until those can be fixed. It also reverts r362497 "STT_SECTION symbol should be defined" on .eh_frame, .debug*, .zdebug* and .gcc_except_table" which was landed as a follow-up to the above. > With -r or --emit-relocs, we warn `STT_SECTION symbol should be defined` > on relocations to discarded section symbol. This was added as an error > in rLLD319404, but was not so effective before D61583 (it turned the > error to a warning). > > Relocations from .eh_frame .debug* .zdebug* .gcc_except_table to > discarded .text are very common and somewhat expected. Don't warn/error > on them. As a reference, ld.bfd has a similar logic in > _bfd_elf_default_action_discarded() to allow these cases. > > Delete invalid-undef-section-symbol.test because what it intended to > check is now covered by the updated comdat-discarded-reloc.s > > Delete relocatable-eh-frame.s because we allow relocations from > .eh_frame as a special case now. And finally it reverts r362218 "[ELF] Replace a dead test in getSymVA() with assert()" as that also depended on the main change reverted here. > Symbols relative to discarded comdat sections are Undefined instead of > Defined now (after D59649 and D61583). The `== &InputSection::Discarded` > test becomes dead. I cannot find a test related to this behavior. [1] http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20190603/659848.html [2] https://bugs.chromium.org/p/chromium/issues/detail?id=978067 llvm-svn: 364321
- Loading branch information
Showing
12 changed files
with
75 additions
and
150 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,6 @@ | ||
.global bar, _start | ||
.section .text.bar1,"aG",@progbits,group,comdat | ||
|
||
.section .text.foo,"aG",@progbits,group,comdat | ||
|
||
.section .text | ||
_start: | ||
.quad .text.foo | ||
.quad bar | ||
.section .text.bar2 | ||
.global bar | ||
bar: | ||
.quad .text.bar1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,42 +1,17 @@ | ||
# 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 %t2.o %t.o -o /dev/null | ||
# RUN: ld.lld -r %t2.o %t.o -o %t 2>&1 | FileCheck --check-prefix=WARN %s | ||
# RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC %s | ||
# 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) | ||
## Test case checks we do not crash. | ||
|
||
# WARN: warning: relocation refers to a discarded section: .text.bar1 | ||
# WARN-NEXT: >>> referenced by {{.*}}.o:(.rela.text.bar2+0x0) | ||
# WARN-NOT: warning | ||
.global bar, _start | ||
|
||
# RELOC: .rela.eh_frame { | ||
# RELOC-NEXT: R_X86_64_NONE | ||
# RELOC-NEXT: } | ||
# RELOC-NEXT: .rela.debug_foo { | ||
# RELOC-NEXT: R_X86_64_NONE | ||
# RELOC-NEXT: } | ||
# RELOC-NEXT: .rela.gcc_except_table { | ||
# RELOC-NEXT: R_X86_64_NONE | ||
# RELOC-NEXT: } | ||
.section .text.foo,"aG",@progbits,group,comdat | ||
|
||
.section .text.bar1,"aG",@progbits,group,comdat | ||
|
||
## .text.bar1 in this file is discarded. Warn on the relocation. | ||
.section .text.bar2,"ax" | ||
.globl bar | ||
bar: | ||
.quad .text.bar1 | ||
|
||
## Don't warn on .eh_frame, .debug*, .zdebug*, or .gcc_except_table | ||
.section .eh_frame,"a" | ||
.quad .text.bar1 | ||
|
||
.section .debug_foo | ||
.quad .text.bar1 | ||
|
||
.section .gcc_except_table,"a" | ||
.quad .text.bar1 | ||
.section .text | ||
_start: | ||
.quad .text.foo | ||
.quad bar |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# RUN: yaml2obj %s -o %t.o | ||
# 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 | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Machine: EM_X86_64 | ||
Sections: | ||
- Name: .text | ||
Type: SHT_PROGBITS | ||
- Name: .rela.text | ||
Type: SHT_RELA | ||
AddressAlign: 0x0000000000000008 | ||
Info: .text | ||
Relocations: | ||
- Offset: 0x0000000000000000 | ||
Symbol: .text | ||
Type: R_X86_64_NONE | ||
Symbols: | ||
- Name: .text | ||
Type: STT_SECTION |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# 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 | ||
# 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 | ||
|
||
# DSO: .eh_frame 00000034 | ||
|
||
# CHECK: Relocations [ | ||
# CHECK-NEXT: Section ({{.*}}) .rela.eh_frame { | ||
# CHECK-NEXT: 0x20 R_X86_64_PC32 .foo 0x0 | ||
# CHECK-NEXT: 0x50 R_X86_64_NONE - 0x0 | ||
# CHECK-NEXT: } | ||
# CHECK-NEXT: ] | ||
|
||
.section .foo,"aG",@progbits,bar,comdat | ||
.cfi_startproc | ||
.cfi_endproc |