[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
This commit is contained in:
Iain Sandoe 2016-11-27 15:07:22 +00:00 committed by Iain Sandoe
parent 03f82a6a63
commit b410cf1dc0
14 changed files with 150 additions and 11 deletions

View File

@ -1,3 +1,16 @@
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

View File

@ -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

View File

@ -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]);
}
}
}

View File

@ -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. */

View File

@ -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)

View File

@ -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

39
gcc/configure vendored
View File

@ -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

View File

@ -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,,

View File

@ -1,3 +1,12 @@
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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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 $<