From: Nick Clifton Date: Tue, 16 Apr 2024 16:54:13 +0000 (+0100) Subject: Fix test for sections with different VMA<->LMA relationships so that it only applies... X-Git-Tag: gdb-15-branchpoint~391 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6fc194038ce0744532d6471499326114c0f0d90;p=thirdparty%2Fbinutils-gdb.git Fix test for sections with different VMA<->LMA relationships so that it only applies to allocated sections, and only sections in the same segment are checked. PR 31450 --- diff --git a/bfd/elf.c b/bfd/elf.c index 889078db097..52a6a2f56c3 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -8427,7 +8427,7 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd) || segment->p_type == PT_DYNAMIC)) goto rewrite; - for (section = prev = ibfd->sections; + for (section = ibfd->sections, prev = NULL; section != NULL; section = section->next) { /* We mark the output section so that we know it comes @@ -8448,13 +8448,20 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd) || section->vma != osec->vma || section->size != osec->size || section->rawsize != osec->rawsize - || section->alignment_power != osec->alignment_power - /* PR 31450: Make sure this section's vma to lma - relationship is the same as previous section's. */ - || section->lma - section->vma != prev->lma - prev->vma) + || section->alignment_power != osec->alignment_power) goto rewrite; + + /* PR 31450: If this is an allocated section then make sure + that this section's vma to lma relationship is the same + as previous (allocated) section's. */ + if (prev != NULL + && section->flags & SEC_ALLOC + && section->lma - section->vma != prev->lma - prev->vma) + goto rewrite; + + if (section->flags & SEC_ALLOC) + prev = section; } - prev = section; } }