diff options
author | Iain Sandoe <iain@codesourcery.com> | 2016-11-27 15:07:22 +0000 |
---|---|---|
committer | Iain Sandoe <iains@gcc.gnu.org> | 2016-11-27 15:07:22 +0000 |
commit | b410cf1dc056aab195c5408871ffca932df8a78a (patch) | |
tree | dc142613e84e7693a450028b7c1073978b9092b4 | |
parent | 03f82a6a634ddfa5828843b647c896968aee3702 (diff) |
[Darwin] fix PR67710 by updating 'as' specs to handle newer assembler versions.
A/ Newer versions of ld64 check the min_version command, and newer versions of
the system assembler inserts this in response to "-mmacosx-version-min=" on
the assembler line. Unless one makes sensible versions, some object is bound
to conflict.
B/ Additionally, there's a difference in behaviour between "as" and "ld" when
presented with xx.yy.zz (ld truncates to xx.yy, as doesn't); net result is
that one needs to pass a truncated version to "as".
So (if the assembler supports minversion commands)
(a) provide a truncated minversion (as asm_macosx_version_min, which is a
driver-only var).
(b) pass this to "as"
(c) Update tests to determine 'HAVE_AS_MMACOSX_VERSION_MIN_OPTION'
(Rainer's patch)
(d) For some reason the testcases are "run" (it's not obvious they need to be,
they are checking compile-time issues)
- anyway, to preserve the status quo, I've left them as exec. However, the
minimum version that can be code-gened for is target-dependent (there are no
released x86 versions before 10.4, for example). To avoid conflicts where
the "as" is assuming some minimum, I've set the testversion to 10.5 (which
is supported by all the archs we have)
(e) We need to ensure that libgcc and crts are generated with a sufficiently
old minversion not to conflict.
gcc/
2016-11-27 Iain Sandoe <iain@codesourcery.com>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR target/67710
* config.in: Regenerate
* config/darwin-driver.c (darwin_driver_init): Emit a version string
for the assembler.
* config/darwin.h(ASM_MMACOSX_VERSION_MIN_SPEC): New, new tests.
* config/darwin.opt(asm_macosx_version_min): New.
* config/i386/darwin.h: Handle ASM_MMACOSX_VERSION_MIN_SPEC.
* configure: Regenerate
* configure.ac: Check for mmacosx-version-min handling.
gcc/testsuite/
2016-11-27 Iain Sandoe <iain@codesourcery.com>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Dominique d'Humieres <dominiq@lps.ens.fr>
PR target/67710
* gcc.dg/darwin-minversion-1.c: Update min version check.
* gcc.dg/darwin-minversion-2.c: Likewise.
* gcc.dg/darwin-minversion-3.c: Likewise.
libgcc/
2016-11-27 Iain Sandoe <iain@codesourcery.com>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR target/67710
* config/t-darwin: Default builds to 10.5 codegen.
Co-Authored-By: Dominique d'Humieres <dominiq@lps.ens.fr>
Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
From-SVN: r242898
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config.in | 7 | ||||
-rw-r--r-- | gcc/config/darwin-driver.c | 28 | ||||
-rw-r--r-- | gcc/config/darwin.h | 21 | ||||
-rw-r--r-- | gcc/config/darwin.opt | 3 | ||||
-rw-r--r-- | gcc/config/i386/darwin.h | 5 | ||||
-rwxr-xr-x | gcc/configure | 39 | ||||
-rw-r--r-- | gcc/configure.ac | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-minversion-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-minversion-2.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-minversion-3.c | 4 | ||||
-rw-r--r-- | libgcc/ChangeLog | 6 | ||||
-rw-r--r-- | libgcc/config/t-darwin | 4 |
14 files changed, 150 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a57eaab8b20..4cd9332cc32 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,17 @@ 2016-11-27 Iain Sandoe <iain@codesourcery.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/67710 + * config.in: Regenerate + * config/darwin-driver.c (darwin_driver_init): Emit a version string + for the assembler. + * config/darwin.h(ASM_MMACOSX_VERSION_MIN_SPEC): New, new tests. + * config/darwin.opt(asm_macosx_version_min): New. + * config/i386/darwin.h: Handle ASM_MMACOSX_VERSION_MIN_SPEC. + * configure: Regenerate + * configure.ac: Check for mmacosx-version-min handling. + +2016-11-27 Iain Sandoe <iain@codesourcery.com> PR target/57438 * config/i386/i386.c (ix86_code_end): Note that we emitted code diff --git a/gcc/config.in b/gcc/config.in index c192638fc94..e02d33e0cdb 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -564,6 +564,13 @@ #endif +/* Define if your Mac OS X assembler supports the -mmacos-version-min option. + */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_MMACOSX_VERSION_MIN_OPTION +#endif + + /* Define if the assembler understands -mnan=. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_NAN diff --git a/gcc/config/darwin-driver.c b/gcc/config/darwin-driver.c index db8d72c2a81..f80c9ed2e0f 100644 --- a/gcc/config/darwin-driver.c +++ b/gcc/config/darwin-driver.c @@ -73,7 +73,8 @@ darwin_find_version_from_kernel (void) component. */ if (major_vers - 4 <= 4) /* On 10.4 and earlier, the old linker is used which does not - support three-component system versions. */ + support three-component system versions. + FIXME: we should not assume this - a newer linker could be used. */ asprintf (&new_flag, "10.%d", major_vers - 4); else asprintf (&new_flag, "10.%d.%s", major_vers - 4, minor_vers); @@ -294,4 +295,29 @@ darwin_driver_init (unsigned int *decoded_options_count, &(*decoded_options)[*decoded_options_count - 1]); } } + /* Create and push the major version for assemblers that need it. */ + if (vers_string != NULL) + { + char *asm_major = NULL; + char *first_period = strchr(vers_string, '.'); + if (first_period != NULL) + { + char *second_period = strchr(first_period+1, '.'); + if (second_period != NULL) + asm_major = xstrndup (vers_string, second_period-vers_string); + else + asm_major = xstrdup (vers_string); + } + /* Else we appear to have a weird macosx version with no major number. + Punt on this for now. */ + if (asm_major != NULL) + { + ++*decoded_options_count; + *decoded_options = XRESIZEVEC (struct cl_decoded_option, + *decoded_options, + *decoded_options_count); + generate_option (OPT_asm_macosx_version_min_, asm_major, 1, CL_DRIVER, + &(*decoded_options)[*decoded_options_count - 1]); + } + } } diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 79fc50637e3..374034e3f0d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -399,10 +399,27 @@ extern GTY(()) int darwin_ms_struct; %:version-compare(>< 10.6 10.8 mmacosx-version-min= -lcrt1.10.6.o) \ %{fgnu-tm: -lcrttms.o}" -/* Default Darwin ASM_SPEC, very simple. */ +#ifdef HAVE_AS_MMACOSX_VERSION_MIN_OPTION +/* Emit macosx version (but only major). */ +#define ASM_MMACOSX_VERSION_MIN_SPEC \ + " %{asm_macosx_version_min=*: -mmacosx-version-min=%*} %<asm_macosx_version_min=*" +#else +#define ASM_MMACOSX_VERSION_MIN_SPEC " %<asm_macosx_version_min=*" +#endif + +/* When we detect that we're cctools or llvm as, we need to insert the right + additional options. */ +#if HAVE_GNU_AS +#define ASM_OPTIONS "" +#else +#define ASM_OPTIONS "%{v} %{w:-W} %{I*}" +#endif + +/* Default Darwin ASM_SPEC, very simple. */ #define ASM_SPEC "-arch %(darwin_arch) \ + " ASM_OPTIONS " \ %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \ - %{static}" + %{static}" ASM_MMACOSX_VERSION_MIN_SPEC /* Default ASM_DEBUG_SPEC. Darwin's as cannot currently produce dwarf debugging data. */ diff --git a/gcc/config/darwin.opt b/gcc/config/darwin.opt index 7f2e394ae79..25459e07288 100644 --- a/gcc/config/darwin.opt +++ b/gcc/config/darwin.opt @@ -37,6 +37,9 @@ Driver RejectNegative Separate arch_errors_fatal Driver Alias(Zarch_errors_fatal) +asm_macosx_version_min= +Driver RejectNegative Joined + bind_at_load Driver Alias(Zbind_at_load) diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index c10ceff0cc2..705fdf2696d 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -112,8 +112,9 @@ extern int darwin_emit_branch_islands; DARWIN_CC1_SPEC #undef ASM_SPEC -#define ASM_SPEC "-arch %(darwin_arch) -force_cpusubtype_ALL \ - %{static}" +#define ASM_SPEC "-arch %(darwin_arch) \ + " ASM_OPTIONS " -force_cpusubtype_ALL \ + %{static}" ASM_MMACOSX_VERSION_MIN_SPEC #define DARWIN_ARCH_SPEC "%{m64:x86_64;:i386}" #define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC diff --git a/gcc/configure b/gcc/configure index aa961b77acd..90f9e8977fd 100755 --- a/gcc/configure +++ b/gcc/configure @@ -24476,6 +24476,45 @@ _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_lto_plugin" >&5 $as_echo "$gcc_cv_lto_plugin" >&6; } +# Target OS-specific assembler checks. + +case "$target_os" in + darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mmacosx-version-min option" >&5 +$as_echo_n "checking assembler for -mmacosx-version-min option... " >&6; } +if test "${gcc_cv_as_mmacosx_version_min+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_mmacosx_version_min=no + if test x$gcc_cv_as != x; then + $as_echo '.text' > conftest.s + if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mmacosx-version-min=10.1 -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_mmacosx_version_min=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_mmacosx_version_min" >&5 +$as_echo "$gcc_cv_as_mmacosx_version_min" >&6; } +if test $gcc_cv_as_mmacosx_version_min = yes; then + +$as_echo "#define HAVE_AS_MMACOSX_VERSION_MIN_OPTION 1" >>confdefs.h + +fi + ;; +esac + +# Target CPU-specific assembler checks. + case "$target" in aarch64*-*-*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mabi option" >&5 diff --git a/gcc/configure.ac b/gcc/configure.ac index 998499ed82d..b2798e78db7 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -3689,6 +3689,20 @@ AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin, [Define to the level of your linker's plugin support.]) AC_MSG_RESULT($gcc_cv_lto_plugin) +# Target OS-specific assembler checks. + +case "$target_os" in + darwin*) + gcc_GAS_CHECK_FEATURE([-mmacosx-version-min option], + gcc_cv_as_mmacosx_version_min,, + [-mmacosx-version-min=10.1], [.text],, + [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1, + [Define if your Mac OS X assembler supports the -mmacos-version-min option.])]) + ;; +esac + +# Target CPU-specific assembler checks. + case "$target" in aarch64*-*-*) gcc_GAS_CHECK_FEATURE([-mabi option], gcc_cv_as_aarch64_mabi,, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7eacc3543e..579dd10b14b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,13 @@ 2016-11-27 Iain Sandoe <iain@codesourcery.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + Dominique d'Humieres <dominiq@lps.ens.fr> + + PR target/67710 + * gcc.dg/darwin-minversion-1.c: Update min version check. + * gcc.dg/darwin-minversion-2.c: Likewise. + * gcc.dg/darwin-minversion-3.c: Likewise. + +2016-11-27 Iain Sandoe <iain@codesourcery.com> PR target/57438 * gcc.dg/pr57438-1.c: New Test. diff --git a/gcc/testsuite/gcc.dg/darwin-minversion-1.c b/gcc/testsuite/gcc.dg/darwin-minversion-1.c index 6221d617b2e..ee6493a3119 100644 --- a/gcc/testsuite/gcc.dg/darwin-minversion-1.c +++ b/gcc/testsuite/gcc.dg/darwin-minversion-1.c @@ -1,11 +1,11 @@ /* Basic test for -mmacosx-version-min switch on Darwin. */ -/* { dg-options "-mmacosx-version-min=10.1" } */ +/* { dg-options "-mmacosx-version-min=10.5" } */ /* { dg-do run { target *-*-darwin* } } */ int main () { -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1010 +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1050 fail me; #endif return 0; diff --git a/gcc/testsuite/gcc.dg/darwin-minversion-2.c b/gcc/testsuite/gcc.dg/darwin-minversion-2.c index 8e18d5273a6..46fab671b95 100644 --- a/gcc/testsuite/gcc.dg/darwin-minversion-2.c +++ b/gcc/testsuite/gcc.dg/darwin-minversion-2.c @@ -1,11 +1,11 @@ /* Basic test for -mmacosx-version-min switch on Darwin. */ -/* { dg-options "-mmacosx-version-min=10.1 -mmacosx-version-min=10.3" } */ +/* { dg-options "-mmacosx-version-min=10.1 -mmacosx-version-min=10.5" } */ /* { dg-do run { target *-*-darwin* } } */ int main () { -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1030 +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1050 fail me; #endif return 0; diff --git a/gcc/testsuite/gcc.dg/darwin-minversion-3.c b/gcc/testsuite/gcc.dg/darwin-minversion-3.c index d1795e74a69..a2be54f490a 100644 --- a/gcc/testsuite/gcc.dg/darwin-minversion-3.c +++ b/gcc/testsuite/gcc.dg/darwin-minversion-3.c @@ -1,11 +1,11 @@ /* Test that most minor versions less than 10 work. */ -/* { dg-options "-mmacosx-version-min=10.4.1" } */ +/* { dg-options "-mmacosx-version-min=10.5.8" } */ /* { dg-do compile { target *-*-darwin* } } */ int main () { -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1041 +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1058 fail me; #endif return 0; diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 592fd3a245c..e65c71da3a4 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-27 Iain Sandoe <iain@codesourcery.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/67710 + * config/t-darwin: Default builds to 10.5 codegen. + 2016-11-24 James Greenhalgh <james.greenhalgh@arm.com> * config/aarch64/sfp-machine.h (_FP_NANFRAC_H): Define. diff --git a/libgcc/config/t-darwin b/libgcc/config/t-darwin index a69169fa610..13ca6ed99d3 100644 --- a/libgcc/config/t-darwin +++ b/libgcc/config/t-darwin @@ -1,3 +1,7 @@ +# Set this as a minimum (unless overriden by arch t-files) since it's a +# reasonable lowest common denominator that works for all our archs. +HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=10.5 + crt3.o: $(srcdir)/config/darwin-crt3.c $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $< |