Index: binutils-2.38/bfd/elf.c =================================================================== --- bfd/elf.c | 18 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bfd/elf.c b/bfd/elf.c index 1f2b82b..e290ad7 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -5803,6 +5803,8 @@ assign_file_positions_for_load_sections (bfd *abfd, Elf_Internal_Phdr *p; file_ptr off; /* Octets. */ bfd_size_type maxpagesize; + bfd_size_type commonpagesize; + bool p_align_commonpagesize_p = false; unsigned int alloc, actual; unsigned int i, j; struct elf_segment_map **sorted_seg_map; @@ -5888,12 +5890,19 @@ assign_file_positions_for_load_sections (bfd *abfd, elf_sort_segments); maxpagesize = 1; + commonpagesize = 1; if ((abfd->flags & D_PAGED) != 0) { if (link_info != NULL) - maxpagesize = link_info->maxpagesize; + { + maxpagesize = link_info->maxpagesize; + commonpagesize = link_info->commonpagesize; + } else - maxpagesize = bed->maxpagesize; + { + maxpagesize = bed->maxpagesize; + commonpagesize = bed->commonpagesize; + } } /* Sections must map to file offsets past the ELF file header. */ @@ -5969,7 +5978,7 @@ assign_file_positions_for_load_sections (bfd *abfd, largest section alignment. The run-time loader can align segments to the default p_align value or the maximum page size, depending on system page size. */ - p_align_p = true; + p_align_commonpagesize_p = p_align_p = true; p->p_align = maxpagesize; } @@ -6407,6 +6416,8 @@ assign_file_positions_for_load_sections (bfd *abfd, if (p_align_p) p->p_align = p_align; + if (p_align_commonpagesize_p) + p->p_align = commonpagesize; } } -- 2.45.2