From fc92f5811e77b091d65045f2daa0f83c31d00797 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> 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 <iain@sandoe.co.uk> 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 0e62b9fbfc93..5cf51bc1b01a 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 1b538c73593a..e0e8672a455b 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -270,6 +270,12 @@ extern GTY(()) int darwin_ms_struct; "%<y*", \ "%<Mach " +#if LD64_HAS_DEMANGLE +#define DARWIN_LD_DEMANGLE " -demangle " +#else +#define DARWIN_LD_DEMANGLE "" +#endif + #if LD64_HAS_EXPORT_DYNAMIC #define DARWIN_RDYNAMIC "%{rdynamic:-export_dynamic}" #else @@ -356,6 +362,7 @@ extern GTY(()) int darwin_ms_struct; #define LINK_COMMAND_SPEC_A \ "%{!c:%{!E:%{!S:%{!M:%{!MM:%{!fsyntax-only:%{!fdump=*: \ %(linker)" \ + DARWIN_LD_DEMANGLE \ LINK_PLUGIN_SPEC \ "%{flto*:%<fcompare-debug*} \ %{flto} %{fno-lto} %{flto=*} \ diff --git a/gcc/configure b/gcc/configure index 496da71060b2..c341ee12a8ab 100755 --- a/gcc/configure +++ b/gcc/configure @@ -30478,6 +30478,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 @@ -30501,6 +30502,9 @@ $as_echo_n "checking ld64 specified version... " >&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 e91073ba831e..46e58a276612 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'.]) -- GitLab