From fc92f5811e77b091d65045f2daa0f83c31d00797 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Thu, 20 Jul 2023 16:37:21 +0100 Subject: [PATCH] Darwin: Handle linker '-demangle' option. Most of the Darwin linkers in use support this option which we will now pass by default (matching the Xcode clang impl.)> Signed-off-by: Iain Sandoe gcc/ChangeLog: * config.in: Regenerate. * config/darwin.h (DARWIN_LD_DEMANGLE): New. (LINK_COMMAND_SPEC_A): Add demangle handling. * configure: Regenerate. * configure.ac: Detect linker support for '-demangle'. --- gcc/config.in | 9 ++++++++- gcc/config/darwin.h | 7 +++++++ gcc/configure | 19 +++++++++++++++++++ gcc/configure.ac | 14 ++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/gcc/config.in b/gcc/config.in index 0e62b9fbfc9..5cf51bc1b01 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2178,6 +2178,12 @@ #endif +/* Define to 1 if ld64 supports '-demangle'. */ +#ifndef USED_FOR_TARGET +#undef LD64_HAS_DEMANGLE +#endif + + /* Define to 1 if ld64 supports '-export_dynamic'. */ #ifndef USED_FOR_TARGET #undef LD64_HAS_EXPORT_DYNAMIC @@ -2239,7 +2245,8 @@ #endif -/* Define to the sub-directory where libtool stores uninstalled libraries. */ +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ #ifndef USED_FOR_TARGET #undef LT_OBJDIR #endif diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 1b538c73593..e0e8672a455 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -270,6 +270,12 @@ extern GTY(()) int darwin_ms_struct; "%&6; } gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'` { $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 97; then + gcc_cv_ld64_demangle=1 + fi if test "$gcc_cv_ld64_major" -ge 236; then gcc_cv_ld64_export_dynamic=1 fi @@ -30517,6 +30521,15 @@ $as_echo_n "checking linker version... " >&6; } { $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 -demangle support" >&5 +$as_echo_n "checking linker for -demangle support... " >&6; } + gcc_cv_ld64_demangle=1 + if $gcc_cv_ld -demangle < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then + gcc_cv_ld64_demangle=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_demangle" >&5 +$as_echo "$gcc_cv_ld64_demangle" >&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 @@ -30545,6 +30558,12 @@ _ACEOF fi +cat >>confdefs.h <<_ACEOF +#define LD64_HAS_DEMANGLE $gcc_cv_ld64_demangle +_ACEOF + + + cat >>confdefs.h <<_ACEOF #define LD64_HAS_EXPORT_DYNAMIC $gcc_cv_ld64_export_dynamic _ACEOF diff --git a/gcc/configure.ac b/gcc/configure.ac index e91073ba831..46e58a27661 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -6211,6 +6211,7 @@ if test x"$ld64_flag" = x"yes"; then # Set defaults for possibly untestable items. gcc_cv_ld64_export_dynamic=0 gcc_cv_ld64_platform_version=0 + gcc_cv_ld64_demangle=0 if test "$build" = "$host"; then darwin_try_test=1 @@ -6232,6 +6233,9 @@ if test x"$ld64_flag" = x"yes"; then AC_MSG_CHECKING(ld64 specified version) gcc_cv_ld64_major=`echo "$gcc_cv_ld64_version" | sed -e 's/\..*//'` AC_MSG_RESULT($gcc_cv_ld64_major) + if test "$gcc_cv_ld64_major" -ge 97; then + gcc_cv_ld64_demangle=1 + fi if test "$gcc_cv_ld64_major" -ge 236; then gcc_cv_ld64_export_dynamic=1 fi @@ -6246,6 +6250,13 @@ if test x"$ld64_flag" = x"yes"; then fi AC_MSG_RESULT($gcc_cv_ld64_version) + AC_MSG_CHECKING(linker for -demangle support) + gcc_cv_ld64_demangle=1 + if $gcc_cv_ld -demangle < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then + gcc_cv_ld64_demangle=0 + fi + AC_MSG_RESULT($gcc_cv_ld64_demangle) + AC_MSG_CHECKING(linker for -export_dynamic support) gcc_cv_ld64_export_dynamic=1 if $gcc_cv_ld -export_dynamic < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then @@ -6266,6 +6277,9 @@ if test x"$ld64_flag" = x"yes"; then [Define to ld64 version.]) fi + AC_DEFINE_UNQUOTED(LD64_HAS_DEMANGLE, $gcc_cv_ld64_demangle, + [Define to 1 if ld64 supports '-demangle'.]) + AC_DEFINE_UNQUOTED(LD64_HAS_EXPORT_DYNAMIC, $gcc_cv_ld64_export_dynamic, [Define to 1 if ld64 supports '-export_dynamic'.])