aboutsummaryrefslogtreecommitdiff
path: root/ld/lexsup.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2004-07-19 16:40:52 +0000
committerH.J. Lu <hjl.tools@gmail.com>2004-07-19 16:40:52 +0000
commite56f61be758d90c463cc220c50ad7f30b955c2af (patch)
tree44a55597c662b3a96fc3faa041f88962121e02dc /ld/lexsup.c
parent756d8c7093fdf0f2134628c2f7514e8231ce4e82 (diff)
downloadgdb-e56f61be758d90c463cc220c50ad7f30b955c2af.zip
gdb-e56f61be758d90c463cc220c50ad7f30b955c2af.tar.gz
gdb-e56f61be758d90c463cc220c50ad7f30b955c2af.tar.bz2
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 'ld/lexsup.c')
-rw-r--r--ld/lexsup.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 55ab5ee..9a599a3 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -112,6 +112,8 @@ enum option_values
OPTION_SPLIT_BY_RELOC,
OPTION_SPLIT_BY_FILE ,
OPTION_WHOLE_ARCHIVE,
+ OPTION_ADD_NEEDED,
+ OPTION_NO_ADD_NEEDED,
OPTION_AS_NEEDED,
OPTION_NO_AS_NEEDED,
OPTION_WRAP,
@@ -482,6 +484,12 @@ static const struct ld_option ld_options[] =
{ {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE},
'\0', NULL, N_("Include all objects from following archives"),
TWO_DASHES },
+ { {"add-needed", no_argument, NULL, OPTION_ADD_NEEDED},
+ '\0', NULL, N_("Set DT_NEEDED tags for DT_NEEDED entries in\n"
+ "\t\t\t\tfollowing dynamic libs"), TWO_DASHES },
+ { {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_NEEDED},
+ '\0', NULL, N_("Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+ "\t\t\t\tin following dynamic libs"), TWO_DASHES },
{ {"as-needed", no_argument, NULL, OPTION_AS_NEEDED},
'\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
TWO_DASHES },
@@ -1196,6 +1204,12 @@ parse_args (unsigned argc, char **argv)
case OPTION_WHOLE_ARCHIVE:
whole_archive = TRUE;
break;
+ case OPTION_ADD_NEEDED:
+ add_needed = TRUE;
+ break;
+ case OPTION_NO_ADD_NEEDED:
+ add_needed = FALSE;
+ break;
case OPTION_AS_NEEDED:
as_needed = TRUE;
break;