summaryrefslogtreecommitdiff
path: root/patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch')
-rw-r--r--patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch1761
1 files changed, 1761 insertions, 0 deletions
diff --git a/patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch b/patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch
new file mode 100644
index 0000000..4393078
--- /dev/null
+++ b/patches/gcc/3.2.3/gcc-20030210-sh-linux-1.patch
@@ -0,0 +1,1761 @@
+diff -ruN gcc-20030210.orig/boehm-gc/configure gcc-20030210/boehm-gc/configure
+--- gcc-20030210.orig/boehm-gc/configure Fri Jan 31 19:17:00 2003
++++ gcc-20030210/boehm-gc/configure Sat Feb 22 01:40:14 2003
+@@ -1922,7 +1922,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+diff -ruN gcc-20030210.orig/config-ml.in gcc-20030210/config-ml.in
+--- gcc-20030210.orig/config-ml.in Fri Jan 31 19:16:59 2003
++++ gcc-20030210/config-ml.in Sat Feb 22 01:40:14 2003
+@@ -545,6 +545,7 @@
+ if [ -d ../$${dir}/$${lib} ]; then \
+ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+ if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
++ DESTDIR="$(DESTDIR)" \
+ CFLAGS="$(CFLAGS) $${flags}" \
+ prefix="$(prefix)" \
+ exec_prefix="$(exec_prefix)" \
+diff -ruN gcc-20030210.orig/debian/edit-specs.in gcc-20030210/debian/edit-specs.in
+--- gcc-20030210.orig/debian/edit-specs.in Thu Jan 1 09:00:00 1970
++++ gcc-20030210/debian/edit-specs.in Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,45 @@
++/^*asm:$/ {
++n
++c\
++@AS_ENDIAN_FLAG@ %{mrelax:-relax}
++}
++/^*cpp:$/ {
++n
++c\
++%(cpp_default_cpu_spec) %(subtarget_cpp_spec) %(subtarget_cpp_ptr_spec) %(subtarget_cpp_endian_spec)
++}
++/^*cc1:$/ {
++n
++c\
++-musermode @CC1_CPU_ENDIAN_FLAGS@ %{profile:-p}
++}
++/^*link:$/ {
++n
++c\
++%{!static:--eh-frame-hdr} @LINKER_CPU_ENDIAN_FLAGS@ @LINKER_RPATH_LINK_FLAG@ %{mrelax:-relax} %{shared:-shared} %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}
++}
++/^*multilib:$/ {
++n
++c\
++. ;
++}
++/^*multilib_matches:$/ {
++n
++c\
++
++}
++/^*multilib_options:$/ {
++n
++c\
++
++}
++/^*subtarget_cpp_endian_spec:$/ {
++n
++c\
++@CPP_ENDIAN_DEF@
++}
++/^*cpp_default_cpu_spec:$/ {
++n
++c\
++@CPP_CPU_DEFS@
++}
+diff -ruN gcc-20030210.orig/debian/install-CPU-linux gcc-20030210/debian/install-CPU-linux
+--- gcc-20030210.orig/debian/install-CPU-linux Thu Jan 1 09:00:00 1970
++++ gcc-20030210/debian/install-CPU-linux Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,111 @@
++#! /bin/sh
++
++VERSION=$1; shift
++CPU=$1
++
++# literally (binary-ly) same
++PROGS_C="cpp gcc"
++PROGS_ADDITIONAL="c++ g++ g77 gcj"
++
++DRIVERS_C="cc1 cpp0 tradcpp0"
++DRIVERS_ADDITIONAL="cc1obj cc1plus collect2 f771 jc1 jvgenmain"
++if [ -z "$STEP1_COMPILER_BUILD" ]; then
++ PROGS="$PROGS_C $PROGS_ADDITIONAL"
++ DRIVERS="$DRIVERS_C $DRIVERSADDITIONAL"
++ INITIAL=""
++else
++ PROGS=$PROGS_C
++ DRIVERS=$DRIVERS_C
++ INITIAL="-initial"
++fi
++
++OBJS="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++LIBS_C="libgcc.a"
++LIBS_1="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.3 libstdc++.so.3.0.2"
++LIBS_2="libobjc.a libstdc++.a libsupc++.a"
++INCLUDE="include"
++
++cd debian/gcc-sh-linux-others${INITIAL} || exit 1
++
++# Make directories.
++mkdir -p usr/bin usr/share usr/share/man usr/share/man/man1 usr/lib \
++ usr/lib/gcc-lib usr/lib/gcc-lib/${CPU}-linux \
++ usr/lib/gcc-lib/${CPU}-linux/${VERSION} \
++ usr/${CPU}-linux usr/${CPU}-linux/lib
++
++# Make symbolic links for include dir.
++(cd usr/${CPU}-linux; ln -s ../sh-linux/include .)
++
++# Make symbolic links for executables.
++(cd usr/bin;
++ for p in ${PROGS}; do
++ ln -s shCPU-linux-GCC ${CPU}-linux-$p
++ done)
++
++case "${CPU}" in
++ sh3)
++ MULTILIBDIR=
++ AS_ENDIAN_FLAG="-little"
++ CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
++ CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
++ CC1_CPU_ENDIAN_FLAGS="-ml -m3"
++ LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh3"
++ LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3-linux/lib"
++ ;;
++ sh3eb)
++ MULTILIBDIR=/mb
++ AS_ENDIAN_FLAG="-big"
++ CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
++ CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
++ CC1_CPU_ENDIAN_FLAGS="-mb -m3"
++ LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh3"
++ LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3eb-linux/lib"
++ ;;
++ sh4)
++ MULTILIBDIR=/m4
++ AS_ENDIAN_FLAG="-little"
++ CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
++ CPP_CPU_DEFS="-D__SH4__"
++ CC1_CPU_ENDIAN_FLAGS="-ml -m4"
++ LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh4"
++ LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4-linux/lib"
++ ;;
++ sh4eb)
++ MULTILIBDIR=/mb/m4
++ AS_ENDIAN_FLAG="-big"
++ CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
++ CPP_CPU_DEFS="-D__SH4__"
++ CC1_CPU_ENDIAN_FLAGS="-mb -m4"
++ LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh4"
++ LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4eb-linux/lib"
++ ;;
++esac
++
++# Make symbolic links for GCC drivers, objects, libraries, and include dir.
++(cd usr/lib/gcc-lib/${CPU}-linux/${VERSION};
++ for f in ${DRIVERS} ${INCLUDE}; do
++ ln -s ../../sh-linux/${VERSION}/$f $f;
++ done
++ for f in ${OBJS} ${LIBS_C}; do
++ ln -s ../../sh-linux/${VERSION}${MULTILIBDIR}/$f $f;
++ done)
++
++if [ -z "$STEP1_COMPILER_BUILD" ]; then
++ for f in ${LIBS_1} ${LIBS_2}; do
++ mv ../gcc-sh-linux/usr/sh-linux/lib${MULTILIBDIR}/$f usr/${CPU}-linux/lib/;
++ done
++fi
++
++sed -e "s+@AS_ENDIAN_FLAG@+${AS_ENDIAN_FLAG}+" \
++ -e "s+@CPP_ENDIAN_DEF@+${CPP_ENDIAN_DEF}+" \
++ -e "s+@CPP_CPU_DEFS@+${CPP_CPU_DEFS}+" \
++ -e "s+@CC1_CPU_ENDIAN_FLAGS@+${CC1_CPU_ENDIAN_FLAGS}+" \
++ -e "s+@LINKER_CPU_ENDIAN_FLAGS@+${LINKER_CPU_ENDIAN_FLAGS}+" \
++ -e "s+@LINKER_RPATH_LINK_FLAG@+${LINKER_RPATH_LINK_FLAG}+" \
++ ../edit-specs.in >../edit-specs-${CPU}.sed
++
++sed -f ../edit-specs-${CPU}.sed \
++ ../gcc-sh-linux${INITIAL}/usr/lib/gcc-lib/sh-linux/${VERSION}/specs \
++ > usr/lib/gcc-lib/${CPU}-linux/${VERSION}/specs
++
++exit 0
+diff -ruN gcc-20030210.orig/debian/multilib-symlink gcc-20030210/debian/multilib-symlink
+--- gcc-20030210.orig/debian/multilib-symlink Thu Jan 1 09:00:00 1970
++++ gcc-20030210/debian/multilib-symlink Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,10 @@
++#! /bin/sh
++
++cd /usr/sh-linux/lib
++ln -s ../../sh3-linux/lib/{*.a,*.so*,*.o} .
++cd m4
++ln -s ../../../sh4-linux/lib/{*.a,*.so*,*.o} .
++cd ../mb
++ln -s ../../../sh3eb-linux/lib/{*.a,*.so*,*.o} .
++cd m4
++ln -s ../../../../sh4eb-linux/lib/{*.a,*.so*,*.o} .
+diff -ruN gcc-20030210.orig/debian/shCPU-linux-GCC gcc-20030210/debian/shCPU-linux-GCC
+--- gcc-20030210.orig/debian/shCPU-linux-GCC Thu Jan 1 09:00:00 1970
++++ gcc-20030210/debian/shCPU-linux-GCC Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,59 @@
++#! /bin/bash
++
++BASENAME=${0##*/}
++PROG=${BASENAME##*-}
++CPU=${BASENAME%%-*}
++
++if [ "$PROG" = gcc ]; then
++ if [ "$1" = "-b" -a "$2" = "i386-linux" ]; then
++ shift 2
++ exec /usr/bin/gcc "$@"
++ elif [ "$1" = "-print-multi-lib" -o "$1" = "--print-multi-lib" ]; then
++ echo ".;"
++ exit 0
++ elif [ "$1" = "-print-multi-os-directory" -o "$1" = "--print-multi-os-directory" ]; then
++ echo "."
++ exit 0
++ elif [ "$1" = "-dumpspecs" ]; then
++ cat /usr/lib/gcc-lib/${CPU}-linux/@@VERSION@@/specs
++ exit 0
++ fi
++fi
++
++case "${CPU}" in
++ sh3)
++ ARCH=m3
++ DEFINES="-D__sh3__ -D__SH3__ -D__LITTLE_ENDIAN__"
++ ENDIAN=ml
++ ;;
++ sh3eb)
++ ARCH=m3
++ DEFINES="-D__sh3__ -D__SH3__ -D__BIG_ENDIAN__"
++ ENDIAN=mb
++ ;;
++ sh4)
++ ARCH=m4
++ DEFINES="-D__SH4__ -D__LITTLE_ENDIAN__"
++ ENDIAN=ml
++ ;;
++ sh4eb)
++ ARCH=m4
++ DEFINES="-D__SH4__ -D__BIG_ENDIAN__"
++ ENDIAN=mb
++ ;;
++esac
++
++# Prepend the appropriate options
++# If user specifies some options, it will be overridden
++
++case "${PROG}" in
++ cpp)
++ exec sh-linux-${PROG} $DEFINES "$@"
++ ;;
++ c++|g++|g77|gcc|gcj)
++ exec sh-linux-${PROG} -$ARCH -$ENDIAN "$@"
++ ;;
++esac
++
++echo "Something wrong..."
++exit 1
+diff -ruN gcc-20030210.orig/gcc/config/sh/elf.h gcc-20030210/gcc/config/sh/elf.h
+--- gcc-20030210.orig/gcc/config/sh/elf.h Fri Feb 22 01:42:28 2002
++++ gcc-20030210/gcc/config/sh/elf.h Sat Feb 22 01:40:14 2003
+@@ -170,3 +170,7 @@
+ #undef ENDFILE_SPEC
+ #define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
++
++/* ASM_OUTPUT_CASE_LABEL is defined in elfos.h. With it,
++ redundant .align will be generated. */
++#undef ASM_OUTPUT_CASE_LABEL
+diff -ruN gcc-20030210.orig/gcc/config/sh/lib1funcs.asm gcc-20030210/gcc/config/sh/lib1funcs.asm
+--- gcc-20030210.orig/gcc/config/sh/lib1funcs.asm Fri Feb 22 01:42:28 2002
++++ gcc-20030210/gcc/config/sh/lib1funcs.asm Sat Feb 22 01:40:14 2003
+@@ -39,8 +39,13 @@
+
+ #ifdef __ELF__
+ #define LOCAL(X) .L_##X
++#define FUNC(X) .type X,@function; .hidden X
++#define _ENDFUNC(X) .Lfe_##X: .size X,.Lfe_##X-X
++#define ENDFUNC(X) _ENDFUNC(X)
+ #else
+ #define LOCAL(X) L_##X
++#define FUNC(X)
++#define ENDFUNC(X)
+ #endif
+
+ #ifdef __linux__
+@@ -91,6 +96,40 @@
+ .global GLOBAL(ashiftrt_r4_31)
+ .global GLOBAL(ashiftrt_r4_32)
+
++ FUNC(GLOBAL(ashiftrt_r4_0))
++ FUNC(GLOBAL(ashiftrt_r4_1))
++ FUNC(GLOBAL(ashiftrt_r4_2))
++ FUNC(GLOBAL(ashiftrt_r4_3))
++ FUNC(GLOBAL(ashiftrt_r4_4))
++ FUNC(GLOBAL(ashiftrt_r4_5))
++ FUNC(GLOBAL(ashiftrt_r4_6))
++ FUNC(GLOBAL(ashiftrt_r4_7))
++ FUNC(GLOBAL(ashiftrt_r4_8))
++ FUNC(GLOBAL(ashiftrt_r4_9))
++ FUNC(GLOBAL(ashiftrt_r4_10))
++ FUNC(GLOBAL(ashiftrt_r4_11))
++ FUNC(GLOBAL(ashiftrt_r4_12))
++ FUNC(GLOBAL(ashiftrt_r4_13))
++ FUNC(GLOBAL(ashiftrt_r4_14))
++ FUNC(GLOBAL(ashiftrt_r4_15))
++ FUNC(GLOBAL(ashiftrt_r4_16))
++ FUNC(GLOBAL(ashiftrt_r4_17))
++ FUNC(GLOBAL(ashiftrt_r4_18))
++ FUNC(GLOBAL(ashiftrt_r4_19))
++ FUNC(GLOBAL(ashiftrt_r4_20))
++ FUNC(GLOBAL(ashiftrt_r4_21))
++ FUNC(GLOBAL(ashiftrt_r4_22))
++ FUNC(GLOBAL(ashiftrt_r4_23))
++ FUNC(GLOBAL(ashiftrt_r4_24))
++ FUNC(GLOBAL(ashiftrt_r4_25))
++ FUNC(GLOBAL(ashiftrt_r4_26))
++ FUNC(GLOBAL(ashiftrt_r4_27))
++ FUNC(GLOBAL(ashiftrt_r4_28))
++ FUNC(GLOBAL(ashiftrt_r4_29))
++ FUNC(GLOBAL(ashiftrt_r4_30))
++ FUNC(GLOBAL(ashiftrt_r4_31))
++ FUNC(GLOBAL(ashiftrt_r4_32))
++
+ .align 1
+ GLOBAL(ashiftrt_r4_32):
+ GLOBAL(ashiftrt_r4_31):
+@@ -170,6 +209,41 @@
+ GLOBAL(ashiftrt_r4_0):
+ rts
+ nop
++
++ ENDFUNC(GLOBAL(ashiftrt_r4_0))
++ ENDFUNC(GLOBAL(ashiftrt_r4_1))
++ ENDFUNC(GLOBAL(ashiftrt_r4_2))
++ ENDFUNC(GLOBAL(ashiftrt_r4_3))
++ ENDFUNC(GLOBAL(ashiftrt_r4_4))
++ ENDFUNC(GLOBAL(ashiftrt_r4_5))
++ ENDFUNC(GLOBAL(ashiftrt_r4_6))
++ ENDFUNC(GLOBAL(ashiftrt_r4_7))
++ ENDFUNC(GLOBAL(ashiftrt_r4_8))
++ ENDFUNC(GLOBAL(ashiftrt_r4_9))
++ ENDFUNC(GLOBAL(ashiftrt_r4_10))
++ ENDFUNC(GLOBAL(ashiftrt_r4_11))
++ ENDFUNC(GLOBAL(ashiftrt_r4_12))
++ ENDFUNC(GLOBAL(ashiftrt_r4_13))
++ ENDFUNC(GLOBAL(ashiftrt_r4_14))
++ ENDFUNC(GLOBAL(ashiftrt_r4_15))
++ ENDFUNC(GLOBAL(ashiftrt_r4_16))
++ ENDFUNC(GLOBAL(ashiftrt_r4_17))
++ ENDFUNC(GLOBAL(ashiftrt_r4_18))
++ ENDFUNC(GLOBAL(ashiftrt_r4_19))
++ ENDFUNC(GLOBAL(ashiftrt_r4_20))
++ ENDFUNC(GLOBAL(ashiftrt_r4_21))
++ ENDFUNC(GLOBAL(ashiftrt_r4_22))
++ ENDFUNC(GLOBAL(ashiftrt_r4_23))
++ ENDFUNC(GLOBAL(ashiftrt_r4_24))
++ ENDFUNC(GLOBAL(ashiftrt_r4_25))
++ ENDFUNC(GLOBAL(ashiftrt_r4_26))
++ ENDFUNC(GLOBAL(ashiftrt_r4_27))
++ ENDFUNC(GLOBAL(ashiftrt_r4_28))
++ ENDFUNC(GLOBAL(ashiftrt_r4_29))
++ ENDFUNC(GLOBAL(ashiftrt_r4_30))
++ ENDFUNC(GLOBAL(ashiftrt_r4_31))
++ ENDFUNC(GLOBAL(ashiftrt_r4_32))
++
+ #endif
+
+ #ifdef L_ashiftrt_n
+@@ -192,6 +266,7 @@
+ !
+
+ .global GLOBAL(ashrsi3)
++ FUNC(GLOBAL(ashrsi3))
+ .align 2
+ GLOBAL(ashrsi3):
+ mov #31,r0
+@@ -319,6 +394,8 @@
+ rts
+ nop
+
++ ENDFUNC(GLOBAL(ashrsi3))
++
+ #endif
+
+ #ifdef L_ashiftlt
+@@ -340,6 +417,7 @@
+ ! (none)
+ !
+ .global GLOBAL(ashlsi3)
++ FUNC(GLOBAL(ashlsi3))
+ .align 2
+ GLOBAL(ashlsi3):
+ mov #31,r0
+@@ -476,6 +554,8 @@
+ rts
+ nop
+
++ ENDFUNC(GLOBAL(ashlsi3))
++
+ #endif
+
+ #ifdef L_lshiftrt
+@@ -497,6 +577,7 @@
+ ! (none)
+ !
+ .global GLOBAL(lshrsi3)
++ FUNC(GLOBAL(lshrsi3))
+ .align 2
+ GLOBAL(lshrsi3):
+ mov #31,r0
+@@ -633,6 +714,8 @@
+ rts
+ nop
+
++ ENDFUNC(GLOBAL(lshrsi3))
++
+ #endif
+
+ #ifdef L_movstr
+@@ -649,76 +732,113 @@
+ add #64,r4
+ .align 4
+ .global GLOBAL(movstrSI64)
++ FUNC(GLOBAL(movstrSI64))
+ GLOBAL(movstrSI64):
+ mov.l @(60,r5),r0
+ mov.l r0,@(60,r4)
+ .global GLOBAL(movstrSI60)
++ FUNC(GLOBAL(movstrSI60))
+ GLOBAL(movstrSI60):
+ mov.l @(56,r5),r0
+ mov.l r0,@(56,r4)
+ .global GLOBAL(movstrSI56)
++ FUNC(GLOBAL(movstrSI56))
+ GLOBAL(movstrSI56):
+ mov.l @(52,r5),r0
+ mov.l r0,@(52,r4)
+ .global GLOBAL(movstrSI52)
++ FUNC(GLOBAL(movstrSI52))
+ GLOBAL(movstrSI52):
+ mov.l @(48,r5),r0
+ mov.l r0,@(48,r4)
+ .global GLOBAL(movstrSI48)
++ FUNC(GLOBAL(movstrSI48))
+ GLOBAL(movstrSI48):
+ mov.l @(44,r5),r0
+ mov.l r0,@(44,r4)
+ .global GLOBAL(movstrSI44)
++ FUNC(GLOBAL(movstrSI44))
+ GLOBAL(movstrSI44):
+ mov.l @(40,r5),r0
+ mov.l r0,@(40,r4)
+ .global GLOBAL(movstrSI40)
++ FUNC(GLOBAL(movstrSI40))
+ GLOBAL(movstrSI40):
+ mov.l @(36,r5),r0
+ mov.l r0,@(36,r4)
+ .global GLOBAL(movstrSI36)
++ FUNC(GLOBAL(movstrSI36))
+ GLOBAL(movstrSI36):
+ mov.l @(32,r5),r0
+ mov.l r0,@(32,r4)
+ .global GLOBAL(movstrSI32)
++ FUNC(GLOBAL(movstrSI32))
+ GLOBAL(movstrSI32):
+ mov.l @(28,r5),r0
+ mov.l r0,@(28,r4)
+ .global GLOBAL(movstrSI28)
++ FUNC(GLOBAL(movstrSI28))
+ GLOBAL(movstrSI28):
+ mov.l @(24,r5),r0
+ mov.l r0,@(24,r4)
+ .global GLOBAL(movstrSI24)
++ FUNC(GLOBAL(movstrSI24))
+ GLOBAL(movstrSI24):
+ mov.l @(20,r5),r0
+ mov.l r0,@(20,r4)
+ .global GLOBAL(movstrSI20)
++ FUNC(GLOBAL(movstrSI20))
+ GLOBAL(movstrSI20):
+ mov.l @(16,r5),r0
+ mov.l r0,@(16,r4)
+ .global GLOBAL(movstrSI16)
++ FUNC(GLOBAL(movstrSI16))
+ GLOBAL(movstrSI16):
+ mov.l @(12,r5),r0
+ mov.l r0,@(12,r4)
+ .global GLOBAL(movstrSI12)
++ FUNC(GLOBAL(movstrSI12))
+ GLOBAL(movstrSI12):
+ mov.l @(8,r5),r0
+ mov.l r0,@(8,r4)
+ .global GLOBAL(movstrSI8)
++ FUNC(GLOBAL(movstrSI8))
+ GLOBAL(movstrSI8):
+ mov.l @(4,r5),r0
+ mov.l r0,@(4,r4)
+ .global GLOBAL(movstrSI4)
++ FUNC(GLOBAL(movstrSI4))
+ GLOBAL(movstrSI4):
+ mov.l @(0,r5),r0
+ mov.l r0,@(0,r4)
++ .global GLOBAL(movstrSI0)
++ FUNC(GLOBAL(movstrSI0))
+ GLOBAL(movstrSI0):
+ rts
+ nop
+
++ ENDFUNC(GLOBAL(movstrSI64))
++ ENDFUNC(GLOBAL(movstrSI60))
++ ENDFUNC(GLOBAL(movstrSI56))
++ ENDFUNC(GLOBAL(movstrSI52))
++ ENDFUNC(GLOBAL(movstrSI48))
++ ENDFUNC(GLOBAL(movstrSI44))
++ ENDFUNC(GLOBAL(movstrSI40))
++ ENDFUNC(GLOBAL(movstrSI36))
++ ENDFUNC(GLOBAL(movstrSI32))
++ ENDFUNC(GLOBAL(movstrSI28))
++ ENDFUNC(GLOBAL(movstrSI24))
++ ENDFUNC(GLOBAL(movstrSI20))
++ ENDFUNC(GLOBAL(movstrSI16))
++ ENDFUNC(GLOBAL(movstrSI12))
++ ENDFUNC(GLOBAL(movstrSI8))
++ ENDFUNC(GLOBAL(movstrSI4))
++ ENDFUNC(GLOBAL(movstrSI0))
++
+ .align 4
+
+ .global GLOBAL(movstr)
++ FUNC(GLOBAL(movstr))
+ GLOBAL(movstr):
+ mov.l @(60,r5),r0
+ mov.l r0,@(60,r4)
+@@ -775,6 +895,8 @@
+ add #64,r5
+ bra GLOBAL(movstr)
+ add #64,r4
++
++ FUNC(GLOBAL(movstr))
+ #endif
+
+ #ifdef L_movstr_i4
+@@ -783,6 +905,10 @@
+ .global GLOBAL(movstr_i4_odd)
+ .global GLOBAL(movstrSI12_i4)
+
++ FUNC(GLOBAL(movstr_i4_even))
++ FUNC(GLOBAL(movstr_i4_odd))
++ FUNC(GLOBAL(movstrSI12_i4))
++
+ .p2align 5
+ L_movstr_2mod4_end:
+ mov.l r0,@(16,r4)
+@@ -791,6 +917,11 @@
+
+ .p2align 2
+
++GLOBAL(movstr_i4_even):
++ mov.l @r5+,r0
++ bra L_movstr_start_even
++ mov.l @r5+,r1
++
+ GLOBAL(movstr_i4_odd):
+ mov.l @r5+,r1
+ add #-4,r4
+@@ -817,10 +948,8 @@
+ rts
+ mov.l r3,@(12,r4)
+
+-GLOBAL(movstr_i4_even):
+- mov.l @r5+,r0
+- bra L_movstr_start_even
+- mov.l @r5+,r1
++ ENDFUNC(GLOBAL(movstr_i4_even))
++ ENDFUNC(GLOBAL(movstr_i4_odd))
+
+ .p2align 4
+ GLOBAL(movstrSI12_i4):
+@@ -831,12 +960,16 @@
+ mov.l r1,@(4,r4)
+ rts
+ mov.l r2,@(8,r4)
++
++ ENDFUNC(GLOBAL(movstrSI12_i4))
++
+ #endif
+
+ #ifdef L_mulsi3
+
+
+ .global GLOBAL(mulsi3)
++ FUNC(GLOBAL(mulsi3))
+
+ ! r4 = aabb
+ ! r5 = ccdd
+@@ -869,7 +1002,7 @@
+ rts
+ add r2,r0
+
+-
++ FUNC(GLOBAL(mulsi3))
+ #endif
+ #endif /* ! __SH5__ */
+ #ifdef L_sdivsi3_i4
+@@ -879,6 +1012,7 @@
+ !! args in r4 and r5, result in fpul, clobber dr0, dr2
+
+ .global GLOBAL(sdivsi3_i4)
++ FUNC(GLOBAL(sdivsi3_i4))
+ GLOBAL(sdivsi3_i4):
+ lds r4,fpul
+ float fpul,dr0
+@@ -888,6 +1022,8 @@
+ rts
+ ftrc dr0,fpul
+
++ ENDFUNC(GLOBAL(sdivsi3_i4))
++
+ #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
+ !! args in r4 and r5, result in fpul, clobber r2, dr0, dr2
+
+@@ -896,6 +1032,7 @@
+ .mode SHcompact
+ #endif
+ .global GLOBAL(sdivsi3_i4)
++ FUNC(GLOBAL(sdivsi3_i4))
+ GLOBAL(sdivsi3_i4):
+ sts.l fpscr,@-r15
+ mov #8,r2
+@@ -910,6 +1047,8 @@
+ rts
+ lds.l @r15+,fpscr
+
++ ENDFUNC(GLOBAL(sdivsi3_i4))
++
+ #endif /* ! __SH5__ || __SH5__ == 32 */
+ #endif /* ! __SH4__ */
+ #endif
+@@ -924,9 +1063,10 @@
+ !!
+ !!
+
+-!! args in r4 and r5, result in r0 clobber r1,r2,r3
++!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit
+
+ .global GLOBAL(sdivsi3)
++ FUNC(GLOBAL(sdivsi3))
+ #if __SHMEDIA__
+ #if __SH5__ == 32
+ .section .text..SHmedia32,"ax"
+@@ -1076,6 +1216,7 @@
+ div0: rts
+ mov #0,r0
+
++ ENDFUNC(GLOBAL(sdivsi3))
+ #endif /* ! __SHMEDIA__ */
+ #endif /* ! __SH4__ */
+ #endif
+@@ -1084,9 +1225,11 @@
+ .title "SH DIVIDE"
+ !! 4 byte integer Divide code for the Hitachi SH
+ #ifdef __SH4__
+-!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
++!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4,
++!! and t bit
+
+ .global GLOBAL(udivsi3_i4)
++ FUNC(GLOBAL(udivsi3_i4))
+ GLOBAL(udivsi3_i4):
+ mov #1,r1
+ cmp/hi r1,r5
+@@ -1127,6 +1270,8 @@
+ L1:
+ .double 2147483648
+
++ ENDFUNC(GLOBAL(udivsi3_i4))
++
+ #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
+ !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
+
+@@ -1135,6 +1280,7 @@
+ .mode SHcompact
+ #endif
+ .global GLOBAL(udivsi3_i4)
++ FUNC(GLOBAL(udivsi3_i4))
+ GLOBAL(udivsi3_i4):
+ mov #1,r1
+ cmp/hi r1,r5
+@@ -1183,6 +1329,8 @@
+ #endif
+ .double 2147483648
+
++ ENDFUNC(GLOBAL(udivsi3_i4))
++
+ #endif /* ! __SH5__ || __SH5__ == 32 */
+ #endif /* ! __SH4__ */
+ #endif
+@@ -1199,6 +1347,7 @@
+
+ !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
+ .global GLOBAL(udivsi3)
++ FUNC(GLOBAL(udivsi3))
+
+ #if __SHMEDIA__
+ #if __SH5__ == 32
+@@ -1299,6 +1448,8 @@
+ ret: rts
+ mov r4,r0
+
++ ENDFUNC(GLOBAL(udivsi3))
++
+ #endif /* ! __SHMEDIA__ */
+ #endif /* __SH4__ */
+ #endif
+@@ -1308,6 +1459,7 @@
+ .mode SHcompact
+ #endif
+ .global GLOBAL(set_fpscr)
++ FUNC(GLOBAL(set_fpscr))
+ GLOBAL(set_fpscr):
+ lds r4,fpscr
+ mov.l LOCAL(set_fpscr_L1),r1
+@@ -1340,11 +1492,16 @@
+ .align 2
+ LOCAL(set_fpscr_L1):
+ .long GLOBAL(fpscr_values)
++
++ ENDFUNC(GLOBAL(set_fpscr))
++
++#ifndef NO_FPSCR_VALUES
+ #ifdef __ELF__
+ .comm GLOBAL(fpscr_values),8,4
+ #else
+ .comm GLOBAL(fpscr_values),8
+ #endif /* ELF */
++#endif /* NO_FPSCR_VALUES */
+ #endif /* SH3E / SH4 */
+ #endif /* L_set_fpscr */
+ #ifdef L_ic_invalidate
+@@ -1360,6 +1517,7 @@
+ blink tr0, r63
+ #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
+ .global GLOBAL(ic_invalidate)
++ FUNC(GLOBAL(ic_invalidate))
+ GLOBAL(ic_invalidate):
+ ocbwb @r4
+ mova 0f,r0
+@@ -1382,6 +1540,9 @@
+ nop
+ .endr
+ .endr
++
++ ENDFUNC(GLOBAL(ic_invalidate))
++
+ #endif /* SH4 */
+ #endif /* L_ic_invalidate */
+
+diff -ruN gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver gcc-20030210/gcc/config/sh/libgcc-glibc.ver
+--- gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/libgcc-glibc.ver Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,21 @@
++# In order to work around the very problems that force us to now generally
++# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
++# By now choosing the same version tags for these specific routines, we
++# maintain enough binary compatibility to allow future versions of glibc
++# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
++
++# Note that we cannot use the default libgcc-glibc.ver file on sh,
++# because GLIBC_2.0 does not exist on this architecture, as the first
++# ever glibc release on the platform was GLIBC_2.2.
++
++%inherit GCC_3.0 GLIBC_2.2
++GLIBC_2.2 {
++ __register_frame
++ __register_frame_table
++ __deregister_frame
++ __register_frame_info
++ __deregister_frame_info
++ __frame_state_for
++ __register_frame_info_table
++}
++
+diff -ruN gcc-20030210.orig/gcc/config/sh/linux.h gcc-20030210/gcc/config/sh/linux.h
+--- gcc-20030210.orig/gcc/config/sh/linux.h Tue Apr 16 05:27:42 2002
++++ gcc-20030210/gcc/config/sh/linux.h Sat Feb 22 01:40:14 2003
+@@ -19,6 +19,10 @@
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
++/* We're not SYSVR4, not having /usr/ccs */
++#undef MD_EXEC_PREFIX
++#undef MD_STARTFILE_PREFIX
++
+ /* Run-time Target Specification. */
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fputs (" (SH GNU/Linux with ELF)", stderr);
+@@ -39,6 +43,28 @@
+ #undef WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE BITS_PER_WORD
+
++/* This was defined in linux.h. Define it here also. */
++#undef DEFAULT_VTABLE_THUNKS
++#define DEFAULT_VTABLE_THUNKS 1
++
++/* Likewise. */
++#define HANDLE_PRAGMA_PACK_PUSH_POP
++
++/* Pick up the return address upon entry to a procedure. Used for
++ dwarf2 unwind information. This also enables the table driven
++ mechanism. */
++
++#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, PR_REG)
++#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PR_REG)
++
++#undef CPP_SPEC
++#define CPP_SPEC "\
++ %{m4:-D__SH4__} \
++ %{!m4:%(cpp_default_cpu_spec)} \
++ %(subtarget_cpp_spec) \
++ %(subtarget_cpp_ptr_spec) \
++ %(subtarget_cpp_endian_spec) "
++
+ #undef SUBTARGET_CPP_SPEC
+ #define SUBTARGET_CPP_SPEC "\
+ %{fPIC:-D__PIC__ -D__pic__} \
+@@ -55,36 +81,45 @@
+ #undef CPP_DEFAULT_CPU_SPEC
+ #define CPP_DEFAULT_CPU_SPEC "-D__SH3__ -D__sh3__"
+
+-
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "-D__ELF__ -Dunix -D__sh__ -D__gnu_linux__ -Dlinux -Asystem=posix"
+
++/* The GNU C++ standard library requires that these macros be defined. */
++#undef CPLUSPLUS_CPP_SPEC
++#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
++
+ #undef ASM_SPEC
+-#define ASM_SPEC "%{!mb:-little} %{mrelax:-relax}"
++#define ASM_SPEC "%{mb:-big} %{!mb:-little} %{mrelax:-relax}"
+
+ #undef CC1_SPEC
+ #define CC1_SPEC \
+- "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
+-
+-#undef CC1PLUS_SPEC
+-#define CC1PLUS_SPEC \
+- "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
++ "-musermode %{!mb:-ml} %{!m4:-m3} %{profile:-p}"
+
++/* XXX: It's wrong if prefix != /usr */
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+- "%{!mb:-m shlelf_linux} %{mrelax:-relax} \
++ "%{!mb:-m shlelf_linux -EL} %{mb:-m shelf_linux -EB} %{mrelax:-relax} \
+ %{shared:-shared} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+- %{!rpath:-rpath /lib}} \
++ %{!mb:%{!m4:-rpath-link /usr/sh-linux/lib }} \
++ %{!mb:%{m4:-rpath-link /usr/sh-linux/lib/m4 }} \
++ %{mb:%{!m4:-rpath-link /usr/sh-linux/lib/mb }} \
++ %{mb:%{m4:-rpath-link /usr/sh-linux/lib/mb/m4 }}} \
+ %{static:-static}"
+
+ #undef LIB_SPEC
++#undef LIB_SPEC
+ #define LIB_SPEC \
+ "%{shared: -lc} \
+- %{!shared: %{pthread:-lthread} \
+- %{profile:-lc_p} %{!profile: -lc}}"
++ %{!shared: %{mieee:-lieee} %{pthread:-lpthread} \
++ %{profile:-lc_p} %{!profile: -lc}}"
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#undef LINK_EH_SPEC
++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#endif
+
+ #undef STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+@@ -92,4 +127,40 @@
+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
+ %{!p:%{profile:gcrt1.o%s} \
+ %{!profile:crt1.o%s}}}} \
+- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
++ crti.o%s %{static:crtbeginT.o%s}\
++ %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
++
++#undef FUNCTION_PROFILER
++#define FUNCTION_PROFILER(STREAM,LABELNO) \
++do \
++{ \
++ if (flag_pic) \
++ { \
++ fprintf (STREAM, " mov.l 3f,r1\n"); \
++ fprintf (STREAM, " mova 3f,r0\n"); \
++ fprintf (STREAM, " add r1,r0\n"); \
++ fprintf (STREAM, " mov.l 1f,r1\n"); \
++ fprintf (STREAM, " mov.l @(r0,r1),r1\n"); \
++ } \
++ else \
++ { \
++ fprintf (STREAM, " mov.l 1f,r1\n"); \
++ } \
++ fprintf (STREAM, " sts.l pr,@-r15\n"); \
++ fprintf (STREAM, " mova 2f,r0\n"); \
++ fprintf (STREAM, " jmp @r1\n"); \
++ fprintf (STREAM, " lds r0,pr\n"); \
++ fprintf (STREAM, " .align 2\n"); \
++ if (flag_pic) \
++ { \
++ fprintf (STREAM, "1: .long mcount@GOT\n"); \
++ fprintf (STREAM, "3: .long _GLOBAL_OFFSET_TABLE_\n"); \
++ } \
++ else \
++ { \
++ fprintf (STREAM, "1: .long mcount\n"); \
++ } \
++ fprintf (STREAM, "2: lds.l @r15+,pr\n"); \
++} while (0)
++
++#define NO_SHARED_LIBGCC_MULTILIB
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh-protos.h gcc-20030210/gcc/config/sh/sh-protos.h
+--- gcc-20030210.orig/gcc/config/sh/sh-protos.h Fri Feb 22 01:42:28 2002
++++ gcc-20030210/gcc/config/sh/sh-protos.h Sat Feb 22 01:40:14 2003
+@@ -74,6 +74,7 @@
+ extern int shl_sext_length PARAMS ((rtx));
+ extern int gen_shl_sext PARAMS ((rtx, rtx, rtx, rtx));
+ extern rtx gen_datalabel_ref PARAMS ((rtx));
++extern int shl_casesi_worker_length PARAMS ((rtx));
+ extern int regs_used PARAMS ((rtx, int));
+ extern void fixup_addr_diff_vecs PARAMS ((rtx));
+ extern int get_dest_uid PARAMS ((rtx, int));
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh.c gcc-20030210/gcc/config/sh/sh.c
+--- gcc-20030210.orig/gcc/config/sh/sh.c Fri Feb 22 01:42:28 2002
++++ gcc-20030210/gcc/config/sh/sh.c Sat Feb 22 01:40:14 2003
+@@ -2143,6 +2143,48 @@
+ return sym;
+ }
+
++
++/* Function to be used in the length attribute of the casesi_worker
++ instruction. Returns number of instructions, which is half of the
++ length of bytes. */
++
++int
++shl_casesi_worker_length (insn)
++ rtx insn;
++{
++ rtx set_src, label;
++ rtx diff_vec;
++
++ set_src = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
++ if (!(GET_CODE (set_src) == UNSPEC
++ && XINT (set_src, 1) == UNSPEC_CASESI))
++ abort ();
++
++ label = XVECEXP (set_src, 0, 2);
++ if (GET_CODE (label) != LABEL_REF)
++ abort ();
++
++ diff_vec = PATTERN (next_real_insn (XEXP (label, 0)));
++
++ if (GET_CODE (diff_vec) != ADDR_DIFF_VEC)
++ abort ();
++
++ switch (GET_MODE (diff_vec))
++ {
++ case SImode:
++ return 2;
++ case HImode:
++ if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
++ return 3;
++ return 2;
++ case QImode:
++ if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
++ return 2;
++ return 1;
++ default:
++ abort ();
++ }
++}
+
+ /* The SH cannot load a large constant into a register, constants have to
+ come from a pc relative load. The reference of a pc relative load
+@@ -3190,7 +3232,7 @@
+ vec_lab = XEXP (XEXP (pat, 0), 0);
+
+ /* Search the matching casesi_jump_2. */
+- for (prev = vec_lab; ; prev = PREV_INSN (prev))
++ for (prev = vec_lab; prev; prev = PREV_INSN (prev))
+ {
+ if (GET_CODE (prev) != JUMP_INSN)
+ continue;
+@@ -3205,6 +3247,13 @@
+ break;
+ }
+
++ if (prev == NULL)
++ { /* Switch statement has been optimized out. */
++ delete_insn (PREV_INSN (insn));
++ delete_insn (insn);
++ continue;
++ }
++
+ /* Emit the reference label of the braf where it belongs, right after
+ the casesi_jump_2 (i.e. braf). */
+ braf_label = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);
+@@ -3223,7 +3272,7 @@
+ rtx barrier_or_label;
+ {
+ rtx next = next_real_insn (barrier_or_label), pat, prev;
+- int slot, credit, jump_to_next;
++ int slot, credit, jump_to_next = 0;
+
+ if (! next)
+ return 0;
+@@ -4507,7 +4556,8 @@
+ if (current_function_varargs || current_function_stdarg)
+ {
+ /* This is not used by the SH3E calling convention */
+- if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI)
++ if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI
++ || TARGET_NO_IMPLICIT_FP)
+ {
+ /* Push arg regs as if they'd been provided by caller in stack. */
+ for (i = 0; i < NPARM_REGS(SImode); i++)
+@@ -5149,7 +5199,8 @@
+ tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
+ tree record;
+
+- if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
++ if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI
++ || TARGET_NO_IMPLICIT_FP)
+ return ptr_type_node;
+
+ record = make_node (RECORD_TYPE);
+@@ -5211,7 +5262,8 @@
+ return;
+ }
+
+- if ((! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
++ if ((! TARGET_SH3E && ! TARGET_SH4)
++ || TARGET_HITACHI || TARGET_NO_IMPLICIT_FP)
+ {
+ std_expand_builtin_va_start (stdarg_p, valist, nextarg);
+ return;
+@@ -5289,7 +5341,8 @@
+ rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
+ pptr_type_node = build_pointer_type (ptr_type_node);
+
+- if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4) && ! TARGET_HITACHI)
++ if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4)
++ && ! TARGET_HITACHI && ! TARGET_NO_IMPLICIT_FP)
+ {
+ tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
+ tree next_o, next_o_limit, next_fp, next_fp_limit, next_stack;
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh.h gcc-20030210/gcc/config/sh/sh.h
+--- gcc-20030210.orig/gcc/config/sh/sh.h Fri Feb 22 01:42:28 2002
++++ gcc-20030210/gcc/config/sh/sh.h Sat Feb 22 01:40:14 2003
+@@ -147,10 +147,10 @@
+ #define HARD_SH4_BIT (1<<5)
+ #define FPU_SINGLE_BIT (1<<7)
+ #define SH4_BIT (1<<12)
++#define NO_IMPLICIT_FP_BIT (1<<3)
+ #define FMOVD_BIT (1<<4)
+ #define SH5_BIT (1<<0)
+ #define SPACE_BIT (1<<13)
+-#define BIGTABLE_BIT (1<<14)
+ #define RELAX_BIT (1<<15)
+ #define USERMODE_BIT (1<<16)
+ #define HITACHI_BIT (1<<22)
+@@ -205,6 +205,9 @@
+ /* Nonzero if we should generate code for a SH5 CPU (either ISA). */
+ #define TARGET_SH5 (target_flags & SH5_BIT)
+
++/* Nonzero if we should not use FPU implicitly. */
++#define TARGET_NO_IMPLICIT_FP (target_flags & NO_IMPLICIT_FP_BIT)
++
+ /* Nonzero if we should generate code using the SHcompact instruction
+ set and 32-bit ABI. */
+ #define TARGET_SHCOMPACT (TARGET_SH5 && TARGET_SH1)
+@@ -225,6 +228,7 @@
+
+ /* Nonzero if we should generate code using SHmedia FPU instructions. */
+ #define TARGET_SHMEDIA_FPU (TARGET_SHMEDIA && TARGET_FPU_DOUBLE)
++
+ /* Nonzero if we should generate fmovd. */
+ #define TARGET_FMOVD (target_flags & FMOVD_BIT)
+
+@@ -234,9 +238,6 @@
+ /* Nonzero if we should generate smaller code rather than faster code. */
+ #define TARGET_SMALLCODE (target_flags & SPACE_BIT)
+
+-/* Nonzero to use long jump tables. */
+-#define TARGET_BIGTABLE (target_flags & BIGTABLE_BIT)
+-
+ /* Nonzero to generate pseudo-ops needed by the assembler and linker
+ to do function call relaxing. */
+ #define TARGET_RELAX (target_flags & RELAX_BIT)
+@@ -297,7 +298,6 @@
+ {"5-compact-nofpu", TARGET_NONE, "" }, \
+ {"5-compact-nofpu", SH5_BIT|SH3_BIT|SH2_BIT|SH1_BIT, "Generate FPU-less SHcompact code" }, \
+ {"b", -LITTLE_ENDIAN_BIT, "" }, \
+- {"bigtable", BIGTABLE_BIT, "" }, \
+ {"dalign", DALIGN_BIT, "" }, \
+ {"fmovd", FMOVD_BIT, "" }, \
+ {"hitachi", HITACHI_BIT, "" }, \
+@@ -306,6 +306,7 @@
+ {"isize", ISIZE_BIT, "" }, \
+ {"l", LITTLE_ENDIAN_BIT, "" }, \
+ {"no-ieee", -IEEE_BIT, "" }, \
++ {"no-implicit-fp", NO_IMPLICIT_FP_BIT, "" }, \
+ {"padstruct", PADSTRUCT_BIT, "" }, \
+ {"prefergot", PREFERGOT_BIT, "" }, \
+ {"relax", RELAX_BIT, "" }, \
+@@ -2493,16 +2494,22 @@
+ goto LABEL; \
+ }
+
++extern int optimize; /* needed for gen_casesi. */
++extern int optimize_size;
++
+ /* Specify the machine mode that this machine uses
+ for the index in the tablejump instruction. */
+-#define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)
++#define CASE_VECTOR_MODE SImode
+
+ #define CASE_VECTOR_SHORTEN_MODE(MIN_OFFSET, MAX_OFFSET, BODY) \
+ ((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 127 \
+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, QImode) \
+ : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 255 \
+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, QImode) \
+- : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 ? HImode \
++ : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 \
++ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, HImode) \
++ : optimize_size && (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 65535 \
++ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, HImode) \
+ : SImode)
+
+ /* Define as C expression which evaluates to nonzero if the tablejump
+@@ -3038,10 +3045,7 @@
+ /* Output an absolute table element. */
+
+ #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE) \
+- if (TARGET_BIGTABLE) \
+- asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); \
+- else \
+- asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); \
++ asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE))
+
+ /* Output various types of constants. */
+
+@@ -3167,8 +3171,6 @@
+ #define sh_cpu_attr ((enum attr_cpu)sh_cpu)
+ extern enum processor_type sh_cpu;
+
+-extern int optimize; /* needed for gen_casesi. */
+-
+ enum mdep_reorg_phase_e
+ {
+ SH_BEFORE_MDEP_REORG,
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh.md gcc-20030210/gcc/config/sh/sh.md
+--- gcc-20030210.orig/gcc/config/sh/sh.md Sat Nov 23 04:58:06 2002
++++ gcc-20030210/gcc/config/sh/sh.md Sat Feb 22 01:40:14 2003
+@@ -1242,7 +1242,7 @@
+ (clobber (reg:SI PR_REG))
+ (clobber (reg:SI R4_REG))
+ (use (match_operand:SI 1 "arith_reg_operand" "r"))]
+- "TARGET_SH1 && ! TARGET_SH4"
++ "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
+ "jsr @%1%#"
+ [(set_attr "type" "sfunc")
+ (set_attr "needs_delay_slot" "yes")])
+@@ -1336,7 +1336,7 @@
+
+ operands[3] = gen_reg_rtx (Pmode);
+ /* Emit the move of the address to a pseudo outside of the libcall. */
+- if (TARGET_HARD_SH4 && TARGET_SH3E)
++ if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
+ {
+ emit_move_insn (operands[3],
+ gen_rtx_SYMBOL_REF (SImode, \"__udivsi3_i4\"));
+@@ -1391,7 +1391,7 @@
+ (clobber (reg:SI R2_REG))
+ (clobber (reg:SI R3_REG))
+ (use (match_operand:SI 1 "arith_reg_operand" "r"))]
+- "TARGET_SH1 && ! TARGET_SH4"
++ "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
+ "jsr @%1%#"
+ [(set_attr "type" "sfunc")
+ (set_attr "needs_delay_slot" "yes")])
+@@ -1476,7 +1476,7 @@
+
+ operands[3] = gen_reg_rtx (Pmode);
+ /* Emit the move of the address to a pseudo outside of the libcall. */
+- if (TARGET_HARD_SH4 && TARGET_SH3E)
++ if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
+ {
+ emit_move_insn (operands[3],
+ gen_rtx_SYMBOL_REF (SImode, \"__sdivsi3_i4\"));
+@@ -6446,6 +6446,8 @@
+ case SImode:
+ return \"shll2 %1\;mov.l @(r0,%1),%0\";
+ case HImode:
++ if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
++ return \"add %1,%1\;mov.w @(r0,%1),%0\;extu.w %0,%0\";
+ return \"add %1,%1\;mov.w @(r0,%1),%0\";
+ case QImode:
+ if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
+@@ -6455,7 +6457,15 @@
+ abort ();
+ }
+ }"
+- [(set_attr "length" "4")])
++ [(set (attr "length")
++ (cond [(eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 1))
++ (const_string "2")
++ (eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 2))
++ (const_string "4")
++ ;; Put "match_dup" here so that insn_variable_length_p return 1.
++ (ne (match_dup 2) (match_dup 2))
++ (const_string "4")]
++ (const_string "6")))])
+
+ (define_insn "casesi_shift_media"
+ [(set (match_operand 0 "arith_reg_operand" "=r")
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh3-linux.h gcc-20030210/gcc/config/sh/sh3-linux.h
+--- gcc-20030210.orig/gcc/config/sh/sh3-linux.h Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/sh3-linux.h Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,29 @@
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (SH3 GNU/Linux with ELF)", stderr);
++
++#undef CPP_SPEC
++#define CPP_SPEC \
++ "-D__LITTLE_ENDIAN__ \
++ -D__SH3__ -D__sh3__ \
++ -D__SIZE_TYPE__=unsigned\\ int \
++ -D__PTRDIFF_TYPE__=int \
++ %{fPIC:-D__PIC__ -D__pic__} \
++ %{fpic:-D__PIC__ -D__pic__} \
++ %{posix:-D_POSIX_SOURCE} \
++ %{pthread:-D_REENTRANT -D_PTHREADS}"
++
++#undef ASM_SPEC
++#define ASM_SPEC "%{mrelax:-relax}"
++
++#undef CC1_SPEC
++#define CC1_SPEC \
++ "-musermode -ml -m3 %{profile:-p}"
++
++#undef LINK_SPEC
++#define LINK_SPEC \
++ "%{mrelax:-relax} \
++ %{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{static:-static}"
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h gcc-20030210/gcc/config/sh/sh3eb-linux.h
+--- gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/sh3eb-linux.h Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,29 @@
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (SH3EB GNU/Linux with ELF)", stderr);
++
++#undef CPP_SPEC
++#define CPP_SPEC \
++ "-D__BIG_ENDIAN__ \
++ -D__SH3__ -D__sh3__ \
++ -D__SIZE_TYPE__=unsigned\\ int \
++ -D__PTRDIFF_TYPE__=int \
++ %{fPIC:-D__PIC__ -D__pic__} \
++ %{fpic:-D__PIC__ -D__pic__} \
++ %{posix:-D_POSIX_SOURCE} \
++ %{pthread:-D_REENTRANT -D_PTHREADS}"
++
++#undef ASM_SPEC
++#define ASM_SPEC "%{mrelax:-relax}"
++
++#undef CC1_SPEC
++#define CC1_SPEC \
++ "-musermode -mb -m3 %{profile:-p}"
++
++#undef LINK_SPEC
++#define LINK_SPEC \
++ "%{mrelax:-relax} \
++ %{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{static:-static}"
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh4-linux.h gcc-20030210/gcc/config/sh/sh4-linux.h
+--- gcc-20030210.orig/gcc/config/sh/sh4-linux.h Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/sh4-linux.h Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,29 @@
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (SH4 GNU/Linux with ELF)", stderr);
++
++#undef CPP_SPEC
++#define CPP_SPEC \
++ "-D__LITTLE_ENDIAN__ \
++ -D__SH4__ \
++ -D__SIZE_TYPE__=unsigned\\ int \
++ -D__PTRDIFF_TYPE__=int \
++ %{fPIC:-D__PIC__ -D__pic__} \
++ %{fpic:-D__PIC__ -D__pic__} \
++ %{posix:-D_POSIX_SOURCE} \
++ %{pthread:-D_REENTRANT -D_PTHREADS}"
++
++#undef ASM_SPEC
++#define ASM_SPEC "%{mrelax:-relax}"
++
++#undef CC1_SPEC
++#define CC1_SPEC \
++ "-musermode -ml -m4 %{profile:-p}"
++
++#undef LINK_SPEC
++#define LINK_SPEC \
++ "%{mrelax:-relax} \
++ %{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{static:-static}"
+diff -ruN gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h gcc-20030210/gcc/config/sh/sh4eb-linux.h
+--- gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/sh4eb-linux.h Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,29 @@
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (SH4EB GNU/Linux with ELF)", stderr);
++
++#undef CPP_SPEC
++#define CPP_SPEC \
++ "-D__BIG_ENDIAN__ \
++ -D__SH4__ \
++ -D__SIZE_TYPE__=unsigned\\ int \
++ -D__PTRDIFF_TYPE__=int \
++ %{fPIC:-D__PIC__ -D__pic__} \
++ %{fpic:-D__PIC__ -D__pic__} \
++ %{posix:-D_POSIX_SOURCE} \
++ %{pthread:-D_REENTRANT -D_PTHREADS}"
++
++#undef ASM_SPEC
++#define ASM_SPEC "%{mrelax:-relax}"
++
++#undef CC1_SPEC
++#define CC1_SPEC \
++ "-musermode -mb -m4 %{profile:-p}"
++
++#undef LINK_SPEC
++#define LINK_SPEC \
++ "%{mrelax:-relax} \
++ %{shared:-shared} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++ %{static:-static}"
+diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux gcc-20030210/gcc/config/sh/t-linux
+--- gcc-20030210.orig/gcc/config/sh/t-linux Thu May 17 12:16:12 2001
++++ gcc-20030210/gcc/config/sh/t-linux Sat Feb 22 01:40:14 2003
+@@ -1,10 +1,20 @@
+-TARGET_LIBGCC2_CFLAGS = -fpic
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIBGCC1 = libgcc1-asm.a
++CROSS_LIBGCC1 = libgcc1-asm.a
++LIBGCC1_TEST = libgcc1-test
+ LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \
+ _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
+ _ic_invalidate
++LIB2ADDEH = $(srcdir)/unwind-sjlj.c
++LIB2ADDEHDEP = unwind.inc unwind-sjlj.c
+
+-MULTILIB_OPTIONS= mb m3e/m4
++MULTILIB_OPTIONS= mb m4
+ MULTILIB_DIRNAMES=
+ MULTILIB_MATCHES =
+
+-EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used and SH specific.
++SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
++ $(srcdir)/config/sh/libgcc-glibc.ver
+diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux-nomulti gcc-20030210/gcc/config/sh/t-linux-nomulti
+--- gcc-20030210.orig/gcc/config/sh/t-linux-nomulti Thu Jan 1 09:00:00 1970
++++ gcc-20030210/gcc/config/sh/t-linux-nomulti Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,9 @@
++LIBGCC = libgcc.a
++EXTRA_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crtbeginT.o
++
++INSTALL_LIBGCC = install-libgcc
++
++MULTILIB_OPTIONS=
++MULTILIB_DIRNAMES=
++MULTILIB_MATCHES =
++EXTRA_MULTILIB_PARTS=
+diff -ruN gcc-20030210.orig/gcc/config.gcc gcc-20030210/gcc/config.gcc
+--- gcc-20030210.orig/gcc/config.gcc Fri Jan 31 19:17:13 2003
++++ gcc-20030210/gcc/config.gcc Sat Feb 22 01:40:14 2003
+@@ -337,9 +337,9 @@
+ sparc*-*-*)
+ cpu_type=sparc
+ ;;
+-sh64-*-*)
+- cpu_type=sh
+- ;;
++sh*-*-*)
++ cpu_type=sh
++ ;;
+ esac
+
+ tm_file=${cpu_type}/${cpu_type}.h
+@@ -3018,9 +3018,31 @@
+ thread_file='rtems'
+ fi
+ ;;
+-sh-*-linux*)
++sh*-*-linux*)
+ tm_file="${tm_file} sh/elf.h sh/linux.h"
+- tmake_file="sh/t-sh sh/t-elf sh/t-linux"
++ tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux sh/t-linux"
++ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
++ case $machine in
++ sh3eb-*)
++ tm_file="${tm_file} sh/sh3eb-linux.h"
++ tmake_file="${tmake_file} sh/t-linux-nomulti"
++ ;;
++ sh4eb-*)
++ tm_file="${tm_file} sh/sh4eb-linux.h"
++ tmake_file="${tmake_file} sh/t-linux-nomulti"
++ ;;
++ sh3-*)
++ tm_file="${tm_file} sh/sh3-linux.h"
++ tmake_file="${tmake_file} sh/t-linux-nomulti"
++ ;;
++ sh4-*)
++ tm_file="${tm_file} sh/sh4-linux.h"
++ tmake_file="${tmake_file} sh/t-linux-nomulti"
++ ;;
++ *)
++ ;;
++ esac
++ xmake_file=x-linux
+ gas=yes gnu_ld=yes
+ float_format=sh
+ ;;
+diff -ruN gcc-20030210.orig/gcc/dwarf2out.c gcc-20030210/gcc/dwarf2out.c
+--- gcc-20030210.orig/gcc/dwarf2out.c Mon Feb 10 19:36:25 2003
++++ gcc-20030210/gcc/dwarf2out.c Sat Feb 22 01:40:14 2003
+@@ -10224,7 +10224,9 @@
+ /* We can have a normal definition following an inline one in the
+ case of redefinition of GNU C extern inlines.
+ It seems reasonable to use AT_specification in this case. */
+- && !get_AT_unsigned (old_die, DW_AT_inline))
++ && !get_AT_unsigned (old_die, DW_AT_inline)
++ /* Skip the nested function. */
++ && !decl_function_context (decl))
+ {
+ /* ??? This can happen if there is a bug in the program, for
+ instance, if it has duplicate function definitions. Ideally,
+diff -ruN gcc-20030210.orig/gcc/final.c gcc-20030210/gcc/final.c
+--- gcc-20030210.orig/gcc/final.c Fri Jan 31 19:17:20 2003
++++ gcc-20030210/gcc/final.c Sat Feb 22 01:40:14 2003
+@@ -1128,7 +1128,7 @@
+ }
+ }
+
+- INSN_ADDRESSES (uid) = insn_current_address;
++ INSN_ADDRESSES (uid) = insn_current_address + insn_lengths[uid];
+
+ if (GET_CODE (insn) == NOTE || GET_CODE (insn) == BARRIER
+ || GET_CODE (insn) == CODE_LABEL)
+diff -ruN gcc-20030210.orig/gcc/mkmap-symver.awk gcc-20030210/gcc/mkmap-symver.awk
+--- gcc-20030210.orig/gcc/mkmap-symver.awk Fri Jan 31 19:17:26 2003
++++ gcc-20030210/gcc/mkmap-symver.awk Sat Feb 22 01:40:14 2003
+@@ -89,7 +89,11 @@
+ output(inherit[lib]);
+
+ printf("%s {\n", lib);
+- printf(" global:\n");
++ for (sym in ver)
++ if ((ver[sym] == lib) && (sym in def))
++ count++;
++ if (count > 0)
++ printf(" global:\n");
+ for (sym in ver)
+ if ((ver[sym] == lib) && (sym in def))
+ {
+diff -ruN gcc-20030210.orig/gcc/reload1.c gcc-20030210/gcc/reload1.c
+--- gcc-20030210.orig/gcc/reload1.c Fri Jan 31 19:17:29 2003
++++ gcc-20030210/gcc/reload1.c Sat Feb 22 01:40:14 2003
+@@ -6103,6 +6103,7 @@
+ for (j = 0; j < n_reloads; j++)
+ if (rld[j].in != 0
+ && rld[j].when_needed != RELOAD_OTHER
++ && rld[j].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
+ && reg_overlap_mentioned_for_reload_p (rld[j].in,
+ rld[i].in))
+ rld[j].when_needed
+diff -ruN gcc-20030210.orig/gcc/reorg.c gcc-20030210/gcc/reorg.c
+--- gcc-20030210.orig/gcc/reorg.c Fri Jan 31 19:17:30 2003
++++ gcc-20030210/gcc/reorg.c Sat Feb 22 01:40:14 2003
+@@ -3265,6 +3265,14 @@
+ || condjump_in_parallel_p (XVECEXP (PATTERN (insn), 0, 0))))
+ continue;
+
++#ifdef MD_CAN_REDIRECT_BRANCH
++ /* On some targets, branches with delay slots can have a limited
++ displacement. Give the back end a chance to tell us we can't do
++ this. */
++ if (! MD_CAN_REDIRECT_BRANCH (insn, delay_insn))
++ continue;
++#endif
++
+ target_label = JUMP_LABEL (delay_insn);
+
+ if (target_label)
+diff -ruN gcc-20030210.orig/gcc/tree-inline.c gcc-20030210/gcc/tree-inline.c
+--- gcc-20030210.orig/gcc/tree-inline.c Fri Jan 31 19:17:33 2003
++++ gcc-20030210/gcc/tree-inline.c Sat Feb 22 01:40:14 2003
+@@ -836,11 +836,17 @@
+
+ /* Don't try to inline functions that are not well-suited to
+ inlining. */
+- if (!inlinable_function_p (fn, id))
+- return NULL_TREE;
++ if (! inlinable_function_p (fn, id)
++ || ! (*lang_hooks.tree_inlining.start_inlining) (fn))
++ {
++ if (DECL_INLINE (fn) && warn_inline && ! flag_really_no_inline)
++ {
++ warning_with_decl (fn, "inlining failed in call to `%s'");
++ warning ("called from here");
++ }
+
+- if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
+- return NULL_TREE;
++ return NULL_TREE;
++ }
+
+ /* Set the current filename and line number to the function we are
+ inlining so that when we create new _STMT nodes here they get
+diff -ruN gcc-20030210.orig/libjava/Makefile.in gcc-20030210/libjava/Makefile.in
+--- gcc-20030210.orig/libjava/Makefile.in Tue Jan 28 10:44:37 2003
++++ gcc-20030210/libjava/Makefile.in Sat Feb 22 01:40:14 2003
+@@ -1637,6 +1637,7 @@
+ "AS=$(AS)" \
+ "CC=$(CC)" \
+ "CXX=$(CXX)" \
++ "GCJ=$(GCJ)" \
+ "LD=$(LD)" \
+ "LIBCFLAGS=$(LIBCFLAGS)" \
+ "NM=$(NM)" \
+diff -ruN gcc-20030210.orig/libjava/configure gcc-20030210/libjava/configure
+--- gcc-20030210.orig/libjava/configure Tue Jan 28 10:44:37 2003
++++ gcc-20030210/libjava/configure Sat Feb 22 01:42:11 2003
+@@ -2031,7 +2031,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+diff -ruN gcc-20030210.orig/libjava/java/net/natInetAddress.cc gcc-20030210/libjava/java/net/natInetAddress.cc
+--- gcc-20030210.orig/libjava/java/net/natInetAddress.cc Tue Mar 5 05:02:19 2002
++++ gcc-20030210/libjava/java/net/natInetAddress.cc Sat Feb 22 01:40:14 2003
+@@ -56,7 +56,7 @@
+ #endif
+
+ #ifndef HAVE_GETHOSTNAME_DECL
+-extern "C" int gethostname (char *name, int namelen);
++extern "C" int gethostname (char *name, unsigned int namelen);
+ #endif
+
+ #ifdef DISABLE_JAVA_NET
+diff -ruN gcc-20030210.orig/libjava/libltdl/aclocal.m4 gcc-20030210/libjava/libltdl/aclocal.m4
+--- gcc-20030210.orig/libjava/libltdl/aclocal.m4 Sun Sep 10 17:04:40 2000
++++ gcc-20030210/libjava/libltdl/aclocal.m4 Sat Feb 22 01:40:14 2003
+@@ -573,7 +573,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case "$host_cpu" in
+- alpha* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | i*86 | powerpc* | sparc* | ia64* | sh*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+diff -ruN gcc-20030210.orig/libjava/sysdep/sh/locks.h gcc-20030210/libjava/sysdep/sh/locks.h
+--- gcc-20030210.orig/libjava/sysdep/sh/locks.h Thu Jan 1 09:00:00 1970
++++ gcc-20030210/libjava/sysdep/sh/locks.h Sat Feb 22 01:40:14 2003
+@@ -0,0 +1,72 @@
++// locks.h - Thread synchronization primitives. SuperH implementation.
++
++/* Copyright (C) 2002 Free Software Foundation
++
++ This file is part of libgcj.
++
++This software is copyrighted work licensed under the terms of the
++Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
++details. */
++
++#ifndef __SYSDEP_LOCKS_H__
++#define __SYSDEP_LOCKS_H__
++
++typedef size_t obj_addr_t; /* Integer type big enough for object */
++ /* address. */
++
++static unsigned char __cas_lock = 0;
++
++inline static void
++__cas_start_atomic (void)
++{
++ unsigned int val;
++
++ do
++ __asm__ __volatile__ ("tas.b @%1; movt %0"
++ : "=r" (val)
++ : "r" (&__cas_lock)
++ : "memory");
++ while (val == 0);
++}
++
++inline static void
++__cas_end_atomic (void)
++{
++ __asm__ __volatile__ (" " : : : "memory");
++ __cas_lock = 0;
++}
++
++inline static bool
++compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
++ obj_addr_t new_val)
++{
++ bool ret;
++
++ __cas_start_atomic ();
++ if (*addr != old)
++ ret = false;
++ else
++ {
++ *addr = new_val;
++ ret = true;
++ }
++ __cas_end_atomic ();
++
++ return ret;
++}
++
++inline static void
++release_set (volatile obj_addr_t *addr, obj_addr_t new_val)
++{
++ __asm__ __volatile__ (" " : : : "memory");
++ *(addr) = new_val;
++}
++
++inline static bool
++compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old,
++ obj_addr_t new_val)
++{
++ return compare_and_swap (addr, old, new_val);
++}
++
++#endif /* ! __SYSDEP_LOCKS_H__ */
+diff -ruN gcc-20030210.orig/libstdc++-v3/acinclude.m4 gcc-20030210/libstdc++-v3/acinclude.m4
+--- gcc-20030210.orig/libstdc++-v3/acinclude.m4 Tue Jan 28 02:30:41 2003
++++ gcc-20030210/libstdc++-v3/acinclude.m4 Sat Feb 22 01:40:14 2003
+@@ -1828,9 +1828,10 @@
+ GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
+
+ # Passed down for canadian crosses.
+- if test x"$CANADIAN" = xyes; then
+- TOPLEVEL_INCLUDES='-I$(includedir)'
+- fi
++ #if test x"$CANADIAN" = xyes; then
++ # TOPLEVEL_INCLUDES='-I$(includedir)'
++ #fi
++ TOPLEVEL_INCLUDES=''
+
+ LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
+
+diff -ruN gcc-20030210.orig/libstdc++-v3/aclocal.m4 gcc-20030210/libstdc++-v3/aclocal.m4
+--- gcc-20030210.orig/libstdc++-v3/aclocal.m4 Mon Feb 10 19:36:47 2003
++++ gcc-20030210/libstdc++-v3/aclocal.m4 Sat Feb 22 01:40:14 2003
+@@ -1840,9 +1840,10 @@
+ GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
+
+ # Passed down for canadian crosses.
+- if test x"$CANADIAN" = xyes; then
+- TOPLEVEL_INCLUDES='-I$(includedir)'
+- fi
++ #if test x"$CANADIAN" = xyes; then
++ # TOPLEVEL_INCLUDES='-I$(includedir)'
++ #fi
++ TOPLEVEL_INCLUDES=''
+
+ LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
+
+diff -ruN gcc-20030210.orig/libstdc++-v3/configure gcc-20030210/libstdc++-v3/configure
+--- gcc-20030210.orig/libstdc++-v3/configure Mon Feb 10 19:37:17 2003
++++ gcc-20030210/libstdc++-v3/configure Sat Feb 22 01:40:14 2003
+@@ -1982,7 +1982,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+@@ -22340,9 +22340,10 @@
+ GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
+
+ # Passed down for canadian crosses.
+- if test x"$CANADIAN" = xyes; then
+- TOPLEVEL_INCLUDES='-I$(includedir)'
+- fi
++ #if test x"$CANADIAN" = xyes; then
++ # TOPLEVEL_INCLUDES='-I$(includedir)'
++ #fi
++ TOPLEVEL_INCLUDES=''
+
+ LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
+
+diff -ruN gcc-20030210.orig/libtool.m4 gcc-20030210/libtool.m4
+--- gcc-20030210.orig/libtool.m4 Fri Jan 31 19:16:59 2003
++++ gcc-20030210/libtool.m4 Sat Feb 22 01:40:14 2003
+@@ -597,7 +597,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+diff -ruN gcc-20030210.orig/zlib/configure gcc-20030210/zlib/configure
+--- gcc-20030210.orig/zlib/configure Tue Jan 28 10:44:15 2003
++++ gcc-20030210/zlib/configure Sat Feb 22 01:40:14 2003
+@@ -1571,7 +1571,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
++ alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM