2002-04-12 Richard Henderson <rth@redhat.com>
+ * config.gcc (sparcv9-*-solaris2): Default to 32-bit code.
+ (sparc*-*-solaris): Clean up header files.
+ * configure.in (AS_SPARC64_FLAG): Error out if can't find it
+ and plan on generating 64-bit code.
+ * toplev.c (decode_g_option): Remove LINKER_DOES_NOT_WORK_WITH_DWARF2.
+ * config/sparc/sol2-64.h: Delete and reuse for default 64-bit code.
+ * config/sparc/sol2-sld-64.h: Rename ...
+ * config/sparc/sol2-bi.h: ... here. Remove the bits that checked
+ for AS_SPARC64_FLAG not defined.
+ * config/sparc/sol2-gld-bi.h: New.
+ * config/sparc/sol2-sld.h: Remove.
+ * config/sparc/sol26-sld.h: New.
+ * config/sparc/sol2.h: Tidy comments.
+ * doc/install.texi: Document sparc-solaris configury changes.
+
+2002-04-12 Richard Henderson <rth@redhat.com>
+
* recog.c (offsettable_address_p): Match the logic in adjust_address.
* config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode
thread_file='rtems'
fi
;;
-sparcv9-*-solaris2* | sparc64-*-solaris2*)
- if test x$gnu_ld = xyes
- then
- tm_file="sparc/sol2-sld-64.h sparc/sol2-64.h sparc/sol2-gld.h"
- else
- tm_file=sparc/sol2-sld-64.h
+sparc64-*-solaris2*)
+ tm_file="sparc/biarch64.h sparc/sol2-64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sol2.h sparc/sol2-bi.h"
+ if test x$gnu_ld = xyes; then
+ tm_file="${tm_file} sparc/sol2-gld.h sparc/sol2-gld-bi.h"
fi
xm_defines=POSIX
tmake_file="sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtfm"
esac
thread_file='solaris'
;;
-sparc-*-solaris2*)
- if test x$gnu_ld = xyes
- then
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sol2.h sparc/sol2-gld.h"
- else
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sol2.h sparc/sol2-sld.h"
+sparc-*-solaris2* | sparcv9-*-solaris2*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sol2.h"
+ if test x$gnu_ld = xyes; then
+ tm_file="${tm_file} sparc/sol2-gld.h"
fi
- xm_defines=POSIX
tmake_file="sparc/t-sol2 sparc/t-crtfm"
if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
- extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
case $machine in
- *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) ;;
- *-*-solaris2*)
- if test x$gnu_ld = xyes
- then
- tm_file="sparc/sol2-sld-64.h sparc/sol2-64.h sparc/sol2-gld.h"
- else
- tm_file="sparc/sol2-sld-64.h"
+ sparcv9-*)
+ tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h"
+ if test x$gnu_ld = xyes; then
+ tm_file="${tm_file} sparc/sol2-gld-bi.h"
fi
tmake_file="$tmake_file sparc/t-sol2-64"
;;
+ *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*)
+ if test x$gnu_ld = xno; then
+ tm_file="${tm_file} sparc/sol26-sld.h"
+ fi
esac
+ xm_defines=POSIX
+ extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
case $machine in
*-*-solaris2.[0-4])
float_format=i128
-/* Definitions of target machine for GNU compiler, for 64-bit SPARC
- running Solaris 2 using the GNU linker. */
+/* Definitions of target machine for GNU compiler, for bi-arch SPARC
+ running Solaris 2, defaulting to 64-bit code generation. */
-#ifdef LINKER_DOES_NOT_WORK_WITH_DWARF2
-#undef LINKER_DOES_NOT_WORK_WITH_DWARF2
-#endif
-
-#ifdef AS_SPARC64_FLAG
-
-#ifdef LINK_ARCH_SPEC
-#undef LINK_ARCH_SPEC
-#endif
-
-#define LINK_ARCH_SPEC "\
-%{m32:-m elf32_sparc %(link_arch32)} \
-%{m64:-m elf64_sparc %(link_arch64)} \
-%{!m32:%{!m64:%(link_arch_default)}} \
-"
-
-#endif
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT \
+ (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ + \
+ MASK_STACK_BIAS + MASK_FPU + MASK_LONG_DOUBLE_128)
-/* Definitions of target machine for GNU compiler, for 64-bit SPARC
+/* Definitions of target machine for GNU compiler, for bi-arch SPARC
running Solaris 2 using the system linker. */
-#ifdef AS_SPARC64_FLAG
-#include "sparc/biarch64.h"
-#endif
-
-#include "sparc/sparc.h"
-#include "dbxelf.h"
-#include "elfos.h"
-#include "svr4.h"
-#include "sparc/sysv4.h"
-#include "sparc/sol2.h"
-
-#ifdef AS_SPARC64_FLAG
-
-/* At least up through Solaris 2.6,
- the system linker does not work with DWARF or DWARF2,
- since it does not have working support for relocations
- to unaligned data. */
-
-#define LINKER_DOES_NOT_WORK_WITH_DWARF2
-
-/* A 64 bit v9 compiler with stack-bias */
-
-#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
-#undef TARGET_DEFAULT
-#define TARGET_DEFAULT \
- (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ + \
- MASK_STACK_BIAS + MASK_FPU + MASK_LONG_DOUBLE_128)
-#endif
-
/* The default code model. */
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_MEDANY
%{ansi:/usr/lib/sparcv9/values-Xc.o%s} \
%{!ansi:/usr/lib/sparcv9/values-Xa.o%s}"
-#ifdef SPARC_BI_ARCH
-
#if DEFAULT_ARCH32_P
#define STARTFILE_ARCH_SPEC "\
%{m32:" STARTFILE_SPEC32 "} \
%{!m32:%{!m64:" STARTFILE_SPEC64 "}}"
#endif
-#else /* !SPARC_BI_ARCH */
-
-/* In this case we define MD_STARTFILE_PREFIX to /usr/lib/sparcv9/ */
-#define STARTFILE_ARCH_SPEC STARTFILE_SPEC32
-
-#endif /* !SPARC_BI_ARCH */
-
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{!shared: \
%{!symbolic: \
crti.o%s " STARTFILE_ARCH_SPEC " \
crtbegin.o%s"
-#ifdef SPARC_BI_ARCH
-
#undef CPP_CPU_DEFAULT_SPEC
#define CPP_CPU_DEFAULT_SPEC \
(DEFAULT_ARCH32_P ? "\
#define MULTILIB_DEFAULTS { "m64" }
#endif
-#else /* !SPARC_BI_ARCH */
-
-/*
- * This should be the same as in sol2-sld.h, except with "/sparcv9"
- * appended to the paths and /usr/ccs/lib is no longer necessary
- */
-#undef LINK_SPEC
-#define LINK_SPEC \
- "%{h*} %{v:-V} \
- %{b} %{Wl,*:%*} \
- %{static:-dn -Bstatic} \
- %{shared:-G -dy %{!mimpure-text:-z text}} \
- %{symbolic:-Bsymbolic -G -dy -z text} \
- %{mcmodel=medlow:-M /usr/lib/ld/sparcv9/map.below4G} \
- %{G:-G} \
- %{YP,*} \
- %{R*} \
- %{compat-bsd: \
- %{!YP,*:%{p:-Y P,/usr/ucblib/sparcv9:/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
- %{pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
- %{!p:%{!pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/sparcv9}}} \
- -R /usr/ucblib} \
- %{!compat-bsd: \
- %{!YP,*:%{p:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
- %{pg:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
- %{!p:%{!pg:-Y P,/usr/lib/sparcv9}}}} \
- %{Qy:} %{!Qn:-Qy}"
-
-#undef MD_STARTFILE_PREFIX
-#define MD_STARTFILE_PREFIX "/usr/lib/sparcv9/"
-
-#endif /* ! SPARC_BI_ARCH */
-
-#endif
+/* We use stabs-in-elf in 32-bit mode, because that is what the native
+ toolchain uses. But gdb can't handle truncated 32-bit stabs so we
+ use dwarf2 in 64-bit mode. */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE (TARGET_ARCH32 ? DBX_DEBUG : DWARF2_DEBUG)
--- /dev/null
+/* Definitions of target machine for GNU compiler, for bi-arch SPARC
+ running Solaris 2 using the GNU linker. */
+
+#undef LINK_ARCH_SPEC
+#define LINK_ARCH_SPEC "\
+%{m32:-m elf32_sparc %(link_arch32)} \
+%{m64:-m elf64_sparc %(link_arch64)} \
+%{!m32:%{!m64:%(link_arch_default)}} \
+"
+++ /dev/null
-/* Definitions of target machine for GNU compiler, for SPARC running Solaris 2
- using the system linker. */
-
-/* At least up through Solaris 2.6,
- the system linker does not work with DWARF or DWARF2,
- since it does not have working support for relocations
- to unaligned data. */
-
-#define LINKER_DOES_NOT_WORK_WITH_DWARF2
/* Definitions of target machine for GNU compiler, for SPARC running Solaris 2
- Copyright 1992, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001 Free Software Foundation, Inc.
+ Copyright 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@netcom.com).
Additional changes by David V. Henkel-Wallace (gumby@cygnus.com).
/* However it appears that Solaris 2.0 uses the same reg numbering as
the old BSD-style system did. */
-#undef DBX_REGISTER_NUMBER
/* Same as sparc.h */
+#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(REGNO) \
(TARGET_FLAT && (REGNO) == HARD_FRAME_POINTER_REGNUM ? 31 : REGNO)
-/* We use stabs-in-elf for debugging, because that is what the native
+/* We use stabs-in-elf by default, because that is what the native
toolchain uses. */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
--- /dev/null
+/* Up through Solaris 2.6, the system linker does not work with DWARF
+ or DWARF2, since it does not have working support for relocations
+ to unaligned data. */
+
+#undef DWARF_DEBUGGING_INFO
+#undef DWARF2_DEBUGGING_INFO
fi
- case "$tm_file" in
- *64*)
+ case "$target" in
+ sparcv9-* | sparc64-*)
echo $ac_n "checking for 64 bit support in assembler ($gcc_cv_as)""... $ac_c" 1>&6
echo "configure:7522: checking for 64 bit support in assembler ($gcc_cv_as)" >&5
if eval "test \"`echo '$''{'gcc_cv_as_flags64'+set}'`\" = set"; then
echo "$ac_t""$gcc_cv_as_flags64" 1>&6
if test "x$gcc_cv_as_flags64" = xno; then
-
- tmake_file=`echo " $tmake_file " | sed -e 's, sparc/t-sol2-64 , ,' -e 's,^ ,,' -e 's, $,,'`
- dep_tmake_file=`echo " $dep_tmake_file " | sed -e 's, [^ ]*/config/sparc/t-sol2-64 , ,' -e 's,^ ,,' -e 's, $,,'`
-
+ { echo "configure: error: Assembler does not support 64-bit compilation." 1>&2; exit 1; }
+ exit 1
else
cat >> confdefs.h <<EOF
#define AS_SPARC64_FLAG "$gcc_cv_as_flags64"
if test "x$gcc_cv_as_flags64" != xno; then
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
-echo "configure:7567: checking for assembler offsetable %lo() support" >&5
+echo "configure:7565: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
i[34567]86-*-* | x86_64-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
-echo "configure:7607: checking assembler instructions" >&5
+echo "configure:7605: checking assembler instructions" >&5
gcc_cv_as_instructions=
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
echo "$ac_t""$gcc_cv_as_instructions" 1>&6
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
-echo "configure:7634: checking assembler GOTOFF in data directives" >&5
+echo "configure:7632: checking assembler GOTOFF in data directives" >&5
gcc_cv_as_gotoff_in_data=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
then
esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
-echo "configure:7664: checking assembler dwarf2 debug_line support" >&5
+echo "configure:7662: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
-echo "configure:7720: checking assembler --gdwarf2 support" >&5
+echo "configure:7718: checking assembler --gdwarf2 support" >&5
gcc_cv_as_gdwarf2_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
-echo "configure:7749: checking assembler --gstabs support" >&5
+echo "configure:7747: checking assembler --gstabs support" >&5
gcc_cv_as_gstabs_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
-echo "configure:7777: checking linker PT_GNU_EH_FRAME support" >&5
+echo "configure:7775: checking linker PT_GNU_EH_FRAME support" >&5
gcc_cv_ld_eh_frame_hdr=no
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:7940: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:7938: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
[Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])
fi
- case "$tm_file" in
- *64*)
+ case "$target" in
+ sparcv9-* | sparc64-*)
AC_CACHE_CHECK([for 64 bit support in assembler ($gcc_cv_as)],
gcc_cv_as_flags64, [
if test -n "$gcc_cv_as"; then
fi
])
if test "x$gcc_cv_as_flags64" = xno; then
-changequote(, )
- tmake_file=`echo " $tmake_file " | sed -e 's, sparc/t-sol2-64 , ,' -e 's,^ ,,' -e 's, $,,'`
- dep_tmake_file=`echo " $dep_tmake_file " | sed -e 's, [^ ]*/config/sparc/t-sol2-64 , ,' -e 's,^ ,,' -e 's, $,,'`
-changequote([, ])
+ AC_MSG_ERROR([Assembler does not support 64-bit compilation.])
+ exit 1
else
AC_DEFINE_UNQUOTED(AS_SPARC64_FLAG, "$gcc_cv_as_flags64",
[Define if the assembler supports 64bit sparc.])
that, unlike full 64-bit code, can still run on non-UltraSPARC
machines.
+The target tuple @code{sparc-sun-solaris} will be used for
+configurations in which only 32-bit SPARC binaries may be executed;
+@code{sparcv9-sun-solaris} will be used when either 32-bit or 64-bit
+binaries may be executed, but the compiler will produce 32-bit
+binaries unless the @option{-m64} switch is used; @code{sparc64-sun-solaris}
+should be used when the compiler should produce 64-bit binaries
+by default.
+
+Unless otherwise specified, @command{configure} will select either
+@code{sparc} or @code{sparcv9} based on the output of @command{isalist}.
+It will never select @code{sparc64} by default.
+
@html
</p>
<hr>
if (da_len > 1 && strncmp (arg, "gdb", da_len) == 0)
{
-#if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2)
+#ifdef DWARF2_DEBUGGING_INFO
type = DWARF2_DEBUG;
#else
#ifdef DBX_DEBUGGING_INFO