summaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2004-07-19 16:40:48 +0000
committerH.J. Lu <hjl@lucon.org>2004-07-19 16:40:48 +0000
commit051dc05933ab25e3a7571f5d815807b5bcc76885 (patch)
treebdd225bbbdb95fff20017df5609971758c4ca831 /bfd/elf.c
parentbe5d51ae90249de82210de59d65916fb40b5b53f (diff)
downloadgdb-051dc05933ab25e3a7571f5d815807b5bcc76885.tar.gz
bfd/
2004-07-19 H.J. Lu <hongjiu.lu@intel.com> * bfd-in.h (dynamic_lib_link_class): Add DYN_NO_ADD_NEEDED and DYN_NO_NEEDED. (bfd_elf_get_dyn_lib_class): New prototype. * elf.c (bfd_elf_get_dyn_lib_class): New function. * elflink.c (elf_link_add_object_symbols): Check DYN_AS_NEEDED, DYN_DT_NEEDED and DYN_NO_NEEDED bits to see if a DT_NEEDED entry is needed. Issue an error if a DT_NEEDED entry is needed for a file marked DYN_NO_NEEDED. (elf_link_check_versioned_symbol): Check the DYN_DT_NEEDED bit for DT_NEEDED tags. * bfd-in2.h: Regenerated. ld/ 2004-07-19 H.J. Lu <hongjiu.lu@intel.com> * emultempl/elf32.em (gld${EMULATION_NAME}_load_symbols): Also check the add_needed field. (dt_needed): New struct. (gld${EMULATION_NAME}_try_needed): Change the first argument to a pointer to struct dt_needed. Check the DYN_NO_ADD_NEEDED bit in the file where the DT_NEEDED entry comes from. (gld${EMULATION_NAME}_search_needed): Change the second argument to a pointer to struct dt_needed. (gld${EMULATION_NAME}_check_ld_so_conf): Updated. (gld${EMULATION_NAME}_after_open): Likewise. * ld.texinfo: Add --add-needed document. * ldlang.c (new_afile): Set p->add_needed. * ldlang.h (lang_input_statement_type): Add add_needed field. * ldmain.h (add_needed): Declare. * ldmain.c (add_needed): New global var. * lexsup.c (option_values): Add OPTION_ADD_NEEDED and OPTION_NO_ADD_NEEDED. (ld_options): Likewise. (parse_args): Handle them.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index 1cf2dc0f245..4371f15869d 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1514,6 +1514,18 @@ bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
elf_dt_name (abfd) = name;
}
+int
+bfd_elf_get_dyn_lib_class (bfd *abfd)
+{
+ int lib_class;
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_get_format (abfd) == bfd_object)
+ lib_class = elf_dyn_lib_class (abfd);
+ else
+ lib_class = 0;
+ return lib_class;
+}
+
void
bfd_elf_set_dyn_lib_class (bfd *abfd, int lib_class)
{