forked from OSchip/llvm-project
[ELF] - Ignore non-absolute R_386_GOTPC relocation in debug sections.
This is for PR34852. GCC 8.0 or earlier have a bug that it emits R_386_GOTPC relocations against _GLOBAL_OFFSET_TABLE for .debug_info. The bug seems to have been fixed in 2017: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82630, but we do not want LLD to report errors for such inputs. In this patch we ignore such relocations. Differential revision: https://reviews.llvm.org/D38625 llvm-svn: 316761
This commit is contained in:
parent
3396bf07a2
commit
90dacc256f
lld
|
@ -668,6 +668,13 @@ void InputSection::relocateNonAlloc(uint8_t *Buf, ArrayRef<RelTy> Rels) {
|
|||
if (Expr == R_NONE)
|
||||
continue;
|
||||
if (Expr != R_ABS) {
|
||||
// GCC 8.0 or earlier have a bug that it emits R_386_GOTPC relocations
|
||||
// against _GLOBAL_OFFSET_TABLE for .debug_info. The bug seems to have
|
||||
// been fixed in 2017: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82630,
|
||||
// but we need to keep this bug-compatible code for a while.
|
||||
if (Config->EMachine == EM_386 && Type == R_386_GOTPC)
|
||||
continue;
|
||||
|
||||
error(this->getLocation<ELFT>(Offset) + ": has non-ABS relocation " +
|
||||
toString(Type) + " against symbol '" + toString(Sym) + "'");
|
||||
return;
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# REQUIRES: x86
|
||||
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
# RUN: ld.lld %t.o -o %t.exe
|
||||
|
||||
## This is for https://bugs.llvm.org//show_bug.cgi?id=34852. GCC 8.0 or
|
||||
## earlier have a bug which creates non-absolute R_386_GOTPC relocations
|
||||
## in non-allocated sections. It is illegal, but we want to make sure that
|
||||
## lld skips them instead of reporting errors.
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS32
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_REL
|
||||
Machine: EM_386
|
||||
Sections:
|
||||
- Name: .debug_info
|
||||
Type: SHT_PROGBITS
|
||||
AddressAlign: 0x0000000000000001
|
||||
Content: 0000000000000000
|
||||
- Name: .rel.debug_info
|
||||
Type: SHT_REL
|
||||
Link: .symtab
|
||||
AddressAlign: 0x0000000000000004
|
||||
Info: .debug_info
|
||||
Relocations:
|
||||
- Offset: 0x000000000000041F
|
||||
Symbol: _GLOBAL_OFFSET_TABLE_
|
||||
Type: R_386_GOTPC
|
||||
Symbols:
|
||||
Global:
|
||||
- Name: _GLOBAL_OFFSET_TABLE_
|
Loading…
Reference in New Issue