* libelf.h (struct elf_obj_tdata): New field dt_needed_name.
authorIan Lance Taylor <ian@airs.com>
Thu, 16 Jun 1994 00:01:32 +0000 (00:01 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 16 Jun 1994 00:01:32 +0000 (00:01 +0000)
(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.

bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elfcode.h
bfd/libelf.h

index 772e08e..c4b2187 100644 (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.
index 645f24b..ad9fa96 100644 (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.  */
 
index 536ca74..7be9691 100644 (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.  */
 
index c46ffde..e471b56 100644 (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)
        {
index 6850aba..2838a5e 100644 (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)
 \f
 extern char * elf_string_from_elf_section PARAMS ((bfd *, unsigned, unsigned));