[binutils-gdb] alpha: handle discarded got section

Alan Modra via Binutils-cvs <[email protected]>
Newsgroups gmane.comp.gnu.binutils.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=53a7f1375a961e97a195682234b2aff84d6c3744

commit 53a7f1375a961e97a195682234b2aff84d6c3744
Author: Alan Modra <[email protected]>
Date:   Mon May 11 09:20:29 2026 +0930

    alpha: handle discarded got section
    
    This fixes testsuite failures I noticed when changing dynobj to be
    linker created, but I think the bug could be triggered by suitably
    crafted linker scripts without any dynobj changes.
    
            * elf64-alpha.c (elf64_alpha_final_link): Don't attempt to
            write out a got section that has been discarded.

Diff:
---
 bfd/elf64-alpha.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 0a63ca0bbdb..91cc7bcaec8 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -5248,28 +5248,28 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
   /* Now write out the computed sections.  */
 
   /* The .got subsections...  */
-  {
-    bfd *i, *dynobj = elf_hash_table(info)->dynobj;
-    for (i = htab->got_list;
-	 i != NULL;
-	 i = alpha_elf_tdata(i)->got_link_next)
-      {
-	asection *sgot;
+  bfd *i, *dynobj = elf_hash_table(info)->dynobj;
+  for (i = htab->got_list;
+       i != NULL;
+       i = alpha_elf_tdata(i)->got_link_next)
+    {
+      asection *sgot;
 
-	/* elf_bfd_final_link already did everything in dynobj.  */
-	if (i == dynobj)
-	  continue;
+      /* elf_bfd_final_link already did everything in dynobj.  */
+      if (i == dynobj)
+	continue;
 
-	sgot = alpha_elf_tdata(i)->got;
-	if (! bfd_set_section_contents (abfd, sgot->output_section,
+      sgot = alpha_elf_tdata(i)->got;
+      if (sgot != NULL
+	  && !bfd_is_abs_section (sgot->output_section)
+	  && !bfd_set_section_contents (abfd, sgot->output_section,
 					sgot->contents,
 					(file_ptr) sgot->output_offset,
 					sgot->size))
-	  return false;
-      }
-  }
+	return false;
+    }
 
-  if (mdebug_sec != (asection *) NULL)
+  if (mdebug_sec != NULL)
     {
       BFD_ASSERT (abfd->output_has_begun);
       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.