From: Ian Lance Taylor Date: Thu, 16 Jun 1994 00:01:32 +0000 (+0000) Subject: * libelf.h (struct elf_obj_tdata): New field dt_needed_name. X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=c1f84521bf0f5f12617ac204d78b5b9b4c72a8b9;p=deliverable%2Fbinutils-gdb.git * 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 772e08e6a2..c4b2187b7d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 645f24b4f7..ad9fa967df 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -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. */ diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 536ca7406d..7be9691057 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -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. */ diff --git a/bfd/elfcode.h b/bfd/elfcode.h index c46ffde38f..e471b56c71 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -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) { diff --git a/bfd/libelf.h b/bfd/libelf.h index 6850abaf5f..2838a5e228 100644 --- a/bfd/libelf.h +++ b/bfd/libelf.h @@ -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));