@@ -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]);
+ }
+ }
}
@@ -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. */
@@ -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)
@@ -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
@@ -3692,6 +3692,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,,
@@ -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;
@@ -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;
@@ -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;
@@ -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 $<