[binutils-gdb] Arm: use BFD_RELOC_32_PLT_PCREL in favor of custom type

Jan Beulich jbeulich@sourceware.org
Mon Dec 15 09:51:31 GMT 2025


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

commit 7f3665aa4b69cd3743ceb731685448df05bb9bf6
Author: Jan Beulich <jbeulich@suse.com>
Date:   Mon Dec 15 10:48:10 2025 +0100

    Arm: use BFD_RELOC_32_PLT_PCREL in favor of custom type
    
    No reason to have a separate type when the generic one has no (other)
    meaning for this target.
    
    Doing the adjustments makes obvious that elf32_arm_reloc_map[] had two
    identical entries; that duplicate is being removed.

Diff:
---
 bfd/bfd-in2.h       |  1 -
 bfd/elf32-arm.c     |  3 +--
 bfd/libbfd.h        |  1 -
 bfd/reloc.c         |  2 --
 gas/config/tc-arm.c | 22 +++++++++++-----------
 5 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index ff0c5f88cdc..35f8c1ee096 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -4209,7 +4209,6 @@ enum bfd_reloc_code_real
   BFD_RELOC_ARM_JUMP_SLOT,
   BFD_RELOC_ARM_GLOB_DAT,
   BFD_RELOC_ARM_GOT32,
-  BFD_RELOC_ARM_PLT32,
   BFD_RELOC_ARM_RELATIVE,
   BFD_RELOC_ARM_GOTOFF,
   BFD_RELOC_ARM_GOTPC,
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 24dde624d55..ba477dc6e47 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -2023,13 +2023,12 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
     {BFD_RELOC_ARM_GOTPC,	     R_ARM_GOTPC},
     {BFD_RELOC_ARM_GOT_PREL,	     R_ARM_GOT_PREL},
     {BFD_RELOC_ARM_GOT32,	     R_ARM_GOT32},
-    {BFD_RELOC_ARM_PLT32,	     R_ARM_PLT32},
+    {BFD_RELOC_32_PLT_PCREL,	     R_ARM_PLT32},
     {BFD_RELOC_ARM_TARGET1,	     R_ARM_TARGET1},
     {BFD_RELOC_ARM_ROSEGREL32,	     R_ARM_ROSEGREL32},
     {BFD_RELOC_ARM_SBREL32,	     R_ARM_SBREL32},
     {BFD_RELOC_ARM_PREL31,	     R_ARM_PREL31},
     {BFD_RELOC_ARM_TARGET2,	     R_ARM_TARGET2},
-    {BFD_RELOC_ARM_PLT32,	     R_ARM_PLT32},
     {BFD_RELOC_ARM_TLS_GOTDESC,	     R_ARM_TLS_GOTDESC},
     {BFD_RELOC_ARM_TLS_CALL,	     R_ARM_TLS_CALL},
     {BFD_RELOC_ARM_THM_TLS_CALL,     R_ARM_THM_TLS_CALL},
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index c8249710dff..1196041c47b 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -1712,7 +1712,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_ARM_JUMP_SLOT",
   "BFD_RELOC_ARM_GLOB_DAT",
   "BFD_RELOC_ARM_GOT32",
-  "BFD_RELOC_ARM_PLT32",
   "BFD_RELOC_ARM_RELATIVE",
   "BFD_RELOC_ARM_GOTOFF",
   "BFD_RELOC_ARM_GOTPC",
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 699c042cece..af21596aba4 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -3039,8 +3039,6 @@ ENUMX
   BFD_RELOC_ARM_GLOB_DAT
 ENUMX
   BFD_RELOC_ARM_GOT32
-ENUMX
-  BFD_RELOC_ARM_PLT32
 ENUMX
   BFD_RELOC_ARM_RELATIVE
 ENUMX
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 2eed286448e..abad78a742f 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -3849,7 +3849,7 @@ s_arm_elf_cons (int nbytes)
 							       reloc);
 	      int size = bfd_get_reloc_size (howto);
 
-	      if (reloc == BFD_RELOC_ARM_PLT32)
+	      if (reloc == BFD_RELOC_32_PLT_PCREL)
 		{
 		  as_bad (_("(plt) is only valid on branch targets"));
 		  reloc = BFD_RELOC_UNUSED;
@@ -9304,11 +9304,11 @@ encode_branch (int default_reloc)
 {
   if (inst.operands[0].hasreloc)
     {
-      constraint (inst.operands[0].imm != BFD_RELOC_ARM_PLT32
+      constraint (inst.operands[0].imm != BFD_RELOC_32_PLT_PCREL
 		  && inst.operands[0].imm != BFD_RELOC_ARM_TLS_CALL,
 		  _("the only valid suffixes here are '(plt)' and '(tlscall)'"));
-      inst.relocs[0].type = inst.operands[0].imm == BFD_RELOC_ARM_PLT32
-	? BFD_RELOC_ARM_PLT32
+      inst.relocs[0].type = inst.operands[0].imm == BFD_RELOC_32_PLT_PCREL
+	? BFD_RELOC_32_PLT_PCREL
 	: thumb_mode ? BFD_RELOC_ARM_THM_TLS_CALL : BFD_RELOC_ARM_TLS_CALL;
     }
   else
@@ -12019,7 +12019,7 @@ do_t_branch23 (void)
      the branch encoding is now needed to deal with TLSCALL relocs.
      So if we see a PLT reloc now, put it back to how it used to be to
      keep the preexisting behaviour.  */
-  if (inst.relocs[0].type == BFD_RELOC_ARM_PLT32)
+  if (inst.relocs[0].type == BFD_RELOC_32_PLT_PCREL)
     inst.relocs[0].type = BFD_RELOC_THUMB_PCREL_BRANCH23;
 
 #if defined(OBJ_COFF)
@@ -23899,7 +23899,7 @@ static struct reloc_entry reloc_names[] =
 {
   { "got",     BFD_RELOC_ARM_GOT32   },	 { "GOT",     BFD_RELOC_ARM_GOT32   },
   { "gotoff",  BFD_RELOC_ARM_GOTOFF  },	 { "GOTOFF",  BFD_RELOC_ARM_GOTOFF  },
-  { "plt",     BFD_RELOC_ARM_PLT32   },	 { "PLT",     BFD_RELOC_ARM_PLT32   },
+  { "plt",     BFD_RELOC_32_PLT_PCREL},	 { "PLT",     BFD_RELOC_32_PLT_PCREL},
   { "target1", BFD_RELOC_ARM_TARGET1 },	 { "TARGET1", BFD_RELOC_ARM_TARGET1 },
   { "target2", BFD_RELOC_ARM_TARGET2 },	 { "TARGET2", BFD_RELOC_ARM_TARGET2 },
   { "sbrel",   BFD_RELOC_ARM_SBREL32 },	 { "SBREL",   BFD_RELOC_ARM_SBREL32 },
@@ -27245,7 +27245,7 @@ md_pcrel_from_section (fixS * fixP, segT seg)
 
     case BFD_RELOC_ARM_PCREL_BRANCH:
     case BFD_RELOC_ARM_PCREL_JUMP:
-    case BFD_RELOC_ARM_PLT32:
+    case BFD_RELOC_32_PLT_PCREL:
 #ifdef TE_WINCE
       /* When handling fixups immediately, because we have already
 	 discovered the value of a symbol, or the address of the frag involved
@@ -28197,7 +28197,7 @@ md_apply_fix (fixS *	fixP,
 	}
       /* Fall through.  */
 
-    case BFD_RELOC_ARM_PLT32:
+    case BFD_RELOC_32_PLT_PCREL:
 #endif
     case BFD_RELOC_ARM_PCREL_BRANCH:
       temp = 3;
@@ -29419,7 +29419,7 @@ tc_gen_reloc (asection *section, fixS *fixp)
     case BFD_RELOC_ARM_GOT32:
     case BFD_RELOC_ARM_GOTOFF:
     case BFD_RELOC_ARM_GOT_PREL:
-    case BFD_RELOC_ARM_PLT32:
+    case BFD_RELOC_32_PLT_PCREL:
     case BFD_RELOC_ARM_TARGET1:
     case BFD_RELOC_ARM_ROSEGREL32:
     case BFD_RELOC_ARM_SBREL32:
@@ -29748,7 +29748,7 @@ arm_fix_adjustable (fixS * fixP)
     return false;
 
   /* Don't allow symbols to be discarded on GOT related relocs.	 */
-  if (fixP->fx_r_type == BFD_RELOC_ARM_PLT32
+  if (fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL
       || fixP->fx_r_type == BFD_RELOC_ARM_GOT32
       || fixP->fx_r_type == BFD_RELOC_ARM_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_ARM_TLS_GD32
@@ -30062,7 +30062,7 @@ md_begin (void)
     {
       struct reloc_entry * entry = reloc_names + i;
 
-      if (arm_is_eabi() && entry->reloc == BFD_RELOC_ARM_PLT32)
+      if (arm_is_eabi() && entry->reloc == BFD_RELOC_32_PLT_PCREL)
 	/* This makes encode_branch() use the EABI versions of this relocation.  */
 	entry->reloc = BFD_RELOC_UNUSED;


More information about the Binutils-cvs mailing list