diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-04-08 04:55:07 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-04-08 04:55:23 -0700 |
commit | c58212eaf957ef39484ed71316074fd8366e9c4a (patch) | |
tree | 9ae83a3ffcd15b0661e03f89269f059f91910682 /ld | |
parent | 4496bed7f346afbb2f2b4f939373920a4d69da11 (diff) | |
download | binutils-gdb-c58212eaf957ef39484ed71316074fd8366e9c4a.tar.gz |
Add ld_list_options
This patch adds ld_list_options for ELF targets to avoid duplicated
outputs from ld --help.
* Makefile.am (ELF_CLFAGS): New.
(AM_CFLAGS): Add $(ELF_CLFAGS).
* configure.ac (elf_list_options): New. AC_SUBST.
(elf_shlib_list_options): Likewise.
(elf_plt_unwind_list_options): Likewise.
* lexsup.c (elf_shlib_list_options): New.
(elf_static_list_options): Likewise.
(elf_plt_unwind_list_options): Likewise.
(ld_list_options): Likewise.
(help): Call ld_list_options.
* Makefile.in: Regenerated.
* configure: Likewise.
* emulparams/plt_unwind.sh (PLT_UNWIND): New.
(PARSE_AND_LIST_OPTIONS): Removed.
* emultempl/elf32.em (gld_list_options): New.
(gld${EMULATION_NAME}_list_options): Define only if BNDPLT or
PARSE_AND_LIST_OPTIONS is defined.
(ld_${EMULATION_NAME}_emulation): Replace
gld${EMULATION_NAME}_list_options with ${gld_list_options.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 22 | ||||
-rw-r--r-- | ld/Makefile.am | 5 | ||||
-rw-r--r-- | ld/Makefile.in | 9 | ||||
-rwxr-xr-x | ld/configure | 28 | ||||
-rw-r--r-- | ld/configure.ac | 21 | ||||
-rw-r--r-- | ld/emulparams/plt_unwind.sh | 9 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 112 | ||||
-rw-r--r-- | ld/lexsup.c | 108 |
8 files changed, 195 insertions, 119 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 4228732ee43..a76dcb31969 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,25 @@ +2015-04-08 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.am (ELF_CLFAGS): New. + (AM_CFLAGS): Add $(ELF_CLFAGS). + * configure.ac (elf_list_options): New. AC_SUBST. + (elf_shlib_list_options): Likewise. + (elf_plt_unwind_list_options): Likewise. + * lexsup.c (elf_shlib_list_options): New. + (elf_static_list_options): Likewise. + (elf_plt_unwind_list_options): Likewise. + (ld_list_options): Likewise. + (help): Call ld_list_options. + * Makefile.in: Regenerated. + * configure: Likewise. + * emulparams/plt_unwind.sh (PLT_UNWIND): New. + (PARSE_AND_LIST_OPTIONS): Removed. + * emultempl/elf32.em (gld_list_options): New. + (gld${EMULATION_NAME}_list_options): Define only if BNDPLT or + PARSE_AND_LIST_OPTIONS is defined. + (ld_${EMULATION_NAME}_emulation): Replace + gld${EMULATION_NAME}_list_options with ${gld_list_options. + 2015-04-07 Alan Modra <amodra@gmail.com> PR ld/18176 diff --git a/ld/Makefile.am b/ld/Makefile.am index 80c748755c6..99e6fb197df 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -34,9 +34,12 @@ LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi` am__skiplex = am__skipyacc = +ELF_CLFAGS=-DELF_LIST_OPTIONS=@elf_list_options@ \ + -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \ + -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ -AM_CFLAGS = $(WARN_CFLAGS) +AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) # Conditionally enable the plugin interface. if ENABLE_PLUGINS diff --git a/ld/Makefile.in b/ld/Makefile.in index 81159cb851a..bc874f13343 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -344,6 +344,9 @@ datarootdir = @datarootdir@ do_compare = @do_compare@ docdir = @docdir@ dvidir = @dvidir@ +elf_list_options = @elf_list_options@ +elf_plt_unwind_list_options = @elf_plt_unwind_list_options@ +elf_shlib_list_options = @elf_shlib_list_options@ enable_initfini_array = @enable_initfini_array@ exec_prefix = @exec_prefix@ host = @host@ @@ -391,7 +394,11 @@ tooldir = $(exec_prefix)/$(target_alias) # maintainer mode is disabled. Avoid this. am__skiplex = am__skipyacc = -AM_CFLAGS = $(WARN_CFLAGS) +ELF_CLFAGS = -DELF_LIST_OPTIONS=@elf_list_options@ \ + -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \ + -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ + +AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) @ENABLE_PLUGINS_FALSE@PLUGIN_C = # Conditionally enable the plugin interface. diff --git a/ld/configure b/ld/configure index 4a312dfabf8..44bce0ee069 100755 --- a/ld/configure +++ b/ld/configure @@ -608,6 +608,9 @@ LIB_PATH EMUL_EXTRA_OFILES EMULATION_OFILES EMUL +elf_plt_unwind_list_options +elf_shlib_list_options +elf_list_options STRINGIFY enable_initfini_array ENABLE_PLUGINS_FALSE @@ -11710,7 +11713,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11713 "configure" +#line 11716 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11816,7 +11819,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11819 "configure" +#line 11822 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -17025,6 +17028,9 @@ _ACEOF fi fi +elf_list_options=FALSE +elf_shlib_list_options=FALSE +elf_plt_unwind_list_options=FALSE for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'` do if test "$targ_alias" = "all"; then @@ -17055,7 +17061,20 @@ do for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do case " $all_emuls " in - *" e${i}.o "*) ;; + *" e${i}.o "*) + case "${i}" in + *elf*) + elf_list_options=TRUE + . ${srcdir}/emulparams/${i}.sh + if test x${GENERATE_SHLIB_SCRIPT} = xyes; then + elf_shlib_list_options=TRUE + fi + if test x${PLT_UNWIND} = xyes; then + elf_plt_unwind_list_options=TRUE + fi + ;; + esac + ;; *) all_emuls="$all_emuls e${i}.o" eval result=\$tdir_$i @@ -17092,6 +17111,9 @@ done + + + TDIRS=tdirs diff --git a/ld/configure.ac b/ld/configure.ac index a885b7b2038..572440c8014 100644 --- a/ld/configure.ac +++ b/ld/configure.ac @@ -281,6 +281,9 @@ if test x${want64} = xfalse; then fi fi +elf_list_options=FALSE +elf_shlib_list_options=FALSE +elf_plt_unwind_list_options=FALSE for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'` do if test "$targ_alias" = "all"; then @@ -311,7 +314,20 @@ do for i in $targ_emul $targ_extra_emuls $targ_extra_libpath; do case " $all_emuls " in - *" e${i}.o "*) ;; + *" e${i}.o "*) + case "${i}" in + *elf*) + elf_list_options=TRUE + . ${srcdir}/emulparams/${i}.sh + if test x${GENERATE_SHLIB_SCRIPT} = xyes; then + elf_shlib_list_options=TRUE + fi + if test x${PLT_UNWIND} = xyes; then + elf_plt_unwind_list_options=TRUE + fi + ;; + esac + ;; *) all_emuls="$all_emuls e${i}.o" eval result=\$tdir_$i @@ -346,6 +362,9 @@ do fi done +AC_SUBST(elf_list_options) +AC_SUBST(elf_shlib_list_options) +AC_SUBST(elf_plt_unwind_list_options) AC_SUBST(EMUL) TDIRS=tdirs diff --git a/ld/emulparams/plt_unwind.sh b/ld/emulparams/plt_unwind.sh index c832570b215..38d76683efa 100644 --- a/ld/emulparams/plt_unwind.sh +++ b/ld/emulparams/plt_unwind.sh @@ -1,3 +1,5 @@ +PLT_UNWIND=yes + PARSE_AND_LIST_PROLOGUE=' #define OPTION_LD_GENERATED_UNWIND_INFO 301 #define OPTION_NO_LD_GENERATED_UNWIND_INFO 302 @@ -10,13 +12,6 @@ PARSE_AND_LIST_LONGOPTS=' OPTION_NO_LD_GENERATED_UNWIND_INFO}, ' -PARSE_AND_LIST_OPTIONS=' - fprintf (file, _("\ - --ld-generated-unwind-info Generate exception handling info for PLT.\n\ - --no-ld-generated-unwind-info Don'\''t do so.\n" - )); -' - PARSE_AND_LIST_ARGS_CASES=' case OPTION_LD_GENERATED_UNWIND_INFO: link_info.no_ld_generated_unwind_info = FALSE; diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 4dd71abfc38..dc643b6a88a 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -2366,117 +2366,14 @@ fragment <<EOF EOF if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then +gld_list_options="gld${EMULATION_NAME}_list_options" +if test -n "$PARSE_AND_LIST_OPTIONS" || test x"$BNDPLT" = xyes; then fragment <<EOF static void gld${EMULATION_NAME}_list_options (FILE * file) { EOF -if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then -fragment <<EOF - fprintf (file, _("\ - --audit=AUDITLIB Specify a library to use for auditing\n")); - fprintf (file, _("\ - -Bgroup Selects group name lookup rules for DSO\n")); -EOF -fi -fragment <<EOF - fprintf (file, _("\ - --build-id[=STYLE] Generate build ID note\n")); -EOF -if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then -fragment <<EOF - fprintf (file, _("\ - -P AUDITLIB, --depaudit=AUDITLIB\n" "\ - Specify a library to use for auditing dependencies\n")); - fprintf (file, _("\ - --disable-new-dtags Disable new dynamic tags\n")); - fprintf (file, _("\ - --enable-new-dtags Enable new dynamic tags\n")); - fprintf (file, _("\ - --eh-frame-hdr Create .eh_frame_hdr section\n")); - fprintf (file, _("\ - --exclude-libs=LIBS Make all symbols in LIBS hidden\n")); - fprintf (file, _("\ - --hash-style=STYLE Set hash style to sysv, gnu or both\n")); - fprintf (file, _("\ - -z combreloc Merge dynamic relocs into one section and sort\n")); -EOF -fi - -fragment <<EOF - fprintf (file, _("\ - -z common-page-size=SIZE Set common page size to SIZE\n")); - fprintf (file, _("\ - -z defs Report unresolved symbols in object files.\n")); - fprintf (file, _("\ - -z execstack Mark executable as requiring executable stack\n")); -EOF - -if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then -fragment <<EOF - fprintf (file, _("\ - -z global Make symbols in DSO available for subsequently\n\ - loaded objects\n")); - fprintf (file, _("\ - -z initfirst Mark DSO to be initialized first at runtime\n")); - fprintf (file, _("\ - -z interpose Mark object to interpose all DSOs but executable\n")); - fprintf (file, _("\ - -z lazy Mark object lazy runtime binding (default)\n")); - fprintf (file, _("\ - -z loadfltr Mark object requiring immediate process\n")); -EOF -fi - -fragment <<EOF - fprintf (file, _("\ - -z max-page-size=SIZE Set maximum page size to SIZE\n")); - fprintf (file, _("\ - -z muldefs Allow multiple definitions\n")); -EOF - -if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then -fragment <<EOF - fprintf (file, _("\ - -z nocombreloc Don't merge dynamic relocs into one section\n")); - fprintf (file, _("\ - -z nocopyreloc Don't create copy relocs\n")); - fprintf (file, _("\ - -z nodefaultlib Mark object not to use default search paths\n")); - fprintf (file, _("\ - -z nodelete Mark DSO non-deletable at runtime\n")); - fprintf (file, _("\ - -z nodlopen Mark DSO not available to dlopen\n")); - fprintf (file, _("\ - -z nodump Mark DSO not available to dldump\n")); -EOF -fi -fragment <<EOF - fprintf (file, _("\ - -z noexecstack Mark executable as not requiring executable stack\n")); -EOF -if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then -fragment <<EOF - fprintf (file, _("\ - -z text Treat DT_TEXTREL in shared object as error\n")); - fprintf (file, _("\ - -z notext Don't treat DT_TEXTREL in shared object as error\n")); - fprintf (file, _("\ - -z textoff Don't treat DT_TEXTREL in shared object as error\n")); - fprintf (file, _("\ - -z norelro Don't create RELRO program header\n")); - fprintf (file, _("\ - -z now Mark object non-lazy runtime binding\n")); - fprintf (file, _("\ - -z origin Mark object requiring immediate \$ORIGIN\n\ - processing at runtime\n")); - fprintf (file, _("\ - -z relro Create RELRO program header\n")); - fprintf (file, _("\ - -z stacksize=SIZE Set size of stack segment\n")); -EOF -fi if test x"$BNDPLT" = xyes; then fragment <<EOF @@ -2494,6 +2391,9 @@ fi fragment <<EOF } EOF +else + gld_list_options="NULL" +fi if test -n "$PARSE_AND_LIST_EPILOGUE" ; then fragment <<EOF @@ -2527,7 +2427,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = gld${EMULATION_NAME}_add_options, gld${EMULATION_NAME}_handle_option, ${LDEMUL_UNRECOGNIZED_FILE-NULL}, - ${LDEMUL_LIST_OPTIONS-gld${EMULATION_NAME}_list_options}, + ${LDEMUL_LIST_OPTIONS-${gld_list_options}}, ${LDEMUL_RECOGNIZED_FILE-gld${EMULATION_NAME}_load_symbols}, ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL}, ${LDEMUL_NEW_VERS_PATTERN-NULL}, diff --git a/ld/lexsup.c b/ld/lexsup.c index a30fafab1db..4a71ba41cb0 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -1652,6 +1652,112 @@ set_segment_start (const char *section, char *valstr) lang_section_start (section, exp_intop (val), seg); } +static void +elf_shlib_list_options (FILE *file) +{ + fprintf (file, _("\ + --audit=AUDITLIB Specify a library to use for auditing\n")); + fprintf (file, _("\ + -Bgroup Selects group name lookup rules for DSO\n")); + fprintf (file, _("\ + --disable-new-dtags Disable new dynamic tags\n")); + fprintf (file, _("\ + --enable-new-dtags Enable new dynamic tags\n")); + fprintf (file, _("\ + --eh-frame-hdr Create .eh_frame_hdr section\n")); + fprintf (file, _("\ + --exclude-libs=LIBS Make all symbols in LIBS hidden\n")); + fprintf (file, _("\ + --hash-style=STYLE Set hash style to sysv, gnu or both\n")); + fprintf (file, _("\ + -P AUDITLIB, --depaudit=AUDITLIB\n" "\ + Specify a library to use for auditing dependencies\n")); + fprintf (file, _("\ + -z combreloc Merge dynamic relocs into one section and sort\n")); + fprintf (file, _("\ + -z nocombreloc Don't merge dynamic relocs into one section\n")); + fprintf (file, _("\ + -z global Make symbols in DSO available for subsequently\n\ + loaded objects\n")); + fprintf (file, _("\ + -z initfirst Mark DSO to be initialized first at runtime\n")); + fprintf (file, _("\ + -z interpose Mark object to interpose all DSOs but executable\n")); + fprintf (file, _("\ + -z lazy Mark object lazy runtime binding (default)\n")); + fprintf (file, _("\ + -z loadfltr Mark object requiring immediate process\n")); + fprintf (file, _("\ + -z nocopyreloc Don't create copy relocs\n")); + fprintf (file, _("\ + -z nodefaultlib Mark object not to use default search paths\n")); + fprintf (file, _("\ + -z nodelete Mark DSO non-deletable at runtime\n")); + fprintf (file, _("\ + -z nodlopen Mark DSO not available to dlopen\n")); + fprintf (file, _("\ + -z nodump Mark DSO not available to dldump\n")); + fprintf (file, _("\ + -z now Mark object non-lazy runtime binding\n")); + fprintf (file, _("\ + -z origin Mark object requiring immediate $ORIGIN\n\ + processing at runtime\n")); + fprintf (file, _("\ + -z relro Create RELRO program header\n")); + fprintf (file, _("\ + -z norelro Don't create RELRO program header\n")); + fprintf (file, _("\ + -z stacksize=SIZE Set size of stack segment\n")); + fprintf (file, _("\ + -z text Treat DT_TEXTREL in shared object as error\n")); + fprintf (file, _("\ + -z notext Don't treat DT_TEXTREL in shared object as error\n")); + fprintf (file, _("\ + -z textoff Don't treat DT_TEXTREL in shared object as error\n")); +} + +static void +elf_static_list_options (FILE *file) +{ + fprintf (file, _("\ + --build-id[=STYLE] Generate build ID note\n")); + fprintf (file, _("\ + -z common-page-size=SIZE Set common page size to SIZE\n")); + fprintf (file, _("\ + -z max-page-size=SIZE Set maximum page size to SIZE\n")); + fprintf (file, _("\ + -z defs Report unresolved symbols in object files.\n")); + fprintf (file, _("\ + -z muldefs Allow multiple definitions\n")); + fprintf (file, _("\ + -z execstack Mark executable as requiring executable stack\n")); + fprintf (file, _("\ + -z noexecstack Mark executable as not requiring executable stack\n")); +} + +static void +elf_plt_unwind_list_options (FILE *file) +{ + fprintf (file, _("\ + --ld-generated-unwind-info Generate exception handling info for PLT\n\ + --no-ld-generated-unwind-info\n\ + Don't generate exception handling info for PLT\n")); +} + +static void +ld_list_options (FILE *file, bfd_boolean elf, bfd_boolean shlib, + bfd_boolean plt_unwind) +{ + if (!elf) + return; + printf (_("ELF emulations:\n")); + if (plt_unwind) + elf_plt_unwind_list_options (file); + elf_static_list_options (file); + if (shlib) + elf_shlib_list_options (file); +} + /* Print help messages for the options. */ @@ -1764,6 +1870,8 @@ help (void) /* xgettext:c-format */ printf (_("%s: emulation specific options:\n"), program_name); + ld_list_options (stdout, ELF_LIST_OPTIONS, ELF_SHLIB_LIST_OPTIONS, + ELF_PLT_UNWIND_LIST_OPTIONS); ldemul_list_emulation_options (stdout); printf ("\n"); |