Oracle library fix

Alan Modra amodra@gmail.com
Fri Dec 10 00:22:11 GMT 2021


Does anyone know whether the following 1995 code is still needed?
My guess is that the "incomprehensible reason" mentioned in the
comment is that some object had relocation sections created by hand.
With my recent commit b6d1f70cc7e any such relocation section should
have a proper sh_link field, but of course if people are still using
constructs like

 .section .rel.text,""
 .4byte reloc_offset
 .4byte reloc_number + sym_index

then I'll need to delay this cleanup for some years.

	* elf.c (bfd_section_from_shdr): Remove old hack for Oracle
	libraries.

diff --git a/bfd/elf.c b/bfd/elf.c
index 98f47da0797..e6c6a8a6c05 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2389,40 +2389,6 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 	    goto success;
 	  }
 
-	/* For some incomprehensible reason Oracle distributes
-	   libraries for Solaris in which some of the objects have
-	   bogus sh_link fields.  It would be nice if we could just
-	   reject them, but, unfortunately, some people need to use
-	   them.  We scan through the section headers; if we find only
-	   one suitable symbol table, we clobber the sh_link to point
-	   to it.  I hope this doesn't break anything.
-
-	   Don't do it on executable nor shared library.  */
-	if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
-	    && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
-	    && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
-	  {
-	    unsigned int scan;
-	    int found;
-
-	    found = 0;
-	    for (scan = 1; scan < num_sec; scan++)
-	      {
-		if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
-		    || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
-		  {
-		    if (found != 0)
-		      {
-			found = 0;
-			break;
-		      }
-		    found = scan;
-		  }
-	      }
-	    if (found != 0)
-	      hdr->sh_link = found;
-	  }
-
 	/* Get the symbol table.  */
 	if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
 	     || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list