driver-sparc.c: New file.
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Mon, 8 Aug 2011 12:08:31 +0000 (12:08 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Mon, 8 Aug 2011 12:08:31 +0000 (12:08 +0000)
gcc:
* config/sparc/driver-sparc.c: New file.
* config/sparc/x-sparc: New file.
* config.host: Use driver-sparc.o, sparc/x-sparc on
sparc*-*-solaris2*.
* config/sparc/sparc.opt (native): New value for enum
processor_type.
* config/sparc/sparc-opts.h (PROCESSOR_NATIVE): Declare.
* config/sparc/sparc.c (sparc_option_override): Abort if
PROCESSOR_NATIVE gets here.
* config/sparc/sol2.h [__sparc__] (host_detect_local_cpu): Declare.
(EXTRA_SPEC_FUNCTIONS, MCPU_MTUNE_NATIVE_SPECS,
DRIVER_SELF_SPECS): Define.
* doc/invoke.texi (SPARC Options, -mcpu): Document native.
(SPARC Options, -mtune): Likewise.
* configure.ac (EXTRA_GCC_LIBS): Check for libkstat.
Substitute result.
* configure: Regenerate.
* Makefile.in (EXTRA_GCC_LIBS): Set.
(xgcc$(exeext)): Add $(EXTRA_GCC_LIBS).
(cpp$(exeext)): Likewise.

gcc/cp:
* Make-lang.in (g++$(exeext)): Add $(EXTRA_GCC_LIBS).

gcc/fortran:
* Make-lang.in (gfortran$(exeext)): Add $(EXTRA_GCC_LIBS).

gcc/go:
* Make-lang.in (gccgo$(exeext)): Add $(EXTRA_GCC_LIBS).

gcc/java:
* Make-lang.in ($(XGCJ)$(exeext)): Add $(EXTRA_GCC_LIBS).

From-SVN: r177559

18 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/config.host
gcc/config/sparc/sol2.h
gcc/config/sparc/sparc-opts.h
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.opt
gcc/configure
gcc/configure.ac
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/doc/invoke.texi
gcc/fortran/ChangeLog
gcc/fortran/Make-lang.in
gcc/go/ChangeLog
gcc/go/Make-lang.in
gcc/java/ChangeLog
gcc/java/Make-lang.in

index 3e0391e26b3cb6af0bede05156c2d9b3a3207a9b..f8f4ea608c0b015a639ee4b656b93ae2133d482b 100644 (file)
@@ -1,3 +1,26 @@
+2011-08-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * config/sparc/driver-sparc.c: New file.
+       * config/sparc/x-sparc: New file.
+       * config.host: Use driver-sparc.o, sparc/x-sparc on
+       sparc*-*-solaris2*.
+       * config/sparc/sparc.opt (native): New value for enum
+       processor_type.
+       * config/sparc/sparc-opts.h (PROCESSOR_NATIVE): Declare.
+       * config/sparc/sparc.c (sparc_option_override): Abort if
+       PROCESSOR_NATIVE gets here.
+       * config/sparc/sol2.h [__sparc__] (host_detect_local_cpu): Declare.
+       (EXTRA_SPEC_FUNCTIONS, MCPU_MTUNE_NATIVE_SPECS,
+       DRIVER_SELF_SPECS): Define.
+       * doc/invoke.texi (SPARC Options, -mcpu): Document native.
+       (SPARC Options, -mtune): Likewise.
+       * configure.ac (EXTRA_GCC_LIBS): Check for libkstat.
+       Substitute result.
+       * configure: Regenerate.
+       * Makefile.in (EXTRA_GCC_LIBS): Set.
+       (xgcc$(exeext)): Add $(EXTRA_GCC_LIBS).
+       (cpp$(exeext)): Likewise.
+
 2011-08-08  Richard Guenther  <rguenther@suse.de>
 
        * tree-vrp.c (extract_range_from_unary_expr_1): New function,
index ed96672aa94311237736a5cebe7936ce13ae485f..368100b0835112c3bacb45fb778bffd7af4194d5 100644 (file)
@@ -714,6 +714,9 @@ EXTRA_OBJS = @extra_objs@
 # the gcc driver.
 EXTRA_GCC_OBJS =@extra_gcc_objs@
 
+# List of extra libraries that should be linked with the gcc driver.
+EXTRA_GCC_LIBS = @EXTRA_GCC_LIBS@
+
 # List of additional header files to install.
 EXTRA_HEADERS =@extra_headers_list@
 
@@ -1808,7 +1811,8 @@ libcommon.a: $(OBJS-libcommon)
 xgcc$(exeext): $(GCC_OBJS) gccspec.o libcommon-target.a $(LIBDEPS) \
        $(EXTRA_GCC_OBJS)
        +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \
-         gccspec.o $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         gccspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # cpp is to cpp0 as gcc is to cc1.
 # The only difference from xgcc is that it's linked with cppspec.o
@@ -1816,7 +1820,8 @@ xgcc$(exeext): $(GCC_OBJS) gccspec.o libcommon-target.a $(LIBDEPS) \
 cpp$(exeext): $(GCC_OBJS) cppspec.o libcommon-target.a $(LIBDEPS) \
        $(EXTRA_GCC_OBJS)
        +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \
-         cppspec.o $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         cppspec.o $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # Dump a specs file to make -B./ read these specs over installed ones.
 $(SPECS): xgcc$(exeext)
index 85009d1b45c606dd9714f0b8335d13c79e6bc028..61a00b57843455d8ff9913d06c001d5209a34b0b 100644 (file)
@@ -157,6 +157,14 @@ case ${host} in
        ;;
     esac
     ;;
+  sparc*-*-solaris2*)
+    case ${target} in
+      sparc*-*-solaris2*)
+       host_extra_gcc_objs="driver-sparc.o"
+       host_xmake_file="${host_xmake_file} sparc/x-sparc"
+       ;;
+    esac
+    ;;
 esac
 
 # Machine-specific settings.
index 64932f967cd3107506b4221d0a8ad1f843df3ed7..86afbbefe52fbb8335040931eabeaf5f9ce12dfc 100644 (file)
@@ -157,6 +157,22 @@ along with GCC; see the file COPYING3.  If not see
 %{!m32:%{!m64:%(cpp_arch_default)}} \
 "
 
+/* -mcpu=native handling only makes sense with compiler running on
+   a SPARC chip.  */
+#if defined(__sparc__)
+extern const char *host_detect_local_cpu (int argc, const char **argv);
+# define EXTRA_SPEC_FUNCTIONS                                          \
+  { "local_cpu_detect", host_detect_local_cpu },
+
+# define MCPU_MTUNE_NATIVE_SPECS                                       \
+   " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}"             \
+   " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+#else
+# define MCPU_MTUNE_NATIVE_SPECS ""
+#endif
+
+#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
+
 #undef CC1_SPEC
 #if DEFAULT_ARCH32_P
 #define CC1_SPEC "\
index d925ed3122fc88a508bef2b70e4843647e82fdd5..aef69b4d3c9698d51337a59dce05d9ff933d0ab4 100644 (file)
@@ -41,7 +41,8 @@ enum processor_type {
   PROCESSOR_ULTRASPARC,
   PROCESSOR_ULTRASPARC3,
   PROCESSOR_NIAGARA,
-  PROCESSOR_NIAGARA2
+  PROCESSOR_NIAGARA2,
+  PROCESSOR_NATIVE
 };
 
 #endif
index 811684473ce78d0d79715be767eee35dfa6d5a4c..d4c64d01d26539ad206dca71e200906a47988ab2 100644 (file)
@@ -911,6 +911,8 @@ sparc_option_override (void)
     case PROCESSOR_NIAGARA2:
       sparc_costs = &niagara2_costs;
       break;
+    case PROCESSOR_NATIVE:
+      gcc_unreachable ();
     };
 
 #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
index d729214d3c49c0bfd9bf2a2974d9bbfd06801ac2..84bf2883c4b754f3adf71622bb1262acc0a4e571 100644 (file)
@@ -100,6 +100,9 @@ Schedule code for given CPU
 Enum
 Name(sparc_processor_type) Type(enum processor_type)
 
+EnumValue
+Enum(sparc_processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
+
 EnumValue
 Enum(sparc_processor_type) String(v7) Value(PROCESSOR_V7)
 
index 88bb116dc1f8ec7d68dbe918ea46eaaded4c6f46..8ffe93ac79ec477e4d68ddb4c0c1e0891d2d39f0 100755 (executable)
@@ -735,6 +735,7 @@ LIBICONV_DEP
 LTLIBICONV
 LIBICONV
 LDEXP_LIB
+EXTRA_GCC_LIBS
 GNAT_LIBEXC
 COLLECT2_LIBS
 CXXCPP
@@ -8744,6 +8745,69 @@ GNAT_LIBEXC="$LIBS"
 LIBS="$save_LIBS"
 
 
+# To support -mcpu=native on Solaris/SPARC, we need libkstat.
+save_LIBS="$LIBS"
+LIBS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kstat_open" >&5
+$as_echo_n "checking for library containing kstat_open... " >&6; }
+if test "${ac_cv_search_kstat_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char kstat_open ();
+int
+main ()
+{
+return kstat_open ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' kstat; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_kstat_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if test "${ac_cv_search_kstat_open+set}" = set; then :
+  break
+fi
+done
+if test "${ac_cv_search_kstat_open+set}" = set; then :
+
+else
+  ac_cv_search_kstat_open=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kstat_open" >&5
+$as_echo "$ac_cv_search_kstat_open" >&6; }
+ac_res=$ac_cv_search_kstat_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+EXTRA_GCC_LIBS="$LIBS"
+LIBS="$save_LIBS"
+
+
 # Some systems put ldexp and frexp in libm instead of libc; assume
 # they're both in the same place.  jcf-dump needs them.
 save_LIBS="$LIBS"
@@ -17763,7 +17827,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17766 "configure"
+#line 17830 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17869,7 +17933,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17872 "configure"
+#line 17936 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
index 81345d6f32876f7733d9249654c127a0c05ceb3f..a897b81943cc31395bd0c0cf427f51802a6ed76c 100644 (file)
@@ -974,6 +974,14 @@ GNAT_LIBEXC="$LIBS"
 LIBS="$save_LIBS"
 AC_SUBST(GNAT_LIBEXC)
 
+# To support -mcpu=native on Solaris/SPARC, we need libkstat.
+save_LIBS="$LIBS"
+LIBS=
+AC_SEARCH_LIBS(kstat_open, kstat)
+EXTRA_GCC_LIBS="$LIBS"
+LIBS="$save_LIBS"
+AC_SUBST(EXTRA_GCC_LIBS)
+
 # Some systems put ldexp and frexp in libm instead of libc; assume
 # they're both in the same place.  jcf-dump needs them.
 save_LIBS="$LIBS"
index 81c1d923e9ba3f7624de17d99b4b1572a7819807..8c74b2ddff89c792e54a727371a8cd7af0a3ef6a 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * Make-lang.in (g++$(exeext)): Add $(EXTRA_GCC_LIBS).
+
 2011-08-05  Jason Merrill  <jason@redhat.com>
 
        PR c++/48993
index 21145b2c88a995b29e66686d23e1dfd760420496..6944ce972a8a8aecc079ad1dff0ffe55d5f63b54 100644 (file)
@@ -63,7 +63,8 @@ g++spec.o: $(srcdir)/cp/g++spec.c $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H) \
 GXX_OBJS = $(GCC_OBJS) g++spec.o
 g++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS)
        +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
-         $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # Create a version of the g++ driver which calls the cross-compiler.
 g++-cross$(exeext): g++$(exeext)
index 6fd78d579513c452c3707ea9e1b6b81bb8253fd9..30c58b229d52b55d25a2eda2953fe7bb846fab81 100644 (file)
@@ -17263,6 +17263,11 @@ for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
 @samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
 
+Native Solaris toolchains also support the value @samp{native},
+which selects the best architecture option for the host processor.
+@option{-mcpu=native} has no effect if GCC does not recognize
+the processor.
+
 Default instruction scheduling parameters are used for values that select
 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
@@ -17327,7 +17332,8 @@ The same values for @option{-mcpu=@var{cpu_type}} can be used for
 that select a particular CPU implementation.  Those are @samp{cypress},
 @samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934},
 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3},
-@samp{niagara}, and @samp{niagara2}.
+@samp{niagara}, and @samp{niagara2}.  With native Solaris toolchains,
+@samp{native} can also be used.
 
 @item -mv8plus
 @itemx -mno-v8plus
index a86afc6728d14cab1beb9afa1fc972cb99ab829e..2ead4fadebbb6949bbefbccf250cd84bfe2a25f0 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * Make-lang.in (gfortran$(exeext)): Add $(EXTRA_GCC_LIBS).
+
 2011-08-07  Janus Weil  <janus@gcc.gnu.org>
            Thomas Koenig  <tkoenig@gcc.gnu.org>
 
index a56a1f0da8e8e64c1ae1ba61927383930761fa18..9f524b3bce9cf499ebb3550293d53e8c92552bdf 100644 (file)
@@ -88,7 +88,8 @@ GFORTRAN_D_OBJS = $(GCC_OBJS) gfortranspec.o
 gfortran$(exeext): $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
        $(LIBDEPS)
        +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
-         $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # Create a version of the gfortran driver which calls the cross-compiler.
 gfortran-cross$(exeext): gfortran$(exeext)
index dcf420e364cb281aa856a59e572168c606dc8a5e..549bc03712f7c2980857aa0f35b646b0629bd51c 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * Make-lang.in (gccgo$(exeext)): Add $(EXTRA_GCC_LIBS).
+
 2011-08-02  Roberto Lublinerman  <rluble@gmail.com>
 
        * Make-lang.in (GO_OBJS): Add go/ast-dump.o.
index 40fa30ceb9809a47a7f9031d0887b228493d4458..1fe43f57ce1b5f6bfc306a668785c80e5ee8528e 100644 (file)
@@ -39,7 +39,8 @@ gospec.o: $(srcdir)/go/gospec.c $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H) \
 GCCGO_OBJS = $(GCC_OBJS) gospec.o
 gccgo$(exeext): $(GCCGO_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS)
        $(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
-         $(GCCGO_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         $(GCCGO_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # Use strict warnings.
 go-warn = $(STRICT_WARN)
index 6f3aee6ee68efdde1d2212df1a7724941eb9606d..21d29e4b26fe9d1e0cbaa72742eb069efbb7c478 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * Make-lang.in ($(XGCJ)$(exeext)): Add $(EXTRA_GCC_LIBS).
+
 2011-07-19  Richard Guenther  <rguenther@suse.de>
 
        * builtins.c (static): Use fold_build_pointer_plus.
index bdd8b18342a21b05a3493f78dc2fc85273173df1..6dd2f09dca8f4d7ae48422fe3668b23909ac309b 100644 (file)
@@ -66,7 +66,8 @@ jvspec.o: $(srcdir)/java/jvspec.c $(SYSTEM_H) coretypes.h $(TM_H) \
 $(XGCJ)$(exeext): $(GCC_OBJS) jvspec.o java/jcf-path.o \
           libcommon-target.a $(LIBDEPS) $(EXTRA_GCC_OBJS)
        +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) \
-         jvspec.o java/jcf-path.o $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBS)
+         jvspec.o java/jcf-path.o $(EXTRA_GCC_OBJS) libcommon-target.a \
+         $(EXTRA_GCC_LIBS) $(LIBS)
 
 # Create a version of the $(XGCJ) driver which calls the cross-compiler.
 $(XGCJ)-cross$(exeext): $(XGCJ)$(exeext)