[binutils-gdb] ld/PE: special-case relocation types only for COFF inputs

Jan Beulich jbeulich@sourceware.org
Wed Jun 11 12:32:41 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4e7b9bd8ab96b9afb02646c0b5b70b2a5ad90fec

commit 4e7b9bd8ab96b9afb02646c0b5b70b2a5ad90fec
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Jun 11 14:32:34 2025 +0200

    ld/PE: special-case relocation types only for COFF inputs
    
    In 72cd2c709779 ("ld/PE: no base relocs for section (relative) ones") I
    made a pre-existing problem quite a bit worse: When looking at a
    relocation's (numerical) howto->type, that value is meaningful only if
    the object was of corresponding COFF type. ELF objects in particular
    have their own enumeration. As it stands, specifically the not entirely
    unusual R_X86_64_32 and R_X86_64_32S did no longer have relocations
    emitted for them, due to matching R_AMD64_SECTION and R_AMD64_SECREL in
    value respectively.

Diff:
---
 ld/pe-dll.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 4a2ea036518..210b77ea374 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1620,10 +1620,11 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
 		  printf ("rel: %s\n", sym->name);
 		}
 	      if (!relocs[i]->howto->pc_relative
-		  && relocs[i]->howto->type != pe_details->imagebase_reloc
-		  && (relocs[i]->howto->type < pe_details->secrel_reloc_lo
-		      || relocs[i]->howto->type > pe_details->secrel_reloc_hi)
-		  && relocs[i]->howto->type != pe_details->section_reloc)
+		  && (bfd_get_flavour (b) != bfd_target_coff_flavour
+		      || (relocs[i]->howto->type != pe_details->imagebase_reloc
+			  && (relocs[i]->howto->type < pe_details->secrel_reloc_lo
+			      || relocs[i]->howto->type > pe_details->secrel_reloc_hi)
+			  && relocs[i]->howto->type != pe_details->section_reloc)))
 		{
 		  struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
 		  const struct bfd_link_hash_entry *blhe


More information about the Binutils-cvs mailing list