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.
This commit is contained in:
parent
4496bed7f3
commit
c58212eaf9
22
ld/ChangeLog
22
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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
28
ld/configure
vendored
28
ld/configure
vendored
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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},
|
||||
|
108
ld/lexsup.c
108
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");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user