* libelf.h (struct elf_obj_tdata): New field dt_needed_name.

(elf_dt_needed_name): New accessor macro.
	* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
	is set, use that instead of the filename for the DT_NEEDED dynamic
	entry.
	* elf.c (bfd_elf_set_dt_needed_name): New function.
	* bfd-in.h (bfd_elf_set_dt_needed_name): Declare.
	* bfd-in2.h: Rebuilt.
This commit is contained in:
Ian Lance Taylor 1994-06-16 00:01:32 +00:00
parent 33b90e5265
commit c1f84521bf
5 changed files with 23 additions and 1 deletions

View File

@ -10,6 +10,15 @@ Wed Jun 15 18:02:21 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
Wed Jun 15 01:34:07 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* libelf.h (struct elf_obj_tdata): New field dt_needed_name.
(elf_dt_needed_name): New accessor macro.
* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
is set, use that instead of the filename for the DT_NEEDED dynamic
entry.
* elf.c (bfd_elf_set_dt_needed_name): New function.
* bfd-in.h (bfd_elf_set_dt_needed_name): Declare.
* bfd-in2.h: Rebuilt.
* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add sinterpptr
argument, and set it to the .interp section.
* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.

View File

@ -535,6 +535,7 @@ extern boolean bfd_elf32_size_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
extern boolean bfd_elf64_size_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
/* SunOS shared library support routines for the linker. */

View File

@ -535,6 +535,7 @@ extern boolean bfd_elf32_size_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
extern boolean bfd_elf64_size_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *, struct sec **));
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
/* SunOS shared library support routines for the linker. */

View File

@ -4163,8 +4163,12 @@ elf_link_add_object_symbols (abfd, info)
/* Find the name to use in a DT_NEEDED entry that refers to this
object. If the object has a DT_SONAME entry, we use it.
Otherwise, we use the file name. */
Otherwise, if the generic linker stuck something in
elf_dt_needed_name, we use that. Otherwise, we just use the
file name. */
name = bfd_get_filename (abfd);
if (elf_dt_needed_name (abfd) != NULL)
name = elf_dt_needed_name (abfd);
s = bfd_get_section_by_name (abfd, ".dynamic");
if (s != NULL)
{

View File

@ -417,6 +417,12 @@ struct elf_obj_tdata
minus the sh_info field of the symbol table header. */
struct elf_link_hash_entry **sym_hashes;
/* The linker ELF emulation code needs to let the backend ELF linker
know what filename should be used for a dynamic object if the
dynamic object is found using a search. This field is used to
hold that information. */
const char *dt_needed_name;
/* Irix 5 often screws up the symbol table, sorting local symbols
after global symbols. This flag is set if the symbol table in
this BFD appears to be screwed up. If it is, we ignore the
@ -441,6 +447,7 @@ struct elf_obj_tdata
#define elf_gp(bfd) (elf_tdata(bfd) -> gp)
#define elf_gp_size(bfd) (elf_tdata(bfd) -> gp_size)
#define elf_sym_hashes(bfd) (elf_tdata(bfd) -> sym_hashes)
#define elf_dt_needed_name(bfd) (elf_tdata(bfd) -> dt_needed_name)
#define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab)
extern char * elf_string_from_elf_section PARAMS ((bfd *, unsigned, unsigned));