[binutils-gdb] bfin: Check bfd_link_hash_indirect

H.J. Lu hjl@sourceware.org
Thu Jan 7 00:41:00 GMT 2021


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

commit d4e57b87a3d5879917c30e33b14760fd76ff7b38
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Dec 29 10:41:51 2020 -0800

    bfin: Check bfd_link_hash_indirect
    
    Add bfd_link_hash_indirect check to check_relocs.  This fixed:
    
    FAIL: ld-elf/pr26979a
    FAIL: ld-elf/pr26979b
    FAIL: Symbol export class test (final shared object)
    
            * elf32-bfin.c (bfin_check_relocs): Check bfd_link_hash_indirect.
            (bfinfdpic_check_relocs): Likewise.

Diff:
---
 bfd/ChangeLog    |  5 +++++
 bfd/elf32-bfin.c | 10 +++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 06d6e393060..3a219c7f4b7 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2021-01-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf32-bfin.c (bfin_check_relocs): Check bfd_link_hash_indirect.
+	(bfinfdpic_check_relocs): Likewise.
+
 2021-01-06  Alan Modra  <amodra@gmail.com>
 
 	* elf32-score.c (s3_bfd_score_info_to_howto): Report an error
diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index 0d8050f99c0..7c926b8a96e 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -1197,6 +1197,9 @@ bfin_check_relocs (bfd * abfd,
       else
 	{
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	  while (h->root.type == bfd_link_hash_indirect
+		 || h->root.type == bfd_link_hash_warning)
+	    h = (struct elf_link_hash_entry *)h->root.u.i.link;
 	}
 
       switch (ELF32_R_TYPE (rel->r_info))
@@ -4523,7 +4526,12 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info,
       if (r_symndx < symtab_hdr->sh_info)
 	h = NULL;
       else
-	h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	{
+	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	  while (h->root.type == bfd_link_hash_indirect
+		 || h->root.type == bfd_link_hash_warning)
+	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+	}
 
       switch (ELF32_R_TYPE (rel->r_info))
 	{


More information about the Binutils-cvs mailing list