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
