Non-alloc sections don't belong in PT_LOAD segments
Taking them out showed a bug in the powerpc64 backend with .branch_lt being removed from output_bfd but not from previously set up segment section maps. Removing the bfd sections meant their sh_flags (and practically everything else) remaining zero, ie. not SHF_ALLOC, triggering complaints about "`.branch_lt' can't be allocated in segment". include/elf/ * internal.h (ELF_SECTION_IN_SEGMENT_1): Ensure PT_LOAD and similar segments only contain alloc sections. ld/ * emultempl/ppc64elf.em (gld${EMULATION_NAME}_after_allocation): Call gld${EMULATION_NAME}_map_segments regardless of need_laying_out. ld/testsuite/ * ld-powerpc/tocnovar.d: Revert last change.
This commit is contained in:
parent
b53b1bedbd
commit
44bd1acd55
6 changed files with 31 additions and 7 deletions
|
@ -325,6 +325,13 @@ struct elf_segment_map
|
|||
|| (((sec_hdr)->sh_flags & SHF_TLS) == 0 \
|
||||
&& (segment)->p_type != PT_TLS \
|
||||
&& (segment)->p_type != PT_PHDR)) \
|
||||
/* PT_LOAD and similar segments only have SHF_ALLOC sections. */ \
|
||||
&& !(((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
|
||||
&& ((segment)->p_type == PT_LOAD \
|
||||
|| (segment)->p_type == PT_DYNAMIC \
|
||||
|| (segment)->p_type == PT_GNU_EH_FRAME \
|
||||
|| (segment)->p_type == PT_GNU_RELRO \
|
||||
|| (segment)->p_type == PT_GNU_STACK)) \
|
||||
/* Any section besides one of type SHT_NOBITS must have file \
|
||||
offsets within the segment. */ \
|
||||
&& ((sec_hdr)->sh_type == SHT_NOBITS \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue