forked from OSchip/llvm-project
[ELF] Allow invalid sh_size%sh_entsize!=0 for non-SHF_MERGE sections
Fixes https://bugs.llvm.org/show_bug.cgi?id=45370 Fixes https://github.com/Clozure/ccl/issues/273 .stab holds a table of 12-byte entries. GNU as before 2.35 incorrectly sets sh_entsize(.stab) to 20 on 64-bit architectures: https://sourceware.org/bugzilla/show_bug.cgi?id=25768 We should not emit the confusing error: "SHF_MERGE section size (...) must be a multiple of sh_entsize (20) Reviewed By: grimar, psmith Differential Revision: https://reviews.llvm.org/D77368
This commit is contained in:
parent
80d4df5be6
commit
56decd982d
|
@ -424,6 +424,9 @@ StringRef ObjFile<ELFT>::getShtGroupSignature(ArrayRef<Elf_Shdr> sections,
|
|||
|
||||
template <class ELFT>
|
||||
bool ObjFile<ELFT>::shouldMerge(const Elf_Shdr &sec, StringRef name) {
|
||||
if (!(sec.sh_flags & SHF_MERGE))
|
||||
return false;
|
||||
|
||||
// On a regular link we don't merge sections if -O0 (default is -O1). This
|
||||
// sometimes makes the linker significantly faster, although the output will
|
||||
// be bigger.
|
||||
|
@ -459,10 +462,7 @@ bool ObjFile<ELFT>::shouldMerge(const Elf_Shdr &sec, StringRef name) {
|
|||
Twine(sec.sh_size) + ") must be a multiple of sh_entsize (" +
|
||||
Twine(entSize) + ")");
|
||||
|
||||
uint64_t flags = sec.sh_flags;
|
||||
if (!(flags & SHF_MERGE))
|
||||
return false;
|
||||
if (flags & SHF_WRITE)
|
||||
if (sec.sh_flags & SHF_WRITE)
|
||||
fatal(toString(this) + ":(" + name +
|
||||
"): writable SHF_MERGE section is not supported");
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
## Ignore invalid sh_entsize (sh_size%sh_entsize!=0) for non-SHF_MERGE sections.
|
||||
## GNU as before 2.35 had such a bug for .stab
|
||||
## https://sourceware.org/bugzilla/show_bug.cgi?id=25768
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
# RUN: ld.lld -e 0 --fatal-warnings %t.o -o /dev/null
|
||||
|
||||
!ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_REL
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .stab
|
||||
Type: SHT_PROGBITS
|
||||
EntSize: 20
|
||||
Size: 24
|
Loading…
Reference in New Issue