aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2015-09-24 08:51:39 +0000
committerRainer Orth <ro@gcc.gnu.org>2015-09-24 08:51:39 +0000
commit2d11044217edd9168eafea1c8c60603f87b0e00d (patch)
tree025e93ec3292313d548bc0002efbee95ff405726 /gcc
parentfcb901cdfac9321b0202d800621f06b2aafd5bee (diff)
downloadgcc-2d11044217edd9168eafea1c8c60603f87b0e00d.zip
gcc-2d11044217edd9168eafea1c8c60603f87b0e00d.tar.gz
gcc-2d11044217edd9168eafea1c8c60603f87b0e00d.tar.bz2
Use CRTs provided by Solaris
gcc: * configure.ac (gcc_cv_solaris_crts): New test. * configure. Regenerate. * config.in: Regenerate. * config/sol2.h (STARTFILE_SPEC): Simplify, provide HAVE_SOLARIS_CRTS variant. libgcc: * configure.ac (libgcc_cv_solaris_crts): New test. * configure: Regenerate. * config.in: Regenerate. * config/sol2/crtp.c, config/sol2/crtpg.c: New files. * config/gmon-sol2.c: Rename to ... * config/sol2/gmon.c: ... this. Include auto-target.h. (internal_mcount): Wrap setup handling in !HAVE_SOLARIS_CRTS. * config/t-sol2: Rename to ... * config/sol2/t-sol2: ... this. (gmon.o): Reflect renaming. (crtp.o, crtpg.o): New rules. * config.host (*-*-solaris2*): Reflect renaming. Use system CRTs if present. Remove default CRT case. From-SVN: r228077
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config.in6
-rw-r--r--gcc/config/sol2.h22
-rwxr-xr-xgcc/configure38
-rw-r--r--gcc/configure.ac31
5 files changed, 99 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e3120f3..e549506 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-09-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.ac (gcc_cv_solaris_crts): New test.
+ * configure. Regenerate.
+ * config.in: Regenerate.
+ * config/sol2.h (STARTFILE_SPEC): Simplify, provide
+ HAVE_SOLARIS_CRTS variant.
+
2015-09-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* tree-inline.h (count_insns_seq): Delete prototype.
diff --git a/gcc/config.in b/gcc/config.in
index c5c1be4..a1987cc 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -1631,6 +1631,12 @@
#endif
+/* Define if the system-provided CRTs are present on Solaris. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_SOLARIS_CRTS
+#endif
+
+
/* Define to 1 if you have the <stddef.h> header file. */
#ifndef USED_FOR_TARGET
#undef HAVE_STDDEF_H
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
index adf6f3b..d31a251 100644
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -156,14 +156,24 @@ along with GCC; see the file COPYING3. If not see
/* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */
#undef STARTFILE_SPEC
-#define STARTFILE_SPEC "%{!shared: \
- %{!symbolic: \
- %{p:mcrt1.o%s} \
- %{!p: \
- %{pg:gcrt1.o%s gmon.o%s} \
- %{!pg:crt1.o%s}}}} \
+#ifdef HAVE_SOLARIS_CRTS
+/* Since Solaris 11.x and Solaris 12, the OS delivers crt1.o, crti.o, and
+ crtn.o, with a hook for compiler-dependent stuff like profile handling. */
+#define STARTFILE_SPEC "%{!shared:%{!symbolic: \
+ crt1.o%s \
+ %{p:%e-p is not supported; \
+ pg:crtpg.o%s gmon.o%s; \
+ :crtp.o%s}}} \
crti.o%s %(startfile_arch) \
crtbegin.o%s"
+#else
+#define STARTFILE_SPEC "%{!shared:%{!symbolic: \
+ %{p:mcrt1.o%s; \
+ pg:gcrt1.o%s gmon.o%s; \
+ :crt1.o%s}}} \
+ crti.o%s %(startfile_arch) \
+ crtbegin.o%s"
+#endif
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
diff --git a/gcc/configure b/gcc/configure
index 7493c80..a32bb64 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -28025,6 +28025,44 @@ $as_echo "#define HAVE_LD_SYSROOT 1" >>confdefs.h
fi
+case $target in
+*-*-solaris2*)
+ # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking system-provided CRTs on Solaris" >&5
+$as_echo_n "checking system-provided CRTs on Solaris... " >&6; }
+if test "${gcc_cv_solaris_crts+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ gcc_cv_solaris_crts=no
+ if test x$host != x$target; then
+ if test "x$with_sysroot" = xyes; then
+ target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
+ else
+ target_sysroot="${with_sysroot}"
+ fi
+ fi
+ target_libdir="$target_sysroot/usr/lib"
+ # At the time they were added, gcrt1.o became a symlink for backwards
+ # compatibility on x86, while crt1.o was added on sparc, so check for that.
+ case $target in
+ i?86-*-solaris2* | x86_64-*-solaris2*)
+ if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
+ ;;
+ sparc*-*-solaris2*)
+ if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
+ ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_solaris_crts" >&5
+$as_echo "$gcc_cv_solaris_crts" >&6; }
+ ;;
+esac
+if test x$gcc_cv_solaris_crts = xyes; then
+
+$as_echo "#define HAVE_SOLARIS_CRTS 1" >>confdefs.h
+
+fi
+
# Test for stack protector support in target C library.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __stack_chk_fail in target C library" >&5
$as_echo_n "checking __stack_chk_fail in target C library... " >&6; }
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 9d1f6f1..4f8a44e 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5281,6 +5281,37 @@ if test x"$gcc_cv_ld_sysroot" = xyes; then
[Define if your linker supports --sysroot.])
fi
+case $target in
+*-*-solaris2*)
+ # Check for system-provided CRTs on Solaris 11.x and Solaris 12.
+ AC_CACHE_CHECK([system-provided CRTs on Solaris],
+ gcc_cv_solaris_crts,
+ [gcc_cv_solaris_crts=no
+ if test x$host != x$target; then
+ if test "x$with_sysroot" = xyes; then
+ target_sysroot="${test_exec_prefix}/${target_noncanonical}/sys-root"
+ else
+ target_sysroot="${with_sysroot}"
+ fi
+ fi
+ target_libdir="$target_sysroot/usr/lib"
+ # At the time they were added, gcrt1.o became a symlink for backwards
+ # compatibility on x86, while crt1.o was added on sparc, so check for that.
+ case $target in
+ i?86-*-solaris2* | x86_64-*-solaris2*)
+ if test -h "$target_libdir/gcrt1.o"; then gcc_cv_solaris_crts=yes; fi
+ ;;
+ sparc*-*-solaris2*)
+ if test -f "$target_libdir/crt1.o"; then gcc_cv_solaris_crts=yes; fi
+ ;;
+ esac])
+ ;;
+esac
+if test x$gcc_cv_solaris_crts = xyes; then
+ AC_DEFINE(HAVE_SOLARIS_CRTS, 1,
+ [Define if the system-provided CRTs are present on Solaris.])
+fi
+
# Test for stack protector support in target C library.
AC_CACHE_CHECK(__stack_chk_fail in target C library,
gcc_cv_libc_provides_ssp,