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
