From a98316d5cf970cbc99689797d84c2ea832bcdcbb Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 1 Aug 2022 16:02:39 -0700 Subject: [PATCH 058/160] elf: Reset alignment for each PT_LOAD segment Reset alignment for each PT_LOAD segment to avoid using alignment from the previous PT_LOAD segment. bfd/ PR ld/29435 * elf.c (assign_file_positions_for_load_sections): Reset alignment for each PT_LOAD segment. ld/ PR ld/29435 * testsuite/ld-elf/pr29435.d: New file. * testsuite/ld-elf/pr29435.s: Likewise. (cherry picked from commit 59f214544c50ec7ebbca285ff2b4949f48671690) --- bfd/elf.c | 7 ++++--- ld/testsuite/ld-elf/pr29435.d | 11 +++++++++++ ld/testsuite/ld-elf/pr29435.s | 6 ++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 ld/testsuite/ld-elf/pr29435.d create mode 100644 ld/testsuite/ld-elf/pr29435.s --- a/bfd/elf.c +++ b/bfd/elf.c @@ -5438,8 +5438,6 @@ assign_file_positions_for_load_sections Elf_Internal_Phdr *p; file_ptr off; /* Octets. */ bfd_size_type maxpagesize; - bfd_size_type p_align; - bool p_align_p = false; unsigned int alloc, actual; unsigned int i, j; struct elf_segment_map **sorted_seg_map; @@ -5524,7 +5522,6 @@ assign_file_positions_for_load_sections qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map), elf_sort_segments); - p_align = bed->p_align; maxpagesize = 1; if ((abfd->flags & D_PAGED) != 0) { @@ -5559,6 +5556,8 @@ assign_file_positions_for_load_sections asection **secpp; bfd_vma off_adjust; /* Octets. */ bool no_contents; + bfd_size_type p_align; + bool p_align_p; /* An ELF segment (described by Elf_Internal_Phdr) may contain a number of sections with contents contributing to both p_filesz @@ -5569,6 +5568,8 @@ assign_file_positions_for_load_sections p = phdrs + m->idx; p->p_type = m->p_type; p->p_flags = m->p_flags; + p_align = bed->p_align; + p_align_p = false; if (m->count == 0) p->p_vaddr = m->p_vaddr_offset * opb; --- /dev/null +++ b/ld/testsuite/ld-elf/pr29435.d @@ -0,0 +1,11 @@ +#ld: -shared -z separate-code -z relro +#xfail: ![check_shared_lib_support] +#xfail: ![check_relro_support] +#readelf: -Wl + +#failif +#... + +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ .* 0x8000 +#... + +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ .* 0x8000 +#... --- /dev/null +++ b/ld/testsuite/ld-elf/pr29435.s @@ -0,0 +1,6 @@ + .text + .balign 0x8000 + .globl foo + .type foo, %function +foo: + .byte 0