This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Don't canonicalize STT_SECTION syms


On Fri, Dec 10, 2004 at 11:26:25PM +1030, Alan Modra wrote:
> I'm also renaming bfd_elf_local_sym_name because it works perfectly well
> on global syms.

While I was at it, I should have committed a change to pass the symbol
table header too.  We're going to need to be able to look up dynamic
syms too.

	* elf.c (bfd_elf_sym_name): Add symtab_hdr param.
	(group_signature): Update call.
	* elf-bfd.h (bfd_elf_sym_name): Update.
	* elf32-ppc.c (ppc_elf_relocate_section): Update.
	* elf64-ppc.c (ppc64_elf_edit_opd, ppc64_elf_edit_toc) 
	(ppc64_elf_relocate_section): Update
	* elflink.c (elf_link_input_bfd): Update.

Index: bfd/elf-bfd.h
===================================================================
RCS file: /cvs/src/src/bfd/elf-bfd.h,v
retrieving revision 1.165
diff -u -p -r1.165 elf-bfd.h
--- bfd/elf-bfd.h	10 Dec 2004 13:18:38 -0000	1.165
+++ bfd/elf-bfd.h	10 Dec 2004 14:00:12 -0000
@@ -1358,7 +1358,7 @@ extern Elf_Internal_Sym *bfd_elf_get_elf
   (bfd *, Elf_Internal_Shdr *, size_t, size_t, Elf_Internal_Sym *, void *,
    Elf_External_Sym_Shndx *);
 extern const char *bfd_elf_sym_name
-  (bfd *, Elf_Internal_Sym *);
+  (bfd *, Elf_Internal_Shdr *, Elf_Internal_Sym *);
 
 extern bfd_boolean _bfd_elf_copy_private_bfd_data
   (bfd *, bfd *);
Index: bfd/elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.257
diff -u -p -r1.257 elf.c
--- bfd/elf.c	10 Dec 2004 13:18:37 -0000	1.257
+++ bfd/elf.c	10 Dec 2004 14:00:19 -0000
@@ -405,10 +405,12 @@ bfd_elf_get_elf_syms (bfd *ibfd,
 
 /* Look up a symbol name.  */
 const char *
-bfd_elf_sym_name (bfd *abfd, Elf_Internal_Sym *isym)
+bfd_elf_sym_name (bfd *abfd,
+		  Elf_Internal_Shdr *symtab_hdr,
+		  Elf_Internal_Sym *isym)
 {
   unsigned int iname = isym->st_name;
-  unsigned int shindex = elf_tdata (abfd)->symtab_hdr.sh_link;
+  unsigned int shindex = symtab_hdr->sh_link;
   if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
       /* Check for a bogus st_shndx to avoid crashing.  */
       && isym->st_shndx < elf_numsections (abfd)
@@ -451,7 +453,7 @@ group_signature (bfd *abfd, Elf_Internal
 			    &isym, esym, &eshndx) == NULL)
     return NULL;
 
-  return bfd_elf_sym_name (abfd, &isym);
+  return bfd_elf_sym_name (abfd, hdr, &isym);
 }
 
 /* Set next_in_group list pointer, and group name for NEWSECT.  */
Index: bfd/elf32-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
retrieving revision 1.130
diff -u -p -r1.130 elf32-ppc.c
--- bfd/elf32-ppc.c	10 Dec 2004 13:18:38 -0000	1.130
+++ bfd/elf32-ppc.c	10 Dec 2004 14:00:19 -0000
@@ -4694,7 +4694,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	{
 	  sym = local_syms + r_symndx;
 	  sec = local_sections[r_symndx];
-	  sym_name = bfd_elf_sym_name (input_bfd, sym);
+	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym);
 
 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
 	}
Index: bfd/elf64-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-ppc.c,v
retrieving revision 1.179
diff -u -p -r1.179 elf64-ppc.c
--- bfd/elf64-ppc.c	10 Dec 2004 13:18:39 -0000	1.179
+++ bfd/elf64-ppc.c	10 Dec 2004 14:00:24 -0000
@@ -6006,7 +6006,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bf
 	      if (h != NULL)
 		sym_name = h->root.root.string;
 	      else
-		sym_name = bfd_elf_sym_name (ibfd, sym);
+		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym);
 
 	      (*_bfd_error_handler)
 		(_("%B: undefined sym `%s' in .opd section"),
@@ -7051,7 +7051,7 @@ ppc64_elf_edit_toc (bfd *obfd ATTRIBUTE_
 		      {
 			(*_bfd_error_handler)
 			  (_("%s defined in removed toc entry"),
-			   bfd_elf_sym_name (ibfd, sym));
+			   bfd_elf_sym_name (ibfd, symtab_hdr, sym));
 			sym->st_value = 0;
 			sym->st_shndx = SHN_ABS;
 		      }
@@ -9142,7 +9142,7 @@ ppc64_elf_relocate_section (bfd *output_
 
 	  sym = local_syms + r_symndx;
 	  sec = local_sections[r_symndx];
-	  sym_name = bfd_elf_sym_name (input_bfd, sym);
+	  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym);
 	  sym_type = ELF64_ST_TYPE (sym->st_info);
 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
 	  opd_adjust = get_opd_info (sec);
Index: bfd/elflink.c
===================================================================
RCS file: /cvs/src/src/bfd/elflink.c,v
retrieving revision 1.120
diff -u -p -r1.120 elflink.c
--- bfd/elflink.c	10 Dec 2004 13:18:40 -0000	1.120
+++ bfd/elflink.c	10 Dec 2004 14:00:31 -0000
@@ -6819,7 +6819,7 @@ elf_link_input_bfd (struct elf_final_lin
 		    {
 		      Elf_Internal_Sym *sym = isymbuf + r_symndx;
 		      ps = &finfo->sections[r_symndx];
-		      sym_name = bfd_elf_sym_name (input_bfd, sym);
+		      sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym);
 		    }
 
 		  /* Complain if the definition comes from a

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]