[binutils-gdb] bfin, frv, m68k, vax: got creation in check_relocs

Alan Modra amodra@sourceware.org
Mon Aug 17 01:24:09 GMT 2026


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

commit 72f3042bdc70668e2153f4d3bb5c5afe8aba80be
Author: Alan Modra <amodra@gmail.com>
Date:   Thu Aug 6 11:14:10 2026 +0930

    bfin, frv, m68k, vax: got creation in check_relocs
    
    It isn't obvious that it is correct to call the various create got
    section functions inside a !dynobj test, ie. somebody reading the code
    is left wondering whether the got might not be be created.  I think it
    is always created but I'd rather not need to dig even a little.
    
            * elf32-bfin.c (bfin_check_relocs): Move call creating
            got section outside dynobj test.
            (bfinfdpic_check_relocs): Likewise.
            * elf32-frv.c (elf32_frv_check_relocs): Likewise.
            * elf32-m68k.c (elf_m68k_check_relocs): Likewise.
            * elf32-vax.c (elf_vax_check_relocs): Likewise.

Diff:
---
 bfd/elf32-bfin.c | 19 +++++++++----------
 bfd/elf32-frv.c  | 10 ++++------
 bfd/elf32-m68k.c | 10 ++++------
 bfd/elf32-vax.c  | 10 ++++------
 4 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index 8be69ead976..82025e6b242 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -1226,12 +1226,10 @@ bfin_check_relocs (bfd * abfd,
 	  /* Fall through.  */
 
 	  if (dynobj == NULL)
-	    {
-	      /* Create the .got section.  */
-	      elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return false;
-	    }
+	    elf_hash_table (info)->dynobj = dynobj = abfd;
+
+	  if (!_bfd_elf_create_got_section (dynobj, info))
+	    return false;
 
 	  sgot = elf_hash_table (info)->sgot;
 	  srelgot = elf_hash_table (info)->srelgot;
@@ -4558,13 +4556,14 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_BFIN_PCREL24:
 	case R_BFIN_PCREL24_JUMP_L:
 	case R_BFIN_BYTE4_DATA:
-	  if (IS_FDPIC (abfd) && ! dynobj)
+	  if (IS_FDPIC (abfd))
 	    {
-	      elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (! _bfin_create_got_section (abfd, info))
+	      if (dynobj == NULL)
+		elf_hash_table (info)->dynobj = dynobj = abfd;
+	      if (!_bfin_create_got_section (dynobj, info))
 		return false;
 	    }
-	  if (! IS_FDPIC (abfd))
+	  else
 	    {
 	      picrel = NULL;
 	      break;
diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
index 183a78f6049..d19bb5a1499 100644
--- a/bfd/elf32-frv.c
+++ b/bfd/elf32-frv.c
@@ -6071,12 +6071,10 @@ elf32_frv_check_relocs (bfd *abfd,
 	case R_FRV_GPRELLO:
 	case R_FRV_LABEL24:
 	case R_FRV_32:
-	  if (! dynobj)
-	    {
-	      elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (! _frv_create_got_section (abfd, info))
-		return false;
-	    }
+	  if (dynobj == NULL)
+	    elf_hash_table (info)->dynobj = dynobj = abfd;
+	  if (!_frv_create_got_section (dynobj, info))
+	    return false;
 	  if (! IS_FDPIC (abfd))
 	    {
 	      picrel = NULL;
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index 8ed7640ddf8..541ff670110 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -2637,12 +2637,10 @@ elf_m68k_check_relocs (bfd *abfd,
 	  /* This symbol requires a global offset table entry.  */
 
 	  if (dynobj == NULL)
-	    {
-	      /* Create the .got section.  */
-	      elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return false;
-	    }
+	    elf_hash_table (info)->dynobj = dynobj = abfd;
+
+	  if (!_bfd_elf_create_got_section (dynobj, info))
+	    return false;
 
 	  if (got == NULL)
 	    {
diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
index 5d103caab93..b49a4837c04 100644
--- a/bfd/elf32-vax.c
+++ b/bfd/elf32-vax.c
@@ -594,12 +594,10 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 	  /* This symbol requires a global offset table entry.  */
 
 	  if (dynobj == NULL)
-	    {
-	      /* Create the .got section.  */
-	      elf_hash_table (info)->dynobj = dynobj = abfd;
-	      if (!_bfd_elf_create_got_section (dynobj, info))
-		return false;
-	    }
+	    elf_hash_table (info)->dynobj = dynobj = abfd;
+
+	  if (!_bfd_elf_create_got_section (dynobj, info))
+	    return false;
 
 	  if (h != NULL)
 	    {


More information about the Binutils-cvs mailing list