[binutils-gdb] [ARC] Make sure global symbol is not an indirect or warning.

Cupertino Miranda cmiranda@sourceware.org
Mon Oct 1 11:50:00 GMT 2018


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

commit 2936af90155cf7f7647b4886dc5b9568d15ca298
Author: Cupertino Miranda <cmiranda@synopsys.com>
Date:   Fri Mar 2 17:38:14 2018 +0100

    [ARC] Make sure global symbol is not an indirect or warning.
    
    Problem identified in the context of glibc with latest upstream binutils.
    Dynamic symbol space was being reserved but, no actual information for the
    symbol was being set. Data for the symbol was kept initialized with -1.
    No easy test case was possible to be created.
    
    bfd/
    2018-03-01  Cupertino Miranda <cmiranda@synopsys.com>
    
    	* elf32-arc.c (elf_arc_check_relocs): Changed.

Diff:
---
 bfd/elf32-arc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index 3f60d09..4d36a41 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -1976,7 +1976,12 @@ elf_arc_check_relocs (bfd *			 abfd,
       if (r_symndx < symtab_hdr->sh_info) /* Is a local symbol.  */
 	h = NULL;
       else /* Global one.  */
-	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 (r_type)



More information about the Binutils-cvs mailing list