diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2022-08-01 16:02:39 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2022-08-03 13:34:01 -0700 |
commit | 59f214544c50ec7ebbca285ff2b4949f48671690 (patch) | |
tree | 4645337eb1c67bb185be11a0d0d59f8a63e0fa5a /bfd | |
parent | 88c4cce8d28e6be486cb25fbbccf2b42e40da45b (diff) | |
download | fsf-binutils-gdb-59f214544c50ec7ebbca285ff2b4949f48671690.zip fsf-binutils-gdb-59f214544c50ec7ebbca285ff2b4949f48671690.tar.gz fsf-binutils-gdb-59f214544c50ec7ebbca285ff2b4949f48671690.tar.bz2 |
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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elf.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -5440,8 +5440,6 @@ assign_file_positions_for_load_sections (bfd *abfd, 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; @@ -5526,7 +5524,6 @@ assign_file_positions_for_load_sections (bfd *abfd, 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) { @@ -5561,6 +5558,8 @@ assign_file_positions_for_load_sections (bfd *abfd, 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 @@ -5571,6 +5570,8 @@ assign_file_positions_for_load_sections (bfd *abfd, 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; |