From 2760f24c4942853eac7b921e4b8843d57a602654 Mon Sep 17 00:00:00 2001 From: Romain Geissler <romain.geissler@gmail.com> Date: Tue, 8 Aug 2017 07:25:39 +0930 Subject: [PATCH] Add configure flag to enable gnu hash style by default. ld/ * configure.ac: Add --enable-default-hash-style option. * ldmain.c (main): Set link_info.emit_hash to DEFAULT_EMIT_SYSV_HASH. Set link_info.emit_gnu_hash to DEFAULT_EMIT_GNU_HASH. * configure: Regenerate. * config.in: Regenerate. gold/ * configure.ac: Add --enable-default-hash-style option. * options.h (hash_style): Use DEFAULT_HASH_STYLE as default value. * configure: Regenerate. * config.in: Regenerate. --- gold/ChangeLog | 8 ++++++++ gold/config.in | 3 +++ gold/configure | 27 +++++++++++++++++++++++++++ gold/configure.ac | 20 ++++++++++++++++++++ gold/options.h | 2 +- ld/ChangeLog | 9 +++++++++ ld/config.in | 6 ++++++ ld/configure | 42 ++++++++++++++++++++++++++++++++++++++---- ld/configure.ac | 34 ++++++++++++++++++++++++++++++++++ ld/ldmain.c | 3 ++- 10 files changed, 148 insertions(+), 6 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index d598386..93836dd 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,11 @@ +2017-08-08 Romain Geissler <romain.geissler@gmail.com> + Alan Modra <amodra@gmail.com> + + * configure.ac: Add --enable-default-hash-style option. + * options.h (hash_style): Use DEFAULT_HASH_STYLE as default value. + * configure: Regenerate. + * config.in: Regenerate. + 2017-02-22 Alan Modra <amodra@gmail.com> * powerpc.cc (Target_powerpc::make_iplt_section): Check that diff --git a/gold/config.in b/gold/config.in index d9f7b76..5855fca 100644 --- a/gold/config.in +++ b/gold/config.in @@ -10,6 +10,9 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD +/* Set the default --hash-style value */ +#undef DEFAULT_HASH_STYLE + /* Define to 1 if you want to enable -z relro in ELF linker by default. */ #undef DEFAULT_LD_Z_RELRO diff --git a/gold/configure b/gold/configure index cb020be..90a706d 100755 --- a/gold/configure +++ b/gold/configure @@ -797,6 +797,7 @@ enable_threads enable_plugins enable_relro enable_targets +enable_default_hash_style with_lib_path enable_dependency_tracking enable_nls @@ -1447,6 +1448,8 @@ Optional Features: --enable-plugins linker plugins --enable-relro enable -z relro in ELF linker by default --enable-targets alternative target configurations + --enable-default-hash-style={sysv,gnu,both} + use this default hash style --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-nls do not use Native Language Support @@ -3410,6 +3413,30 @@ if test -n "$enable_targets"; then done fi +# Decide which "--hash-style" to use by default +# Provide a configure time option to override our default. +# Check whether --enable-default-hash-style was given. +if test "${enable_default_hash_style+set}" = set; then : + enableval=$enable_default_hash_style; case "${enable_default_hash_style}" in + sysv | gnu | both) ;; + *) as_fn_error "bad value ${enable_default_hash_style} for enable-default-hash-style option" "$LINENO" 5 ;; +esac +else + case "${target}" in + # Enable gnu hash only on GNU targets, but not mips + mips*-*-*) enable_default_hash_style=sysv ;; + *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; + *) enable_default_hash_style=sysv ;; +esac +fi + + + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_HASH_STYLE "${enable_default_hash_style}" +_ACEOF + + # See which specific instantiations we need. targetobjs= all_targets= diff --git a/gold/configure.ac b/gold/configure.ac index cbe3380..d7fa1f8 100644 --- a/gold/configure.ac +++ b/gold/configure.ac @@ -161,6 +161,26 @@ if test -n "$enable_targets"; then done fi +# Decide which "--hash-style" to use by default +# Provide a configure time option to override our default. +AC_ARG_ENABLE([default-hash-style], +AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}], + [use this default hash style]), +[case "${enable_default_hash_style}" in + sysv | gnu | both) ;; + *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;; +esac], +[case "${target}" in + # Enable gnu hash only on GNU targets, but not mips + mips*-*-*) enable_default_hash_style=sysv ;; + *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; + *) enable_default_hash_style=sysv ;; +esac]) + +AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE], + ["${enable_default_hash_style}"], + [Set the default --hash-style value]) + # See which specific instantiations we need. targetobjs= all_targets= diff --git a/gold/options.h b/gold/options.h index a8b1d46..ce21a42 100644 --- a/gold/options.h +++ b/gold/options.h @@ -921,7 +921,7 @@ class General_options N_("Min fraction of empty buckets in dynamic hash"), N_("FRACTION")); - DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "sysv", + DEFINE_enum(hash_style, options::TWO_DASHES, '\0', DEFAULT_HASH_STYLE, N_("Dynamic hash style"), N_("[sysv,gnu,both]"), {"sysv", "gnu", "both"}); diff --git a/ld/ChangeLog b/ld/ChangeLog index ba7d1d4..cf91d55 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2017-08-08 Romain Geissler <romain.geissler@gmail.com> + Alan Modra <amodra@gmail.com> + + * configure.ac: Add --enable-default-hash-style option. + * ldmain.c (main): Set link_info.emit_hash to DEFAULT_EMIT_SYSV_HASH. + Set link_info.emit_gnu_hash to DEFAULT_EMIT_GNU_HASH. + * configure: Regenerate. + * config.in: Regenerate. + 2017-03-02 Tristan Gingold <gingold@adacore.com> * configure: Regenerate. diff --git a/ld/config.in b/ld/config.in index 2c6d698..b2318e1 100644 --- a/ld/config.in +++ b/ld/config.in @@ -7,6 +7,12 @@ #endif #define __CONFIG_H__ 1 +/* Define to 1 if you want to emit gnu hash in the ELF linker by default. */ +#undef DEFAULT_EMIT_GNU_HASH + +/* Define to 1 if you want to emit sysv hash in the ELF linker by default. */ +#undef DEFAULT_EMIT_SYSV_HASH + /* Define if you want compressed debug sections by default. */ #undef DEFAULT_FLAG_COMPRESS_DEBUG diff --git a/ld/configure b/ld/configure index 36af969..40c67fd 100755 --- a/ld/configure +++ b/ld/configure @@ -793,6 +793,7 @@ enable_gold enable_got enable_compressed_debug_sections enable_relro +enable_default_hash_style enable_werror enable_build_warnings enable_nls @@ -1452,6 +1453,8 @@ Optional Features: --enable-compressed-debug-sections={all,ld,none} compress debug sections by default] --enable-relro enable -z relro in ELF linker by default + --enable-default-hash-style={sysv,gnu,both} + use this default hash style --enable-werror treat compile warnings as errors --enable-build-warnings enable build-time compiler warnings --disable-nls do not use Native Language Support @@ -11724,7 +11727,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11727 "configure" +#line 11730 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11830,7 +11833,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11833 "configure" +#line 11836 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15555,6 +15558,33 @@ if test "${enable_relro+set}" = set; then : esac fi +# Decide which "--hash-style" to use by default +# Provide a configure time option to override our default. +# Check whether --enable-default-hash-style was given. +if test "${enable_default_hash_style+set}" = set; then : + enableval=$enable_default_hash_style; case "${enable_default_hash_style}" in + sysv | gnu | both) ;; + *) as_fn_error "bad value ${enable_default_hash_style} for enable-default-hash-style option" "$LINENO" 5 ;; +esac +else + case "${target}" in + # Enable gnu hash only on GNU targets, but not mips + mips*-*-*) enable_default_hash_style=sysv ;; + *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; + *) enable_default_hash_style=sysv ;; +esac +fi + + +case "${enable_default_hash_style}" in + sysv | both) ac_default_emit_sysv_hash=1 ;; + *) ac_default_emit_sysv_hash=0 ;; +esac + +case "${enable_default_hash_style}" in + gnu | both) ac_default_emit_gnu_hash=1 ;; + *) ac_default_emit_gnu_hash=0 ;; +esac # Set the 'development' global. . $srcdir/../bfd/development.sh @@ -17212,9 +17242,13 @@ cat >>confdefs.h <<_ACEOF #define DEFAULT_LD_Z_RELRO $ac_default_ld_z_relro _ACEOF +cat >>confdefs.h <<_ACEOF +#define DEFAULT_EMIT_SYSV_HASH $ac_default_emit_sysv_hash +_ACEOF - - +cat >>confdefs.h <<_ACEOF +#define DEFAULT_EMIT_GNU_HASH $ac_default_emit_gnu_hash +_ACEOF diff --git a/ld/configure.ac b/ld/configure.ac index 36a9f50..1876ad7 100644 --- a/ld/configure.ac +++ b/ld/configure.ac @@ -166,6 +166,32 @@ AC_ARG_ENABLE(relro, no) ac_default_ld_z_relro=0 ;; esac])dnl +# Decide which "--hash-style" to use by default +# Provide a configure time option to override our default. +AC_ARG_ENABLE([default-hash-style], +AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}], + [use this default hash style]), +[case "${enable_default_hash_style}" in + sysv | gnu | both) ;; + *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;; +esac], +[case "${target}" in + # Enable gnu hash only on GNU targets, but not mips + mips*-*-*) enable_default_hash_style=sysv ;; + *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;; + *) enable_default_hash_style=sysv ;; +esac]) + +case "${enable_default_hash_style}" in + sysv | both) ac_default_emit_sysv_hash=1 ;; + *) ac_default_emit_sysv_hash=0 ;; +esac + +case "${enable_default_hash_style}" in + gnu | both) ac_default_emit_gnu_hash=1 ;; + *) ac_default_emit_gnu_hash=0 ;; +esac + AM_BINUTILS_WARNINGS AM_LC_MESSAGES @@ -394,6 +420,14 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO, $ac_default_ld_z_relro, [Define to 1 if you want to enable -z relro in ELF linker by default.]) +AC_DEFINE_UNQUOTED([DEFAULT_EMIT_SYSV_HASH], + [$ac_default_emit_sysv_hash], + [Define to 1 if you want to emit sysv hash in the ELF linker by default.]) + +AC_DEFINE_UNQUOTED([DEFAULT_EMIT_GNU_HASH], + [$ac_default_emit_gnu_hash], + [Define to 1 if you want to emit gnu hash in the ELF linker by default.]) + AC_SUBST(elf_list_options) AC_SUBST(elf_shlib_list_options) AC_SUBST(elf_plt_unwind_list_options) diff --git a/ld/ldmain.c b/ld/ldmain.c index 1e48b1a..579d961 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -282,7 +282,8 @@ main (int argc, char **argv) link_info.keep_memory = TRUE; link_info.combreloc = TRUE; link_info.strip_discarded = TRUE; - link_info.emit_hash = TRUE; + link_info.emit_hash = DEFAULT_EMIT_SYSV_HASH; + link_info.emit_gnu_hash = DEFAULT_EMIT_GNU_HASH; link_info.callbacks = &link_callbacks; link_info.input_bfds_tail = &link_info.input_bfds; /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init -- 2.14.2