obcopy vs. files with silly section alignment
authorAlan Modra <amodra@gmail.com>
Fri, 29 Oct 2021 02:43:17 +0000 (13:13 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 29 Oct 2021 05:18:22 +0000 (15:48 +1030)
We already ignore stupid segment alignment when rewriting headers,
ignore section alignment too.

* elf.c (rewrite_elf_program_header): Ignore section alignment
power greater than 62.

bfd/elf.c

index cd8280e5551f3ed4cd2306db3a5e30238a21b59d..4df144b04f0aaa6e9f6f4d75160203f19cdefcee 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6953,9 +6953,14 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
    && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr)                    \
        || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
 
-  /* Initialise the segment mark field.  */
+  /* Initialise the segment mark field, and discard stupid alignment.  */
   for (section = ibfd->sections; section != NULL; section = section->next)
-    section->segment_mark = false;
+    {
+      asection *o = section->output_section;
+      if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
+       o->alignment_power = 0;
+      section->segment_mark = false;
+    }
 
   /* The Solaris linker creates program headers in which all the
      p_paddr fields are zero.  When we try to objcopy or strip such a