diff options
author | iains <iains@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-11-27 14:29:36 +0000 |
---|---|---|
committer | iains <iains@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-11-27 14:29:36 +0000 |
commit | 6afab66ea6311211e0e82963e372daf7a7e86da8 (patch) | |
tree | 3025ca76070f4fc7fb893b3a09ca0f62f3d28227 /gcc/configure | |
parent | 4f3ac3c871d691833e652b4de82794ce82b82ee6 (diff) |
[Darwin, config] Arrange for ld64 to be detected as Darwin's linker.
This is an initial patch in a series that converts Darwin's configury
to detect ld64 features, rather than the current process of hard-coding
them on target system version.
A ld64-compatible linker is currently required and assumed by Darwin.
If a DEFAULT_LINKER is set via --with-ld= then this will be tested to
see if it is ld64.
The ld64 version is determined for the chosen ld and this is exported for
use in setting a default value for -mtarget-linker (needed for run-time
code-gen changes to section choices).
The support for -rdynamic is converted to be detected at config time, or
by the ld64 version if that is found.
gcc/
2016-11-27 Iain Sandoe <iain@codesourcery.com>
PR target/71767
* configure.ac (with-ld64): New var, set for Darwin, set on
detection of ld64, gcc_cv_ld64_export_dynamic: New, New test.
* config/darwin.h: Use LD64_HAS_DYNAMIC export. DEF_LD64: New,
define.
* config/darwin10.h(DEF_LD64): Update for this target version.
* config/darwin12.h(LINK_GCC_C_SEQUENCE_SPEC): Remove rdynamic
test. (DEF_LD64): Update for this target version.
* configure: Regenerated.
* config.in: Regenerated.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242894 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/configure')
-rwxr-xr-x | gcc/configure | 76 |
1 files changed, 74 insertions, 2 deletions
diff --git a/gcc/configure b/gcc/configure index 197a152dfa8..aa961b77acd 100755 --- a/gcc/configure +++ b/gcc/configure @@ -3639,6 +3639,11 @@ else fi +case $target in + *darwin*) ld64_flag=yes;; # Darwin can only use a ld64-compatible linker. + *) ld64_flag=no;; +esac + # With pre-defined ld # Check whether --with-ld was given. @@ -3651,6 +3656,8 @@ if test x"${DEFAULT_LINKER+set}" = x"set"; then as_fn_error "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes + elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then + ld64_flag=yes fi cat >>confdefs.h <<_ACEOF @@ -18423,7 +18430,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18426 "configure" +#line 18433 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18529,7 +18536,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18532 "configure" +#line 18539 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -28287,6 +28294,71 @@ _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_compress_debug" >&5 $as_echo "$gcc_cv_ld_compress_debug" >&6; } +if test x"$ld64_flag" = x"yes"; then + + # Set defaults for possibly untestable items. + gcc_cv_ld64_export_dynamic=0 + + if test "$build" = "$host"; then + darwin_try_test=1 + else + darwin_try_test=0 + fi + + # On Darwin, because of FAT library support, it is often possible to execute + # exes from compatible archs even when the host differs from the build system. + case "$build","$host" in + x86_64-*-darwin*,i?86-*-darwin* | powerpc64*-*-darwin*,powerpc*-*-darwin*) + darwin_try_test=1;; + *) ;; + esac + + # If the configurer specified a minimum ld64 version to be supported, then use + # that to determine feature support. + if test x"${gcc_cv_ld64_version}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking ld64 major version" >&5 +$as_echo_n "checking ld64 major version... " >&6; } + IFS=. read gcc_cv_ld64_major gcc_cv_ld64_minor <<< "${gcc_cv_ld64_version}" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_major" >&5 +$as_echo "$gcc_cv_ld64_major" >&6; } + if test "$gcc_cv_ld64_major" -ge 236; then + gcc_cv_ld64_export_dynamic=1 + fi + elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then + # If the version was not specified, try to find it. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5 +$as_echo_n "checking linker version... " >&6; } + if test x"${gcc_cv_ld64_version}" = x; then + gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | grep ld64 | sed s/.*ld64-// | awk '{print $1}'` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5 +$as_echo "$gcc_cv_ld64_version" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -export_dynamic support" >&5 +$as_echo_n "checking linker for -export_dynamic support... " >&6; } + gcc_cv_ld64_export_dynamic=1 + if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then + gcc_cv_ld64_export_dynamic=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_export_dynamic" >&5 +$as_echo "$gcc_cv_ld64_export_dynamic" >&6; } + fi + + if test x"${gcc_cv_ld64_version}" != x; then + +cat >>confdefs.h <<_ACEOF +#define LD64_VERSION "${gcc_cv_ld64_version}" +_ACEOF + + fi + + +cat >>confdefs.h <<_ACEOF +#define LD64_HAS_EXPORT_DYNAMIC $gcc_cv_ld64_export_dynamic +_ACEOF + +fi + # -------- # UNSORTED # -------- |