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:
H.J. Lu 2015-04-08 04:55:07 -07:00
parent 4496bed7f3
commit c58212eaf9
8 changed files with 195 additions and 119 deletions

View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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},

View File

@ -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");