From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1698) id EC5D33858D33; Wed, 18 Oct 2023 09:36:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EC5D33858D33 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1697621802; bh=Tonhti68avCbQQAROb/t6su1NtKHpo4E0wDVMq5L/PU=; h=From:To:Subject:Date:From; b=UwMt9QCNUtmgtsjogk7lNW692h1u3NCp60TaBB1MFQO0fbvI3E0Lmz/BOkgQCP2Zk SV9CFvLMZd1FEOAS4JUpq7r3+qYTqs51wo3npuKKtpwV7vYD1/gudrz2/D322l7wvR ia5Fv1jTEzunmlBPYTH8RyOe67lxALPwW/moWo+M= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Iain D Sandoe To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4717] Darwin: Check as for .build_version support and use it if available. X-Act-Checkin: gcc X-Git-Author: Iain Sandoe X-Git-Refname: refs/heads/master X-Git-Oldrev: dd28f90c95378bf8ebb82a3dfdf24a6ad190877a X-Git-Newrev: a4184c8a65a00eaf8a8d7f92fb8ad2f8621b39e2 Message-Id: <20231018093642.EC5D33858D33@sourceware.org> Date: Wed, 18 Oct 2023 09:36:42 +0000 (GMT) List-Id: https://gcc.gnu.org/g:a4184c8a65a00eaf8a8d7f92fb8ad2f8621b39e2 commit r14-4717-ga4184c8a65a00eaf8a8d7f92fb8ad2f8621b39e2 Author: Iain Sandoe Date: Tue Oct 17 11:10:27 2023 +0100 Darwin: Check as for .build_version support and use it if available. This adds support for the minimum OS version data in assembler files. At present, we have no mechanism to detect the SDK version in use, and so that is omitted from build_versions. We follow the implementation in clang, '.build_version' is only emitted (where supported) for target macOS versions >= 10.14. For earlier macOS we fall back to using a '.macosx_version_min' directive. This latter is also emitted when the assembler supports it, but not build_version. gcc/ChangeLog: * config.in: Regenerate. * config/darwin.cc (darwin_file_start): Add assembler directives for the target OS version, where these are supported by the assembler. (darwin_override_options): Check for building >= macOS 10.14. * configure: Regenerate. * configure.ac: Check for assembler support of .build_version directives. Signed-off-by: Iain Sandoe Diff: --- gcc/config.in | 6 ++++++ gcc/config/darwin.cc | 34 ++++++++++++++++++++++++++++++++-- gcc/configure | 33 +++++++++++++++++++++++++++++++++ gcc/configure.ac | 8 ++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) diff --git a/gcc/config.in b/gcc/config.in index d04718ad1282..98ddddf88a0f 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -604,6 +604,12 @@ #endif +/* Define if your macOS assembler supports .build_version directives */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_MACOS_BUILD_VERSION +#endif + + /* Define if the assembler understands -march=rv*_zifencei. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_MARCH_ZIFENCEI diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc index d8c8607892b5..a80b6caf95a7 100644 --- a/gcc/config/darwin.cc +++ b/gcc/config/darwin.cc @@ -3073,7 +3073,35 @@ darwin_asm_output_dwarf_offset (FILE *file, int size, const char * lab, void darwin_file_start (void) { - /* Nothing to do. */ +#ifdef HAVE_AS_MMACOSX_VERSION_MIN_OPTION + /* This should not happen with a well-formed command line, but the user could + invoke cc1* directly without it. */ + if (!darwin_macosx_version_min) + return; + /* This assumes that the version passed has been validated in the driver. */ + unsigned maj, min, tiny; + int count = sscanf (darwin_macosx_version_min, "%u.%u.%u", &maj, &min, &tiny); + if (count < 0) + return; + if (count < 3) + tiny = 0; + if (count < 2) + min = 0; + const char *directive; +#ifdef HAVE_AS_MACOS_BUILD_VERSION + /* We only handle macos, so far. */ + if (generating_for_darwin_version >= 18) + directive = "build_version macos, "; + else +#endif + directive = "macosx_version_min "; + if (count > 2 && tiny != 0) + fprintf (asm_out_file, "\t.%s %u, %u, %u\n", directive, maj, min, tiny); + else if (count > 1) + fprintf (asm_out_file, "\t.%s %u, %u\n", directive, maj, min); + else + fprintf (asm_out_file, "\t.%s %u, 0\n", directive, maj); +#endif } /* Called for the TARGET_ASM_FILE_END hook. @@ -3295,7 +3323,9 @@ darwin_override_options (void) /* Keep track of which (major) version we're generating code for. */ if (darwin_macosx_version_min) { - if (strverscmp (darwin_macosx_version_min, "10.7") >= 0) + if (strverscmp (darwin_macosx_version_min, "10.14") >= 0) + generating_for_darwin_version = 18; + else if (strverscmp (darwin_macosx_version_min, "10.7") >= 0) generating_for_darwin_version = 11; else if (strverscmp (darwin_macosx_version_min, "10.6") >= 0) generating_for_darwin_version = 10; diff --git a/gcc/configure b/gcc/configure index c43bde8174ba..9f5b70819929 100755 --- a/gcc/configure +++ b/gcc/configure @@ -26361,6 +26361,39 @@ $as_echo "#define HAVE_AS_MMACOSX_VERSION_MIN_OPTION 1" >>confdefs.h fi + if test x$gcc_cv_as_mmacosx_version_min = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .build_version" >&5 +$as_echo_n "checking assembler for .build_version... " >&6; } +if ${gcc_cv_as_darwin_build_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_darwin_build_version=no + if test x$gcc_cv_as != x; then + $as_echo ' .build_version macos, 10, 14 sdk_version 10, 14' > conftest.s + if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mmacosx-version-min=10.14 -o conftest.o conftest.s >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } + then + gcc_cv_as_darwin_build_version=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_darwin_build_version" >&5 +$as_echo "$gcc_cv_as_darwin_build_version" >&6; } +if test $gcc_cv_as_darwin_build_version = yes; then + +$as_echo "#define HAVE_AS_MACOS_BUILD_VERSION 1" >>confdefs.h + +fi + + fi ;; esac diff --git a/gcc/configure.ac b/gcc/configure.ac index fb8e32f8ee55..c10e007f9bf2 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -4374,6 +4374,14 @@ case "$target_os" in [-mmacosx-version-min=10.1], [.text],, [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1, [Define if your macOS assembler supports the -mmacos-version-min option.])]) + if test x$gcc_cv_as_mmacosx_version_min = "xyes"; then + gcc_GAS_CHECK_FEATURE([.build_version], + gcc_cv_as_darwin_build_version, + [-mmacosx-version-min=10.14], + [ .build_version macos, 10, 14 sdk_version 10, 14],, + [AC_DEFINE(HAVE_AS_MACOS_BUILD_VERSION, 1, + [Define if your macOS assembler supports .build_version directives])]) + fi ;; esac