[binutils-gdb] hppa64: Fix addition of symbols to local dynamic table

John David Anglin danglin@sourceware.org
Wed Oct 15 18:30:29 GMT 2025


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

commit c1288ad0f77bf2211dc33de30fe86dd084670a15
Author: John David Anglin <danglin@gcc.gnu.org>
Date:   Wed Oct 15 14:29:51 2025 -0400

    hppa64: Fix addition of symbols to local dynamic table
    
    This fixes lookup failure in elf64_hppa_finalize_dynreloc.
    
    2025-10-15  John David Anglin  <danglin@gcc.gnu.org>
    
    bfd/ChangeLog:
    
            * elf64-hppa.c (elf64_hppa_check_relocs): Record local
            dynamic symbol if a dynamic relocation is needed.
            (allocate_global_data_dlt) Fix typo.
            (allocate_dynrel_entries): Don't record symbol.
            (elf64_hppa_finalize_dynreloc): Assert dynindx is not -1.

Diff:
---
 bfd/elf64-hppa.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
index 05bb7f125b7..74f59fa85db 100644
--- a/bfd/elf64-hppa.c
+++ b/bfd/elf64-hppa.c
@@ -896,6 +896,13 @@ elf64_hppa_check_relocs (bfd *abfd,
 				   sec_symndx, rel->r_offset, rel->r_addend))
 	    goto err_out;
 
+	  /* Add symbol to dynamic symbol table.  */
+	  if (hh != NULL
+	      && bfd_link_pic (info)
+	      && ! (bfd_elf_link_record_local_dynamic_symbol
+		    (info, abfd, r_symndx)))
+	    goto err_out;
+
 	  /* If we are building a shared library and we just recorded
 	     a dynamic R_PARISC_FPTR64 relocation, then make sure the
 	     section symbol for this section ends up in the dynamic
@@ -903,7 +910,7 @@ elf64_hppa_check_relocs (bfd *abfd,
 	  if (bfd_link_pic (info) && dynrel_type == R_PARISC_FPTR64
 	      && ! (bfd_elf_link_record_local_dynamic_symbol
 		    (info, abfd, sec_symndx)))
-	    return false;
+	    goto err_out;
 	}
     }
 
@@ -1009,7 +1016,7 @@ allocate_global_data_dlt (struct elf_link_hash_entry *eh, void *data)
   return true;
 }
 
-/* Allocate space for a DLT.PLT entry.  */
+/* Allocate space for a PLT entry.  */
 
 static bool
 allocate_global_data_plt (struct elf_link_hash_entry *eh, void *data)
@@ -1451,16 +1458,6 @@ allocate_dynrel_entries (struct elf_link_hash_entry *eh, void *data)
 
       if (!discarded_section (hppa_info->other_rel_sec))
 	hppa_info->other_rel_sec->size += sizeof (Elf64_External_Rela);
-
-      /* Make sure this symbol gets into the dynamic symbol table if
-	 it is not already recorded.  */
-      if (eh->dynindx == -1 && eh->type != STT_PARISC_MILLI)
-	{
-	  BFD_ASSERT (rent->sec->owner == hh->owner);
-	  if (!bfd_elf_link_record_local_dynamic_symbol
-		(x->info, hh->owner, hh->sym_indx))
-	    return false;
-	}
     }
 
   /* Take care of the GOT and PLT relocations.  */
@@ -2418,6 +2415,7 @@ elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh,
 	  else
 	    rel.r_addend = rent->addend;
 
+	  BFD_ASSERT (dynindx != -1);
 	  rel.r_info = ELF64_R_INFO (dynindx, rent->type);
 
 	  loc = hppa_info->other_rel_sec->contents;


More information about the Binutils-cvs mailing list