bfin: Check bfd_link_hash_indirect
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 29 Dec 2020 18:41:51 +0000 (10:41 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 7 Jan 2021 00:38:53 +0000 (16:38 -0800)
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.

bfd/ChangeLog
bfd/elf32-bfin.c

index 06d6e393060440ecb440e8eb2f80bdf02ab42b0d..3a219c7f4b7d6ecc36ebd53be284da513cb3ff43 100644 (file)
@@ -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
index 0d8050f99c0220202d9a3221801de2723dbf0b95..7c926b8a96ebb083daf875de25536067c8627ccb 100644 (file)
@@ -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))
        {