patches/gcc/3.2.3/120-gcc-20030210-sh-linux-1.patch
changeset 402 197e1b49586e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/patches/gcc/3.2.3/120-gcc-20030210-sh-linux-1.patch	Sun Sep 23 17:08:09 2007 +0000
     1.3 @@ -0,0 +1,1761 @@
     1.4 +diff -ruN gcc-20030210.orig/boehm-gc/configure gcc-20030210/boehm-gc/configure
     1.5 +--- gcc-20030210.orig/boehm-gc/configure	Fri Jan 31 19:17:00 2003
     1.6 ++++ gcc-20030210/boehm-gc/configure	Sat Feb 22 01:40:14 2003
     1.7 +@@ -1922,7 +1922,7 @@
     1.8 + # This must be Linux ELF.
     1.9 + linux-gnu*)
    1.10 +   case $host_cpu in
    1.11 +-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
    1.12 ++  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
    1.13 +     lt_cv_deplibs_check_method=pass_all ;;
    1.14 +   *)
    1.15 +     # glibc up to 2.1.1 does not perform some relocations on ARM
    1.16 +diff -ruN gcc-20030210.orig/config-ml.in gcc-20030210/config-ml.in
    1.17 +--- gcc-20030210.orig/config-ml.in	Fri Jan 31 19:16:59 2003
    1.18 ++++ gcc-20030210/config-ml.in	Sat Feb 22 01:40:14 2003
    1.19 +@@ -545,6 +545,7 @@
    1.20 + 	      if [ -d ../$${dir}/$${lib} ]; then \
    1.21 + 		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
    1.22 + 		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
    1.23 ++				DESTDIR="$(DESTDIR)" \
    1.24 + 				CFLAGS="$(CFLAGS) $${flags}" \
    1.25 + 				prefix="$(prefix)" \
    1.26 + 				exec_prefix="$(exec_prefix)" \
    1.27 +diff -ruN gcc-20030210.orig/debian/edit-specs.in gcc-20030210/debian/edit-specs.in
    1.28 +--- gcc-20030210.orig/debian/edit-specs.in	Thu Jan  1 09:00:00 1970
    1.29 ++++ gcc-20030210/debian/edit-specs.in	Sat Feb 22 01:40:14 2003
    1.30 +@@ -0,0 +1,45 @@
    1.31 ++/^*asm:$/ {
    1.32 ++n
    1.33 ++c\
    1.34 ++@AS_ENDIAN_FLAG@ %{mrelax:-relax}
    1.35 ++}
    1.36 ++/^*cpp:$/ {
    1.37 ++n
    1.38 ++c\
    1.39 ++%(cpp_default_cpu_spec)    %(subtarget_cpp_spec)    %(subtarget_cpp_ptr_spec)    %(subtarget_cpp_endian_spec)
    1.40 ++}
    1.41 ++/^*cc1:$/ {
    1.42 ++n
    1.43 ++c\
    1.44 ++-musermode @CC1_CPU_ENDIAN_FLAGS@  %{profile:-p}
    1.45 ++}
    1.46 ++/^*link:$/ {
    1.47 ++n
    1.48 ++c\
    1.49 ++%{!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}
    1.50 ++}
    1.51 ++/^*multilib:$/ {
    1.52 ++n
    1.53 ++c\
    1.54 ++. ;
    1.55 ++}
    1.56 ++/^*multilib_matches:$/ {
    1.57 ++n
    1.58 ++c\
    1.59 ++
    1.60 ++}
    1.61 ++/^*multilib_options:$/ {
    1.62 ++n
    1.63 ++c\
    1.64 ++
    1.65 ++}
    1.66 ++/^*subtarget_cpp_endian_spec:$/ {
    1.67 ++n
    1.68 ++c\
    1.69 ++@CPP_ENDIAN_DEF@
    1.70 ++}
    1.71 ++/^*cpp_default_cpu_spec:$/ {
    1.72 ++n
    1.73 ++c\
    1.74 ++@CPP_CPU_DEFS@
    1.75 ++}
    1.76 +diff -ruN gcc-20030210.orig/debian/install-CPU-linux gcc-20030210/debian/install-CPU-linux
    1.77 +--- gcc-20030210.orig/debian/install-CPU-linux	Thu Jan  1 09:00:00 1970
    1.78 ++++ gcc-20030210/debian/install-CPU-linux	Sat Feb 22 01:40:14 2003
    1.79 +@@ -0,0 +1,111 @@
    1.80 ++#! /bin/sh
    1.81 ++
    1.82 ++VERSION=$1; shift
    1.83 ++CPU=$1
    1.84 ++
    1.85 ++# literally (binary-ly) same
    1.86 ++PROGS_C="cpp gcc"
    1.87 ++PROGS_ADDITIONAL="c++ g++ g77 gcj"
    1.88 ++
    1.89 ++DRIVERS_C="cc1 cpp0 tradcpp0"
    1.90 ++DRIVERS_ADDITIONAL="cc1obj cc1plus collect2 f771 jc1 jvgenmain"
    1.91 ++if [ -z "$STEP1_COMPILER_BUILD" ]; then
    1.92 ++  PROGS="$PROGS_C $PROGS_ADDITIONAL"
    1.93 ++  DRIVERS="$DRIVERS_C $DRIVERSADDITIONAL"
    1.94 ++  INITIAL=""
    1.95 ++else
    1.96 ++  PROGS=$PROGS_C
    1.97 ++  DRIVERS=$DRIVERS_C
    1.98 ++  INITIAL="-initial"
    1.99 ++fi
   1.100 ++
   1.101 ++OBJS="crtbegin.o crtbeginS.o crtend.o crtendS.o"
   1.102 ++LIBS_C="libgcc.a"
   1.103 ++LIBS_1="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.3 libstdc++.so.3.0.2"
   1.104 ++LIBS_2="libobjc.a libstdc++.a libsupc++.a"
   1.105 ++INCLUDE="include"
   1.106 ++
   1.107 ++cd debian/gcc-sh-linux-others${INITIAL} || exit 1
   1.108 ++
   1.109 ++# Make directories.
   1.110 ++mkdir -p usr/bin usr/share usr/share/man usr/share/man/man1 usr/lib \
   1.111 ++	 usr/lib/gcc-lib usr/lib/gcc-lib/${CPU}-linux \
   1.112 ++	 usr/lib/gcc-lib/${CPU}-linux/${VERSION} \
   1.113 ++	 usr/${CPU}-linux usr/${CPU}-linux/lib
   1.114 ++
   1.115 ++# Make symbolic links for include dir.
   1.116 ++(cd usr/${CPU}-linux; ln -s ../sh-linux/include .)
   1.117 ++
   1.118 ++# Make symbolic links for executables.
   1.119 ++(cd usr/bin;
   1.120 ++  for p in ${PROGS}; do
   1.121 ++    ln -s shCPU-linux-GCC ${CPU}-linux-$p
   1.122 ++  done)
   1.123 ++
   1.124 ++case "${CPU}" in
   1.125 ++    sh3)
   1.126 ++	MULTILIBDIR=
   1.127 ++	AS_ENDIAN_FLAG="-little"
   1.128 ++	CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
   1.129 ++	CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
   1.130 ++	CC1_CPU_ENDIAN_FLAGS="-ml -m3"
   1.131 ++	LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh3"
   1.132 ++	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3-linux/lib"
   1.133 ++    ;;
   1.134 ++    sh3eb)
   1.135 ++	MULTILIBDIR=/mb
   1.136 ++	AS_ENDIAN_FLAG="-big"
   1.137 ++	CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
   1.138 ++	CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
   1.139 ++	CC1_CPU_ENDIAN_FLAGS="-mb -m3"
   1.140 ++	LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh3"
   1.141 ++	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3eb-linux/lib"
   1.142 ++    ;;
   1.143 ++    sh4)
   1.144 ++	MULTILIBDIR=/m4
   1.145 ++	AS_ENDIAN_FLAG="-little"
   1.146 ++	CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
   1.147 ++	CPP_CPU_DEFS="-D__SH4__"
   1.148 ++	CC1_CPU_ENDIAN_FLAGS="-ml -m4"
   1.149 ++	LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh4"
   1.150 ++	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4-linux/lib"
   1.151 ++    ;;
   1.152 ++    sh4eb)
   1.153 ++	MULTILIBDIR=/mb/m4
   1.154 ++	AS_ENDIAN_FLAG="-big"
   1.155 ++	CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
   1.156 ++	CPP_CPU_DEFS="-D__SH4__"
   1.157 ++	CC1_CPU_ENDIAN_FLAGS="-mb -m4"
   1.158 ++	LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh4"
   1.159 ++	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4eb-linux/lib"
   1.160 ++    ;;
   1.161 ++esac
   1.162 ++
   1.163 ++# Make symbolic links for GCC drivers, objects, libraries, and include dir.
   1.164 ++(cd usr/lib/gcc-lib/${CPU}-linux/${VERSION};
   1.165 ++ for f in ${DRIVERS} ${INCLUDE}; do
   1.166 ++    ln -s ../../sh-linux/${VERSION}/$f $f;
   1.167 ++ done
   1.168 ++ for f in ${OBJS} ${LIBS_C}; do
   1.169 ++    ln -s ../../sh-linux/${VERSION}${MULTILIBDIR}/$f $f;
   1.170 ++ done)
   1.171 ++
   1.172 ++if [ -z "$STEP1_COMPILER_BUILD" ]; then
   1.173 ++  for f in ${LIBS_1} ${LIBS_2}; do
   1.174 ++    mv ../gcc-sh-linux/usr/sh-linux/lib${MULTILIBDIR}/$f usr/${CPU}-linux/lib/;
   1.175 ++  done
   1.176 ++fi
   1.177 ++
   1.178 ++sed -e "s+@AS_ENDIAN_FLAG@+${AS_ENDIAN_FLAG}+" \
   1.179 ++    -e "s+@CPP_ENDIAN_DEF@+${CPP_ENDIAN_DEF}+" \
   1.180 ++    -e "s+@CPP_CPU_DEFS@+${CPP_CPU_DEFS}+" \
   1.181 ++    -e "s+@CC1_CPU_ENDIAN_FLAGS@+${CC1_CPU_ENDIAN_FLAGS}+" \
   1.182 ++    -e "s+@LINKER_CPU_ENDIAN_FLAGS@+${LINKER_CPU_ENDIAN_FLAGS}+" \
   1.183 ++    -e "s+@LINKER_RPATH_LINK_FLAG@+${LINKER_RPATH_LINK_FLAG}+" \
   1.184 ++    ../edit-specs.in >../edit-specs-${CPU}.sed
   1.185 ++
   1.186 ++sed -f ../edit-specs-${CPU}.sed \
   1.187 ++    ../gcc-sh-linux${INITIAL}/usr/lib/gcc-lib/sh-linux/${VERSION}/specs \
   1.188 ++    > usr/lib/gcc-lib/${CPU}-linux/${VERSION}/specs
   1.189 ++
   1.190 ++exit 0
   1.191 +diff -ruN gcc-20030210.orig/debian/multilib-symlink gcc-20030210/debian/multilib-symlink
   1.192 +--- gcc-20030210.orig/debian/multilib-symlink	Thu Jan  1 09:00:00 1970
   1.193 ++++ gcc-20030210/debian/multilib-symlink	Sat Feb 22 01:40:14 2003
   1.194 +@@ -0,0 +1,10 @@
   1.195 ++#! /bin/sh
   1.196 ++
   1.197 ++cd /usr/sh-linux/lib
   1.198 ++ln -s ../../sh3-linux/lib/{*.a,*.so*,*.o} .
   1.199 ++cd m4
   1.200 ++ln -s ../../../sh4-linux/lib/{*.a,*.so*,*.o} .
   1.201 ++cd ../mb
   1.202 ++ln -s ../../../sh3eb-linux/lib/{*.a,*.so*,*.o} .
   1.203 ++cd m4
   1.204 ++ln -s ../../../../sh4eb-linux/lib/{*.a,*.so*,*.o} .
   1.205 +diff -ruN gcc-20030210.orig/debian/shCPU-linux-GCC gcc-20030210/debian/shCPU-linux-GCC
   1.206 +--- gcc-20030210.orig/debian/shCPU-linux-GCC	Thu Jan  1 09:00:00 1970
   1.207 ++++ gcc-20030210/debian/shCPU-linux-GCC	Sat Feb 22 01:40:14 2003
   1.208 +@@ -0,0 +1,59 @@
   1.209 ++#! /bin/bash
   1.210 ++
   1.211 ++BASENAME=${0##*/}
   1.212 ++PROG=${BASENAME##*-}
   1.213 ++CPU=${BASENAME%%-*}
   1.214 ++
   1.215 ++if [ "$PROG" = gcc ]; then
   1.216 ++    if [ "$1" = "-b" -a "$2" = "i386-linux" ]; then
   1.217 ++	shift 2
   1.218 ++	exec /usr/bin/gcc "$@"
   1.219 ++    elif [ "$1" = "-print-multi-lib" -o "$1" = "--print-multi-lib" ]; then
   1.220 ++	echo ".;"
   1.221 ++	exit 0
   1.222 ++    elif [ "$1" = "-print-multi-os-directory" -o "$1" = "--print-multi-os-directory" ]; then
   1.223 ++	echo "."
   1.224 ++	exit 0
   1.225 ++    elif [ "$1" = "-dumpspecs" ]; then
   1.226 ++	cat /usr/lib/gcc-lib/${CPU}-linux/@@VERSION@@/specs
   1.227 ++	exit 0
   1.228 ++    fi
   1.229 ++fi
   1.230 ++
   1.231 ++case "${CPU}" in
   1.232 ++    sh3)
   1.233 ++	ARCH=m3
   1.234 ++	DEFINES="-D__sh3__ -D__SH3__ -D__LITTLE_ENDIAN__"
   1.235 ++	ENDIAN=ml
   1.236 ++    ;;
   1.237 ++    sh3eb)
   1.238 ++	ARCH=m3
   1.239 ++	DEFINES="-D__sh3__ -D__SH3__ -D__BIG_ENDIAN__"
   1.240 ++	ENDIAN=mb
   1.241 ++    ;;
   1.242 ++    sh4)
   1.243 ++	ARCH=m4
   1.244 ++	DEFINES="-D__SH4__ -D__LITTLE_ENDIAN__"
   1.245 ++	ENDIAN=ml
   1.246 ++    ;;
   1.247 ++    sh4eb)
   1.248 ++	ARCH=m4
   1.249 ++	DEFINES="-D__SH4__ -D__BIG_ENDIAN__"
   1.250 ++	ENDIAN=mb
   1.251 ++    ;;
   1.252 ++esac
   1.253 ++
   1.254 ++# Prepend the appropriate options
   1.255 ++# If user specifies some options, it will be overridden
   1.256 ++
   1.257 ++case "${PROG}" in
   1.258 ++    cpp)
   1.259 ++	exec sh-linux-${PROG} $DEFINES "$@"
   1.260 ++    ;;
   1.261 ++    c++|g++|g77|gcc|gcj)
   1.262 ++	exec sh-linux-${PROG} -$ARCH -$ENDIAN "$@"
   1.263 ++    ;;
   1.264 ++esac
   1.265 ++
   1.266 ++echo "Something wrong..."
   1.267 ++exit 1
   1.268 +diff -ruN gcc-20030210.orig/gcc/config/sh/elf.h gcc-20030210/gcc/config/sh/elf.h
   1.269 +--- gcc-20030210.orig/gcc/config/sh/elf.h	Fri Feb 22 01:42:28 2002
   1.270 ++++ gcc-20030210/gcc/config/sh/elf.h	Sat Feb 22 01:40:14 2003
   1.271 +@@ -170,3 +170,7 @@
   1.272 + #undef ENDFILE_SPEC
   1.273 + #define ENDFILE_SPEC \
   1.274 +   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
   1.275 ++
   1.276 ++/* ASM_OUTPUT_CASE_LABEL is defined in elfos.h.  With it, 
   1.277 ++   redundant .align will be generated.  */
   1.278 ++#undef  ASM_OUTPUT_CASE_LABEL
   1.279 +diff -ruN gcc-20030210.orig/gcc/config/sh/lib1funcs.asm gcc-20030210/gcc/config/sh/lib1funcs.asm
   1.280 +--- gcc-20030210.orig/gcc/config/sh/lib1funcs.asm	Fri Feb 22 01:42:28 2002
   1.281 ++++ gcc-20030210/gcc/config/sh/lib1funcs.asm	Sat Feb 22 01:40:14 2003
   1.282 +@@ -39,8 +39,13 @@
   1.283 + 
   1.284 + #ifdef __ELF__
   1.285 + #define LOCAL(X) .L_##X
   1.286 ++#define FUNC(X) .type X,@function; .hidden X
   1.287 ++#define _ENDFUNC(X) .Lfe_##X: .size X,.Lfe_##X-X
   1.288 ++#define ENDFUNC(X) _ENDFUNC(X)
   1.289 + #else
   1.290 + #define LOCAL(X) L_##X
   1.291 ++#define FUNC(X)
   1.292 ++#define ENDFUNC(X)
   1.293 + #endif
   1.294 + 
   1.295 + #ifdef __linux__
   1.296 +@@ -91,6 +96,40 @@
   1.297 + 	.global	GLOBAL(ashiftrt_r4_31)
   1.298 + 	.global	GLOBAL(ashiftrt_r4_32)
   1.299 + 
   1.300 ++	FUNC(GLOBAL(ashiftrt_r4_0))
   1.301 ++	FUNC(GLOBAL(ashiftrt_r4_1))
   1.302 ++	FUNC(GLOBAL(ashiftrt_r4_2))
   1.303 ++	FUNC(GLOBAL(ashiftrt_r4_3))
   1.304 ++	FUNC(GLOBAL(ashiftrt_r4_4))
   1.305 ++	FUNC(GLOBAL(ashiftrt_r4_5))
   1.306 ++	FUNC(GLOBAL(ashiftrt_r4_6))
   1.307 ++	FUNC(GLOBAL(ashiftrt_r4_7))
   1.308 ++	FUNC(GLOBAL(ashiftrt_r4_8))
   1.309 ++	FUNC(GLOBAL(ashiftrt_r4_9))
   1.310 ++	FUNC(GLOBAL(ashiftrt_r4_10))
   1.311 ++	FUNC(GLOBAL(ashiftrt_r4_11))
   1.312 ++	FUNC(GLOBAL(ashiftrt_r4_12))
   1.313 ++	FUNC(GLOBAL(ashiftrt_r4_13))
   1.314 ++	FUNC(GLOBAL(ashiftrt_r4_14))
   1.315 ++	FUNC(GLOBAL(ashiftrt_r4_15))
   1.316 ++	FUNC(GLOBAL(ashiftrt_r4_16))
   1.317 ++	FUNC(GLOBAL(ashiftrt_r4_17))
   1.318 ++	FUNC(GLOBAL(ashiftrt_r4_18))
   1.319 ++	FUNC(GLOBAL(ashiftrt_r4_19))
   1.320 ++	FUNC(GLOBAL(ashiftrt_r4_20))
   1.321 ++	FUNC(GLOBAL(ashiftrt_r4_21))
   1.322 ++	FUNC(GLOBAL(ashiftrt_r4_22))
   1.323 ++	FUNC(GLOBAL(ashiftrt_r4_23))
   1.324 ++	FUNC(GLOBAL(ashiftrt_r4_24))
   1.325 ++	FUNC(GLOBAL(ashiftrt_r4_25))
   1.326 ++	FUNC(GLOBAL(ashiftrt_r4_26))
   1.327 ++	FUNC(GLOBAL(ashiftrt_r4_27))
   1.328 ++	FUNC(GLOBAL(ashiftrt_r4_28))
   1.329 ++	FUNC(GLOBAL(ashiftrt_r4_29))
   1.330 ++	FUNC(GLOBAL(ashiftrt_r4_30))
   1.331 ++	FUNC(GLOBAL(ashiftrt_r4_31))
   1.332 ++	FUNC(GLOBAL(ashiftrt_r4_32))
   1.333 ++
   1.334 + 	.align	1
   1.335 + GLOBAL(ashiftrt_r4_32):
   1.336 + GLOBAL(ashiftrt_r4_31):
   1.337 +@@ -170,6 +209,41 @@
   1.338 + GLOBAL(ashiftrt_r4_0):
   1.339 + 	rts
   1.340 + 	nop
   1.341 ++
   1.342 ++	ENDFUNC(GLOBAL(ashiftrt_r4_0))
   1.343 ++	ENDFUNC(GLOBAL(ashiftrt_r4_1))
   1.344 ++	ENDFUNC(GLOBAL(ashiftrt_r4_2))
   1.345 ++	ENDFUNC(GLOBAL(ashiftrt_r4_3))
   1.346 ++	ENDFUNC(GLOBAL(ashiftrt_r4_4))
   1.347 ++	ENDFUNC(GLOBAL(ashiftrt_r4_5))
   1.348 ++	ENDFUNC(GLOBAL(ashiftrt_r4_6))
   1.349 ++	ENDFUNC(GLOBAL(ashiftrt_r4_7))
   1.350 ++	ENDFUNC(GLOBAL(ashiftrt_r4_8))
   1.351 ++	ENDFUNC(GLOBAL(ashiftrt_r4_9))
   1.352 ++	ENDFUNC(GLOBAL(ashiftrt_r4_10))
   1.353 ++	ENDFUNC(GLOBAL(ashiftrt_r4_11))
   1.354 ++	ENDFUNC(GLOBAL(ashiftrt_r4_12))
   1.355 ++	ENDFUNC(GLOBAL(ashiftrt_r4_13))
   1.356 ++	ENDFUNC(GLOBAL(ashiftrt_r4_14))
   1.357 ++	ENDFUNC(GLOBAL(ashiftrt_r4_15))
   1.358 ++	ENDFUNC(GLOBAL(ashiftrt_r4_16))
   1.359 ++	ENDFUNC(GLOBAL(ashiftrt_r4_17))
   1.360 ++	ENDFUNC(GLOBAL(ashiftrt_r4_18))
   1.361 ++	ENDFUNC(GLOBAL(ashiftrt_r4_19))
   1.362 ++	ENDFUNC(GLOBAL(ashiftrt_r4_20))
   1.363 ++	ENDFUNC(GLOBAL(ashiftrt_r4_21))
   1.364 ++	ENDFUNC(GLOBAL(ashiftrt_r4_22))
   1.365 ++	ENDFUNC(GLOBAL(ashiftrt_r4_23))
   1.366 ++	ENDFUNC(GLOBAL(ashiftrt_r4_24))
   1.367 ++	ENDFUNC(GLOBAL(ashiftrt_r4_25))
   1.368 ++	ENDFUNC(GLOBAL(ashiftrt_r4_26))
   1.369 ++	ENDFUNC(GLOBAL(ashiftrt_r4_27))
   1.370 ++	ENDFUNC(GLOBAL(ashiftrt_r4_28))
   1.371 ++	ENDFUNC(GLOBAL(ashiftrt_r4_29))
   1.372 ++	ENDFUNC(GLOBAL(ashiftrt_r4_30))
   1.373 ++	ENDFUNC(GLOBAL(ashiftrt_r4_31))
   1.374 ++	ENDFUNC(GLOBAL(ashiftrt_r4_32))
   1.375 ++
   1.376 + #endif
   1.377 + 
   1.378 + #ifdef L_ashiftrt_n
   1.379 +@@ -192,6 +266,7 @@
   1.380 + !
   1.381 + 
   1.382 + 	.global	GLOBAL(ashrsi3)
   1.383 ++	FUNC(GLOBAL(ashrsi3))
   1.384 + 	.align	2
   1.385 + GLOBAL(ashrsi3):
   1.386 + 	mov	#31,r0
   1.387 +@@ -319,6 +394,8 @@
   1.388 + 	rts
   1.389 + 	nop
   1.390 + 
   1.391 ++	ENDFUNC(GLOBAL(ashrsi3))
   1.392 ++
   1.393 + #endif
   1.394 + 
   1.395 + #ifdef L_ashiftlt
   1.396 +@@ -340,6 +417,7 @@
   1.397 + ! (none)
   1.398 + !
   1.399 + 	.global	GLOBAL(ashlsi3)
   1.400 ++	FUNC(GLOBAL(ashlsi3))
   1.401 + 	.align	2
   1.402 + GLOBAL(ashlsi3):
   1.403 + 	mov	#31,r0
   1.404 +@@ -476,6 +554,8 @@
   1.405 + 	rts
   1.406 + 	nop
   1.407 + 
   1.408 ++	ENDFUNC(GLOBAL(ashlsi3))
   1.409 ++
   1.410 + #endif
   1.411 + 
   1.412 + #ifdef L_lshiftrt
   1.413 +@@ -497,6 +577,7 @@
   1.414 + ! (none)
   1.415 + !
   1.416 + 	.global	GLOBAL(lshrsi3)
   1.417 ++	FUNC(GLOBAL(lshrsi3))
   1.418 + 	.align	2
   1.419 + GLOBAL(lshrsi3):
   1.420 + 	mov	#31,r0
   1.421 +@@ -633,6 +714,8 @@
   1.422 + 	rts
   1.423 + 	nop
   1.424 + 
   1.425 ++	ENDFUNC(GLOBAL(lshrsi3))
   1.426 ++
   1.427 + #endif
   1.428 + 
   1.429 + #ifdef L_movstr
   1.430 +@@ -649,76 +732,113 @@
   1.431 + 	add	#64,r4
   1.432 + 	.align	4
   1.433 + 	.global	GLOBAL(movstrSI64)
   1.434 ++	FUNC(GLOBAL(movstrSI64))
   1.435 + GLOBAL(movstrSI64):
   1.436 + 	mov.l	@(60,r5),r0
   1.437 + 	mov.l	r0,@(60,r4)
   1.438 + 	.global	GLOBAL(movstrSI60)
   1.439 ++	FUNC(GLOBAL(movstrSI60))
   1.440 + GLOBAL(movstrSI60):
   1.441 + 	mov.l	@(56,r5),r0
   1.442 + 	mov.l	r0,@(56,r4)
   1.443 + 	.global	GLOBAL(movstrSI56)
   1.444 ++	FUNC(GLOBAL(movstrSI56))
   1.445 + GLOBAL(movstrSI56):
   1.446 + 	mov.l	@(52,r5),r0
   1.447 + 	mov.l	r0,@(52,r4)
   1.448 + 	.global	GLOBAL(movstrSI52)
   1.449 ++	FUNC(GLOBAL(movstrSI52))
   1.450 + GLOBAL(movstrSI52):
   1.451 + 	mov.l	@(48,r5),r0
   1.452 + 	mov.l	r0,@(48,r4)
   1.453 + 	.global	GLOBAL(movstrSI48)
   1.454 ++	FUNC(GLOBAL(movstrSI48))
   1.455 + GLOBAL(movstrSI48):
   1.456 + 	mov.l	@(44,r5),r0
   1.457 + 	mov.l	r0,@(44,r4)
   1.458 + 	.global	GLOBAL(movstrSI44)
   1.459 ++	FUNC(GLOBAL(movstrSI44))
   1.460 + GLOBAL(movstrSI44):
   1.461 + 	mov.l	@(40,r5),r0
   1.462 + 	mov.l	r0,@(40,r4)
   1.463 + 	.global	GLOBAL(movstrSI40)
   1.464 ++	FUNC(GLOBAL(movstrSI40))
   1.465 + GLOBAL(movstrSI40):
   1.466 + 	mov.l	@(36,r5),r0
   1.467 + 	mov.l	r0,@(36,r4)
   1.468 + 	.global	GLOBAL(movstrSI36)
   1.469 ++	FUNC(GLOBAL(movstrSI36))
   1.470 + GLOBAL(movstrSI36):
   1.471 + 	mov.l	@(32,r5),r0
   1.472 + 	mov.l	r0,@(32,r4)
   1.473 + 	.global	GLOBAL(movstrSI32)
   1.474 ++	FUNC(GLOBAL(movstrSI32))
   1.475 + GLOBAL(movstrSI32):
   1.476 + 	mov.l	@(28,r5),r0
   1.477 + 	mov.l	r0,@(28,r4)
   1.478 + 	.global	GLOBAL(movstrSI28)
   1.479 ++	FUNC(GLOBAL(movstrSI28))
   1.480 + GLOBAL(movstrSI28):
   1.481 + 	mov.l	@(24,r5),r0
   1.482 + 	mov.l	r0,@(24,r4)
   1.483 + 	.global	GLOBAL(movstrSI24)
   1.484 ++	FUNC(GLOBAL(movstrSI24))
   1.485 + GLOBAL(movstrSI24):
   1.486 + 	mov.l	@(20,r5),r0
   1.487 + 	mov.l	r0,@(20,r4)
   1.488 + 	.global	GLOBAL(movstrSI20)
   1.489 ++	FUNC(GLOBAL(movstrSI20))
   1.490 + GLOBAL(movstrSI20):
   1.491 + 	mov.l	@(16,r5),r0
   1.492 + 	mov.l	r0,@(16,r4)
   1.493 + 	.global	GLOBAL(movstrSI16)
   1.494 ++	FUNC(GLOBAL(movstrSI16))
   1.495 + GLOBAL(movstrSI16):
   1.496 + 	mov.l	@(12,r5),r0
   1.497 + 	mov.l	r0,@(12,r4)
   1.498 + 	.global	GLOBAL(movstrSI12)
   1.499 ++	FUNC(GLOBAL(movstrSI12))
   1.500 + GLOBAL(movstrSI12):
   1.501 + 	mov.l	@(8,r5),r0
   1.502 + 	mov.l	r0,@(8,r4)
   1.503 + 	.global	GLOBAL(movstrSI8)
   1.504 ++	FUNC(GLOBAL(movstrSI8))
   1.505 + GLOBAL(movstrSI8):
   1.506 + 	mov.l	@(4,r5),r0
   1.507 + 	mov.l	r0,@(4,r4)
   1.508 + 	.global	GLOBAL(movstrSI4)
   1.509 ++	FUNC(GLOBAL(movstrSI4))
   1.510 + GLOBAL(movstrSI4):
   1.511 + 	mov.l	@(0,r5),r0
   1.512 + 	mov.l	r0,@(0,r4)
   1.513 ++	.global	GLOBAL(movstrSI0)
   1.514 ++	FUNC(GLOBAL(movstrSI0))
   1.515 + GLOBAL(movstrSI0):
   1.516 + 	rts
   1.517 + 	nop
   1.518 + 
   1.519 ++	ENDFUNC(GLOBAL(movstrSI64))
   1.520 ++	ENDFUNC(GLOBAL(movstrSI60))
   1.521 ++	ENDFUNC(GLOBAL(movstrSI56))
   1.522 ++	ENDFUNC(GLOBAL(movstrSI52))
   1.523 ++	ENDFUNC(GLOBAL(movstrSI48))
   1.524 ++	ENDFUNC(GLOBAL(movstrSI44))
   1.525 ++	ENDFUNC(GLOBAL(movstrSI40))
   1.526 ++	ENDFUNC(GLOBAL(movstrSI36))
   1.527 ++	ENDFUNC(GLOBAL(movstrSI32))
   1.528 ++	ENDFUNC(GLOBAL(movstrSI28))
   1.529 ++	ENDFUNC(GLOBAL(movstrSI24))
   1.530 ++	ENDFUNC(GLOBAL(movstrSI20))
   1.531 ++	ENDFUNC(GLOBAL(movstrSI16))
   1.532 ++	ENDFUNC(GLOBAL(movstrSI12))
   1.533 ++	ENDFUNC(GLOBAL(movstrSI8))
   1.534 ++	ENDFUNC(GLOBAL(movstrSI4))
   1.535 ++	ENDFUNC(GLOBAL(movstrSI0))
   1.536 ++
   1.537 + 	.align	4
   1.538 + 
   1.539 + 	.global	GLOBAL(movstr)
   1.540 ++	FUNC(GLOBAL(movstr))
   1.541 + GLOBAL(movstr):
   1.542 + 	mov.l	@(60,r5),r0
   1.543 + 	mov.l	r0,@(60,r4)
   1.544 +@@ -775,6 +895,8 @@
   1.545 + 	add	#64,r5
   1.546 + 	bra	GLOBAL(movstr)
   1.547 + 	add	#64,r4
   1.548 ++
   1.549 ++	FUNC(GLOBAL(movstr))
   1.550 + #endif
   1.551 + 
   1.552 + #ifdef L_movstr_i4
   1.553 +@@ -783,6 +905,10 @@
   1.554 + 	.global	GLOBAL(movstr_i4_odd)
   1.555 + 	.global	GLOBAL(movstrSI12_i4)
   1.556 + 
   1.557 ++	FUNC(GLOBAL(movstr_i4_even))
   1.558 ++	FUNC(GLOBAL(movstr_i4_odd))
   1.559 ++	FUNC(GLOBAL(movstrSI12_i4))
   1.560 ++
   1.561 + 	.p2align	5
   1.562 + L_movstr_2mod4_end:
   1.563 + 	mov.l	r0,@(16,r4)
   1.564 +@@ -791,6 +917,11 @@
   1.565 + 
   1.566 + 	.p2align	2
   1.567 + 
   1.568 ++GLOBAL(movstr_i4_even):
   1.569 ++	mov.l	@r5+,r0
   1.570 ++	bra	L_movstr_start_even
   1.571 ++	mov.l	@r5+,r1
   1.572 ++
   1.573 + GLOBAL(movstr_i4_odd):
   1.574 + 	mov.l	@r5+,r1
   1.575 + 	add	#-4,r4
   1.576 +@@ -817,10 +948,8 @@
   1.577 + 	rts
   1.578 + 	mov.l	r3,@(12,r4)
   1.579 + 
   1.580 +-GLOBAL(movstr_i4_even):
   1.581 +-	mov.l	@r5+,r0
   1.582 +-	bra	L_movstr_start_even
   1.583 +-	mov.l	@r5+,r1
   1.584 ++	ENDFUNC(GLOBAL(movstr_i4_even))
   1.585 ++	ENDFUNC(GLOBAL(movstr_i4_odd))
   1.586 + 
   1.587 + 	.p2align	4
   1.588 + GLOBAL(movstrSI12_i4):
   1.589 +@@ -831,12 +960,16 @@
   1.590 + 	mov.l	r1,@(4,r4)
   1.591 + 	rts
   1.592 + 	mov.l	r2,@(8,r4)
   1.593 ++
   1.594 ++	ENDFUNC(GLOBAL(movstrSI12_i4))
   1.595 ++
   1.596 + #endif
   1.597 + 
   1.598 + #ifdef L_mulsi3
   1.599 + 
   1.600 + 
   1.601 + 	.global	GLOBAL(mulsi3)
   1.602 ++	FUNC(GLOBAL(mulsi3))
   1.603 + 
   1.604 + ! r4 =       aabb
   1.605 + ! r5 =       ccdd
   1.606 +@@ -869,7 +1002,7 @@
   1.607 + 	rts
   1.608 + 	add	r2,r0
   1.609 + 
   1.610 +-
   1.611 ++	FUNC(GLOBAL(mulsi3))
   1.612 + #endif
   1.613 + #endif /* ! __SH5__ */
   1.614 + #ifdef L_sdivsi3_i4
   1.615 +@@ -879,6 +1012,7 @@
   1.616 + !! args in r4 and r5, result in fpul, clobber dr0, dr2
   1.617 + 
   1.618 + 	.global	GLOBAL(sdivsi3_i4)
   1.619 ++	FUNC(GLOBAL(sdivsi3_i4))
   1.620 + GLOBAL(sdivsi3_i4):
   1.621 + 	lds r4,fpul
   1.622 + 	float fpul,dr0
   1.623 +@@ -888,6 +1022,8 @@
   1.624 + 	rts
   1.625 + 	ftrc dr0,fpul
   1.626 + 
   1.627 ++	ENDFUNC(GLOBAL(sdivsi3_i4))
   1.628 ++
   1.629 + #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
   1.630 + !! args in r4 and r5, result in fpul, clobber r2, dr0, dr2
   1.631 + 
   1.632 +@@ -896,6 +1032,7 @@
   1.633 + 	.mode	SHcompact
   1.634 + #endif
   1.635 + 	.global	GLOBAL(sdivsi3_i4)
   1.636 ++	FUNC(GLOBAL(sdivsi3_i4))
   1.637 + GLOBAL(sdivsi3_i4):
   1.638 + 	sts.l fpscr,@-r15
   1.639 + 	mov #8,r2
   1.640 +@@ -910,6 +1047,8 @@
   1.641 + 	rts
   1.642 + 	lds.l @r15+,fpscr
   1.643 + 
   1.644 ++	ENDFUNC(GLOBAL(sdivsi3_i4))
   1.645 ++
   1.646 + #endif /* ! __SH5__ || __SH5__ == 32 */
   1.647 + #endif /* ! __SH4__ */
   1.648 + #endif
   1.649 +@@ -924,9 +1063,10 @@
   1.650 + !!
   1.651 + !!
   1.652 + 
   1.653 +-!! args in r4 and r5, result in r0 clobber r1,r2,r3
   1.654 ++!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit
   1.655 + 
   1.656 + 	.global	GLOBAL(sdivsi3)
   1.657 ++	FUNC(GLOBAL(sdivsi3))
   1.658 + #if __SHMEDIA__
   1.659 + #if __SH5__ == 32
   1.660 + 	.section	.text..SHmedia32,"ax"
   1.661 +@@ -1076,6 +1216,7 @@
   1.662 + div0:	rts
   1.663 + 	mov	#0,r0
   1.664 + 
   1.665 ++	ENDFUNC(GLOBAL(sdivsi3))
   1.666 + #endif /* ! __SHMEDIA__ */
   1.667 + #endif /* ! __SH4__ */
   1.668 + #endif
   1.669 +@@ -1084,9 +1225,11 @@
   1.670 + 	.title "SH DIVIDE"
   1.671 + !! 4 byte integer Divide code for the Hitachi SH
   1.672 + #ifdef __SH4__
   1.673 +-!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
   1.674 ++!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4,
   1.675 ++!! and t bit
   1.676 + 
   1.677 + 	.global	GLOBAL(udivsi3_i4)
   1.678 ++	FUNC(GLOBAL(udivsi3_i4))
   1.679 + GLOBAL(udivsi3_i4):
   1.680 + 	mov #1,r1
   1.681 + 	cmp/hi r1,r5
   1.682 +@@ -1127,6 +1270,8 @@
   1.683 + L1:
   1.684 + 	.double 2147483648
   1.685 + 
   1.686 ++	ENDFUNC(GLOBAL(udivsi3_i4))
   1.687 ++
   1.688 + #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
   1.689 + !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
   1.690 + 
   1.691 +@@ -1135,6 +1280,7 @@
   1.692 + 	.mode	SHcompact
   1.693 + #endif
   1.694 + 	.global	GLOBAL(udivsi3_i4)
   1.695 ++	FUNC(GLOBAL(udivsi3_i4))
   1.696 + GLOBAL(udivsi3_i4):
   1.697 + 	mov #1,r1
   1.698 + 	cmp/hi r1,r5
   1.699 +@@ -1183,6 +1329,8 @@
   1.700 + #endif
   1.701 + 	.double 2147483648
   1.702 + 
   1.703 ++	ENDFUNC(GLOBAL(udivsi3_i4))
   1.704 ++
   1.705 + #endif /* ! __SH5__ || __SH5__ == 32 */
   1.706 + #endif /* ! __SH4__ */
   1.707 + #endif
   1.708 +@@ -1199,6 +1347,7 @@
   1.709 + 
   1.710 + !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
   1.711 + 	.global	GLOBAL(udivsi3)
   1.712 ++	FUNC(GLOBAL(udivsi3))
   1.713 + 
   1.714 + #if __SHMEDIA__
   1.715 + #if __SH5__ == 32
   1.716 +@@ -1299,6 +1448,8 @@
   1.717 + ret:	rts
   1.718 + 	mov	r4,r0
   1.719 + 
   1.720 ++	ENDFUNC(GLOBAL(udivsi3))
   1.721 ++
   1.722 + #endif /* ! __SHMEDIA__ */
   1.723 + #endif /* __SH4__ */
   1.724 + #endif
   1.725 +@@ -1308,6 +1459,7 @@
   1.726 + 	.mode	SHcompact
   1.727 + #endif
   1.728 + 	.global GLOBAL(set_fpscr)
   1.729 ++	FUNC(GLOBAL(set_fpscr))
   1.730 + GLOBAL(set_fpscr):
   1.731 + 	lds r4,fpscr
   1.732 + 	mov.l LOCAL(set_fpscr_L1),r1
   1.733 +@@ -1340,11 +1492,16 @@
   1.734 + 	.align 2
   1.735 + LOCAL(set_fpscr_L1):
   1.736 + 	.long GLOBAL(fpscr_values)
   1.737 ++
   1.738 ++	ENDFUNC(GLOBAL(set_fpscr))
   1.739 ++
   1.740 ++#ifndef NO_FPSCR_VALUES
   1.741 + #ifdef __ELF__
   1.742 +         .comm   GLOBAL(fpscr_values),8,4
   1.743 + #else
   1.744 +         .comm   GLOBAL(fpscr_values),8
   1.745 + #endif /* ELF */
   1.746 ++#endif /* NO_FPSCR_VALUES */
   1.747 + #endif /* SH3E / SH4 */
   1.748 + #endif /* L_set_fpscr */
   1.749 + #ifdef L_ic_invalidate
   1.750 +@@ -1360,6 +1517,7 @@
   1.751 + 	blink	tr0, r63
   1.752 + #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
   1.753 + 	.global GLOBAL(ic_invalidate)
   1.754 ++	FUNC(GLOBAL(ic_invalidate))
   1.755 + GLOBAL(ic_invalidate):
   1.756 + 	ocbwb	@r4
   1.757 + 	mova	0f,r0
   1.758 +@@ -1382,6 +1540,9 @@
   1.759 + 	nop
   1.760 + 	.endr
   1.761 + 	.endr
   1.762 ++
   1.763 ++	ENDFUNC(GLOBAL(ic_invalidate))
   1.764 ++
   1.765 + #endif /* SH4 */
   1.766 + #endif /* L_ic_invalidate */
   1.767 + 
   1.768 +diff -ruN gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver gcc-20030210/gcc/config/sh/libgcc-glibc.ver
   1.769 +--- gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver	Thu Jan  1 09:00:00 1970
   1.770 ++++ gcc-20030210/gcc/config/sh/libgcc-glibc.ver	Sat Feb 22 01:40:14 2003
   1.771 +@@ -0,0 +1,21 @@
   1.772 ++# In order to work around the very problems that force us to now generally
   1.773 ++# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
   1.774 ++# By now choosing the same version tags for these specific routines, we
   1.775 ++# maintain enough binary compatibility to allow future versions of glibc
   1.776 ++# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
   1.777 ++
   1.778 ++# Note that we cannot use the default libgcc-glibc.ver file on sh,
   1.779 ++# because GLIBC_2.0 does not exist on this architecture, as the first 
   1.780 ++# ever glibc release on the platform was GLIBC_2.2.
   1.781 ++
   1.782 ++%inherit GCC_3.0 GLIBC_2.2
   1.783 ++GLIBC_2.2 {
   1.784 ++  __register_frame
   1.785 ++  __register_frame_table
   1.786 ++  __deregister_frame
   1.787 ++  __register_frame_info
   1.788 ++  __deregister_frame_info
   1.789 ++  __frame_state_for
   1.790 ++  __register_frame_info_table
   1.791 ++}
   1.792 ++
   1.793 +diff -ruN gcc-20030210.orig/gcc/config/sh/linux.h gcc-20030210/gcc/config/sh/linux.h
   1.794 +--- gcc-20030210.orig/gcc/config/sh/linux.h	Tue Apr 16 05:27:42 2002
   1.795 ++++ gcc-20030210/gcc/config/sh/linux.h	Sat Feb 22 01:40:14 2003
   1.796 +@@ -19,6 +19,10 @@
   1.797 + the Free Software Foundation, 59 Temple Place - Suite 330,
   1.798 + Boston, MA 02111-1307, USA.  */
   1.799 + 
   1.800 ++/* We're not SYSVR4, not having /usr/ccs */
   1.801 ++#undef MD_EXEC_PREFIX
   1.802 ++#undef MD_STARTFILE_PREFIX
   1.803 ++
   1.804 + /* Run-time Target Specification.  */
   1.805 + #undef TARGET_VERSION
   1.806 + #define TARGET_VERSION  fputs (" (SH GNU/Linux with ELF)", stderr);
   1.807 +@@ -39,6 +43,28 @@
   1.808 + #undef WCHAR_TYPE_SIZE
   1.809 + #define WCHAR_TYPE_SIZE BITS_PER_WORD
   1.810 + 
   1.811 ++/* This was defined in linux.h.  Define it here also. */
   1.812 ++#undef  DEFAULT_VTABLE_THUNKS
   1.813 ++#define DEFAULT_VTABLE_THUNKS   1
   1.814 ++
   1.815 ++/* Likewise.  */
   1.816 ++#define HANDLE_PRAGMA_PACK_PUSH_POP
   1.817 ++
   1.818 ++/* Pick up the return address upon entry to a procedure. Used for
   1.819 ++   dwarf2 unwind information.  This also enables the table driven
   1.820 ++   mechanism.  */
   1.821 ++
   1.822 ++#define INCOMING_RETURN_ADDR_RTX	gen_rtx_REG (Pmode, PR_REG)
   1.823 ++#define DWARF_FRAME_RETURN_COLUMN	DWARF_FRAME_REGNUM (PR_REG)
   1.824 ++
   1.825 ++#undef CPP_SPEC
   1.826 ++#define CPP_SPEC "\
   1.827 ++   %{m4:-D__SH4__} \
   1.828 ++   %{!m4:%(cpp_default_cpu_spec)} \
   1.829 ++   %(subtarget_cpp_spec) \
   1.830 ++   %(subtarget_cpp_ptr_spec) \
   1.831 ++   %(subtarget_cpp_endian_spec) "
   1.832 ++
   1.833 + #undef SUBTARGET_CPP_SPEC
   1.834 + #define SUBTARGET_CPP_SPEC "\
   1.835 +    %{fPIC:-D__PIC__ -D__pic__} \
   1.836 +@@ -55,36 +81,45 @@
   1.837 + #undef CPP_DEFAULT_CPU_SPEC
   1.838 + #define CPP_DEFAULT_CPU_SPEC "-D__SH3__ -D__sh3__"
   1.839 + 
   1.840 +-
   1.841 + #undef CPP_PREDEFINES
   1.842 + #define CPP_PREDEFINES "-D__ELF__ -Dunix -D__sh__ -D__gnu_linux__ -Dlinux -Asystem=posix"
   1.843 + 
   1.844 ++/* The GNU C++ standard library requires that these macros be defined.  */
   1.845 ++#undef CPLUSPLUS_CPP_SPEC
   1.846 ++#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
   1.847 ++
   1.848 + #undef ASM_SPEC
   1.849 +-#define ASM_SPEC  "%{!mb:-little} %{mrelax:-relax}"
   1.850 ++#define ASM_SPEC  "%{mb:-big} %{!mb:-little} %{mrelax:-relax}"
   1.851 + 
   1.852 + #undef CC1_SPEC
   1.853 + #define CC1_SPEC \
   1.854 +-  "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
   1.855 +-
   1.856 +-#undef CC1PLUS_SPEC
   1.857 +-#define CC1PLUS_SPEC \
   1.858 +-  "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
   1.859 ++  "-musermode %{!mb:-ml} %{!m4:-m3} %{profile:-p}"
   1.860 + 
   1.861 ++/* XXX: It's wrong if prefix != /usr */
   1.862 + #undef LINK_SPEC
   1.863 + #define LINK_SPEC \
   1.864 +-  "%{!mb:-m shlelf_linux} %{mrelax:-relax} \
   1.865 ++  "%{!mb:-m shlelf_linux -EL} %{mb:-m shelf_linux -EB} %{mrelax:-relax} \
   1.866 +    %{shared:-shared} \
   1.867 +    %{!static: \
   1.868 +      %{rdynamic:-export-dynamic} \
   1.869 +      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
   1.870 +-     %{!rpath:-rpath /lib}} \
   1.871 ++     %{!mb:%{!m4:-rpath-link /usr/sh-linux/lib }} \
   1.872 ++     %{!mb:%{m4:-rpath-link /usr/sh-linux/lib/m4 }} \
   1.873 ++     %{mb:%{!m4:-rpath-link /usr/sh-linux/lib/mb }} \
   1.874 ++     %{mb:%{m4:-rpath-link /usr/sh-linux/lib/mb/m4 }}} \
   1.875 +    %{static:-static}"
   1.876 + 
   1.877 + #undef LIB_SPEC
   1.878 ++#undef LIB_SPEC
   1.879 + #define LIB_SPEC \
   1.880 +   "%{shared: -lc} \
   1.881 +-   %{!shared: %{pthread:-lthread} \
   1.882 +-     %{profile:-lc_p} %{!profile: -lc}}"
   1.883 ++   %{!shared: %{mieee:-lieee} %{pthread:-lpthread} \
   1.884 ++	%{profile:-lc_p} %{!profile: -lc}}"
   1.885 ++
   1.886 ++#if defined(HAVE_LD_EH_FRAME_HDR)
   1.887 ++#undef LINK_EH_SPEC
   1.888 ++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
   1.889 ++#endif
   1.890 + 
   1.891 + #undef STARTFILE_SPEC
   1.892 + #define STARTFILE_SPEC \
   1.893 +@@ -92,4 +127,40 @@
   1.894 +      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
   1.895 + 		       %{!p:%{profile:gcrt1.o%s} \
   1.896 + 			 %{!profile:crt1.o%s}}}} \
   1.897 +-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
   1.898 ++   crti.o%s %{static:crtbeginT.o%s}\
   1.899 ++   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
   1.900 ++
   1.901 ++#undef FUNCTION_PROFILER
   1.902 ++#define FUNCTION_PROFILER(STREAM,LABELNO)				\
   1.903 ++do									\
   1.904 ++{									\
   1.905 ++  if (flag_pic)								\
   1.906 ++    {									\
   1.907 ++      fprintf (STREAM, "	mov.l	3f,r1\n");			\
   1.908 ++      fprintf (STREAM, "	mova	3f,r0\n");			\
   1.909 ++      fprintf (STREAM, "	add	r1,r0\n");			\
   1.910 ++      fprintf (STREAM, "	mov.l	1f,r1\n");			\
   1.911 ++      fprintf (STREAM, "	mov.l	@(r0,r1),r1\n");		\
   1.912 ++    }									\
   1.913 ++  else									\
   1.914 ++    {									\
   1.915 ++      fprintf (STREAM, "	mov.l	1f,r1\n");			\
   1.916 ++    }									\
   1.917 ++  fprintf (STREAM, "	sts.l	pr,@-r15\n");				\
   1.918 ++  fprintf (STREAM, "	mova	2f,r0\n");				\
   1.919 ++  fprintf (STREAM, "	jmp	@r1\n");				\
   1.920 ++  fprintf (STREAM, "	lds	r0,pr\n");				\
   1.921 ++  fprintf (STREAM, "	.align	2\n");					\
   1.922 ++  if (flag_pic)								\
   1.923 ++    {									\
   1.924 ++      fprintf (STREAM, "1:	.long	mcount@GOT\n");			\
   1.925 ++      fprintf (STREAM, "3:	.long	_GLOBAL_OFFSET_TABLE_\n");	\
   1.926 ++    }									\
   1.927 ++  else									\
   1.928 ++    {									\
   1.929 ++      fprintf (STREAM, "1:	.long	mcount\n");			\
   1.930 ++    }									\
   1.931 ++  fprintf (STREAM, "2:	lds.l	@r15+,pr\n");				\
   1.932 ++} while (0)
   1.933 ++
   1.934 ++#define NO_SHARED_LIBGCC_MULTILIB
   1.935 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh-protos.h gcc-20030210/gcc/config/sh/sh-protos.h
   1.936 +--- gcc-20030210.orig/gcc/config/sh/sh-protos.h	Fri Feb 22 01:42:28 2002
   1.937 ++++ gcc-20030210/gcc/config/sh/sh-protos.h	Sat Feb 22 01:40:14 2003
   1.938 +@@ -74,6 +74,7 @@
   1.939 + extern int shl_sext_length PARAMS ((rtx));
   1.940 + extern int gen_shl_sext PARAMS ((rtx, rtx, rtx, rtx));
   1.941 + extern rtx gen_datalabel_ref PARAMS ((rtx));
   1.942 ++extern int shl_casesi_worker_length PARAMS ((rtx));
   1.943 + extern int regs_used PARAMS ((rtx, int));
   1.944 + extern void fixup_addr_diff_vecs PARAMS ((rtx));
   1.945 + extern int get_dest_uid PARAMS ((rtx, int));
   1.946 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh.c gcc-20030210/gcc/config/sh/sh.c
   1.947 +--- gcc-20030210.orig/gcc/config/sh/sh.c	Fri Feb 22 01:42:28 2002
   1.948 ++++ gcc-20030210/gcc/config/sh/sh.c	Sat Feb 22 01:40:14 2003
   1.949 +@@ -2143,6 +2143,48 @@
   1.950 +   return sym;
   1.951 + }
   1.952 + 
   1.953 ++
   1.954 ++/* Function to be used in the length attribute of the casesi_worker
   1.955 ++   instruction.  Returns number of instructions, which is half of the
   1.956 ++   length of bytes. */
   1.957 ++
   1.958 ++int
   1.959 ++shl_casesi_worker_length (insn)
   1.960 ++     rtx insn;
   1.961 ++{
   1.962 ++  rtx set_src, label;
   1.963 ++  rtx diff_vec;
   1.964 ++
   1.965 ++  set_src = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
   1.966 ++  if (!(GET_CODE (set_src) == UNSPEC
   1.967 ++	&& XINT (set_src, 1) == UNSPEC_CASESI))
   1.968 ++    abort ();
   1.969 ++
   1.970 ++  label = XVECEXP (set_src, 0, 2);
   1.971 ++  if (GET_CODE (label) != LABEL_REF)
   1.972 ++    abort ();
   1.973 ++
   1.974 ++  diff_vec = PATTERN (next_real_insn (XEXP (label, 0)));
   1.975 ++
   1.976 ++  if (GET_CODE (diff_vec) != ADDR_DIFF_VEC)
   1.977 ++    abort ();
   1.978 ++
   1.979 ++  switch (GET_MODE (diff_vec))
   1.980 ++    {
   1.981 ++    case SImode:
   1.982 ++      return 2;
   1.983 ++    case HImode:
   1.984 ++      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
   1.985 ++	return 3;
   1.986 ++      return 2;
   1.987 ++    case QImode:
   1.988 ++      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
   1.989 ++	return 2;
   1.990 ++      return 1;
   1.991 ++    default:
   1.992 ++      abort ();
   1.993 ++    }
   1.994 ++}
   1.995 + 
   1.996 + /* The SH cannot load a large constant into a register, constants have to
   1.997 +    come from a pc relative load.  The reference of a pc relative load
   1.998 +@@ -3190,7 +3232,7 @@
   1.999 +       vec_lab = XEXP (XEXP (pat, 0), 0);
  1.1000 + 
  1.1001 +       /* Search the matching casesi_jump_2.  */
  1.1002 +-      for (prev = vec_lab; ; prev = PREV_INSN (prev))
  1.1003 ++      for (prev = vec_lab; prev; prev = PREV_INSN (prev))
  1.1004 + 	{
  1.1005 + 	  if (GET_CODE (prev) != JUMP_INSN)
  1.1006 + 	    continue;
  1.1007 +@@ -3205,6 +3247,13 @@
  1.1008 + 	    break;
  1.1009 + 	}
  1.1010 + 
  1.1011 ++      if (prev == NULL)
  1.1012 ++	{			/* Switch statement has been optimized out.  */
  1.1013 ++	  delete_insn (PREV_INSN (insn));
  1.1014 ++	  delete_insn (insn);
  1.1015 ++	  continue;
  1.1016 ++	}
  1.1017 ++
  1.1018 +       /* Emit the reference label of the braf where it belongs, right after
  1.1019 + 	 the casesi_jump_2 (i.e. braf).  */
  1.1020 +       braf_label = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);
  1.1021 +@@ -3223,7 +3272,7 @@
  1.1022 +      rtx barrier_or_label;
  1.1023 + {
  1.1024 +   rtx next = next_real_insn (barrier_or_label), pat, prev;
  1.1025 +-  int slot, credit, jump_to_next;
  1.1026 ++  int slot, credit, jump_to_next = 0;
  1.1027 +  
  1.1028 +   if (! next)
  1.1029 +     return 0;
  1.1030 +@@ -4507,7 +4556,8 @@
  1.1031 +   if (current_function_varargs || current_function_stdarg)
  1.1032 +     {
  1.1033 +       /* This is not used by the SH3E calling convention  */
  1.1034 +-      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI)
  1.1035 ++      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI
  1.1036 ++	  || TARGET_NO_IMPLICIT_FP)
  1.1037 + 	{
  1.1038 + 	  /* Push arg regs as if they'd been provided by caller in stack.  */
  1.1039 + 	  for (i = 0; i < NPARM_REGS(SImode); i++)
  1.1040 +@@ -5149,7 +5199,8 @@
  1.1041 +   tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
  1.1042 +   tree record;
  1.1043 + 
  1.1044 +-  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
  1.1045 ++  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI
  1.1046 ++      || TARGET_NO_IMPLICIT_FP)
  1.1047 +     return ptr_type_node;
  1.1048 + 
  1.1049 +   record = make_node (RECORD_TYPE);
  1.1050 +@@ -5211,7 +5262,8 @@
  1.1051 +       return;
  1.1052 +     }
  1.1053 + 
  1.1054 +-  if ((! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
  1.1055 ++  if ((! TARGET_SH3E && ! TARGET_SH4)
  1.1056 ++      || TARGET_HITACHI || TARGET_NO_IMPLICIT_FP)
  1.1057 +     {
  1.1058 +       std_expand_builtin_va_start (stdarg_p, valist, nextarg);
  1.1059 +       return;
  1.1060 +@@ -5289,7 +5341,8 @@
  1.1061 +   rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
  1.1062 +   pptr_type_node = build_pointer_type (ptr_type_node);
  1.1063 + 
  1.1064 +-  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4) && ! TARGET_HITACHI)
  1.1065 ++  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4)
  1.1066 ++      && ! TARGET_HITACHI && ! TARGET_NO_IMPLICIT_FP)
  1.1067 +     {
  1.1068 +       tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
  1.1069 +       tree next_o, next_o_limit, next_fp, next_fp_limit, next_stack;
  1.1070 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh.h gcc-20030210/gcc/config/sh/sh.h
  1.1071 +--- gcc-20030210.orig/gcc/config/sh/sh.h	Fri Feb 22 01:42:28 2002
  1.1072 ++++ gcc-20030210/gcc/config/sh/sh.h	Sat Feb 22 01:40:14 2003
  1.1073 +@@ -147,10 +147,10 @@
  1.1074 + #define HARD_SH4_BIT	(1<<5)
  1.1075 + #define FPU_SINGLE_BIT	(1<<7)
  1.1076 + #define SH4_BIT	       	(1<<12)
  1.1077 ++#define NO_IMPLICIT_FP_BIT	(1<<3)
  1.1078 + #define FMOVD_BIT	(1<<4)
  1.1079 + #define SH5_BIT		(1<<0)
  1.1080 + #define SPACE_BIT 	(1<<13)
  1.1081 +-#define BIGTABLE_BIT  	(1<<14)
  1.1082 + #define RELAX_BIT	(1<<15)
  1.1083 + #define USERMODE_BIT	(1<<16)
  1.1084 + #define HITACHI_BIT     (1<<22)
  1.1085 +@@ -205,6 +205,9 @@
  1.1086 + /* Nonzero if we should generate code for a SH5 CPU (either ISA).  */
  1.1087 + #define TARGET_SH5 (target_flags & SH5_BIT)
  1.1088 + 
  1.1089 ++/* Nonzero if we should not use FPU implicitly.  */
  1.1090 ++#define TARGET_NO_IMPLICIT_FP (target_flags & NO_IMPLICIT_FP_BIT)
  1.1091 ++
  1.1092 + /* Nonzero if we should generate code using the SHcompact instruction
  1.1093 +    set and 32-bit ABI.  */
  1.1094 + #define TARGET_SHCOMPACT (TARGET_SH5 && TARGET_SH1)
  1.1095 +@@ -225,6 +228,7 @@
  1.1096 + 
  1.1097 + /* Nonzero if we should generate code using SHmedia FPU instructions.  */
  1.1098 + #define TARGET_SHMEDIA_FPU (TARGET_SHMEDIA && TARGET_FPU_DOUBLE)
  1.1099 ++
  1.1100 + /* Nonzero if we should generate fmovd.  */
  1.1101 + #define TARGET_FMOVD (target_flags & FMOVD_BIT)
  1.1102 + 
  1.1103 +@@ -234,9 +238,6 @@
  1.1104 + /* Nonzero if we should generate smaller code rather than faster code.  */
  1.1105 + #define TARGET_SMALLCODE   (target_flags & SPACE_BIT)
  1.1106 + 
  1.1107 +-/* Nonzero to use long jump tables.  */
  1.1108 +-#define TARGET_BIGTABLE     (target_flags & BIGTABLE_BIT)
  1.1109 +-
  1.1110 + /* Nonzero to generate pseudo-ops needed by the assembler and linker
  1.1111 +    to do function call relaxing.  */
  1.1112 + #define TARGET_RELAX (target_flags & RELAX_BIT)
  1.1113 +@@ -297,7 +298,6 @@
  1.1114 +   {"5-compact-nofpu", TARGET_NONE, "" },	\
  1.1115 +   {"5-compact-nofpu", SH5_BIT|SH3_BIT|SH2_BIT|SH1_BIT, "Generate FPU-less SHcompact code" }, \
  1.1116 +   {"b",		-LITTLE_ENDIAN_BIT, "" },  	\
  1.1117 +-  {"bigtable", 	BIGTABLE_BIT, "" },		\
  1.1118 +   {"dalign",  	DALIGN_BIT, "" },		\
  1.1119 +   {"fmovd",  	FMOVD_BIT, "" },		\
  1.1120 +   {"hitachi",	HITACHI_BIT, "" },		\
  1.1121 +@@ -306,6 +306,7 @@
  1.1122 +   {"isize", 	ISIZE_BIT, "" },		\
  1.1123 +   {"l",		LITTLE_ENDIAN_BIT, "" },  	\
  1.1124 +   {"no-ieee",  	-IEEE_BIT, "" },		\
  1.1125 ++  {"no-implicit-fp", NO_IMPLICIT_FP_BIT, "" },	\
  1.1126 +   {"padstruct", PADSTRUCT_BIT, "" },    	\
  1.1127 +   {"prefergot",	PREFERGOT_BIT, "" },		\
  1.1128 +   {"relax",	RELAX_BIT, "" },		\
  1.1129 +@@ -2493,16 +2494,22 @@
  1.1130 +     goto LABEL;								\
  1.1131 + }
  1.1132 + 
  1.1133 ++extern int optimize; /* needed for gen_casesi.  */
  1.1134 ++extern int optimize_size;
  1.1135 ++
  1.1136 + /* Specify the machine mode that this machine uses
  1.1137 +    for the index in the tablejump instruction.  */
  1.1138 +-#define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)
  1.1139 ++#define CASE_VECTOR_MODE SImode
  1.1140 + 
  1.1141 + #define CASE_VECTOR_SHORTEN_MODE(MIN_OFFSET, MAX_OFFSET, BODY) \
  1.1142 + ((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 127 \
  1.1143 +  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, QImode) \
  1.1144 +  : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 255 \
  1.1145 +  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, QImode) \
  1.1146 +- : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 ? HImode \
  1.1147 ++ : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 \
  1.1148 ++ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, HImode) \
  1.1149 ++ : optimize_size && (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 65535 \
  1.1150 ++ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, HImode) \
  1.1151 +  : SImode)
  1.1152 + 
  1.1153 + /* Define as C expression which evaluates to nonzero if the tablejump
  1.1154 +@@ -3038,10 +3045,7 @@
  1.1155 + /* Output an absolute table element.  */
  1.1156 + 
  1.1157 + #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)  				\
  1.1158 +-  if (TARGET_BIGTABLE) 							\
  1.1159 +-    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); 			\
  1.1160 +-  else									\
  1.1161 +-    asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); 			\
  1.1162 ++    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE))
  1.1163 + 
  1.1164 + /* Output various types of constants.  */
  1.1165 + 
  1.1166 +@@ -3167,8 +3171,6 @@
  1.1167 + #define sh_cpu_attr ((enum attr_cpu)sh_cpu)
  1.1168 + extern enum processor_type sh_cpu;
  1.1169 + 
  1.1170 +-extern int optimize; /* needed for gen_casesi.  */
  1.1171 +-
  1.1172 + enum mdep_reorg_phase_e
  1.1173 + {
  1.1174 +   SH_BEFORE_MDEP_REORG,
  1.1175 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh.md gcc-20030210/gcc/config/sh/sh.md
  1.1176 +--- gcc-20030210.orig/gcc/config/sh/sh.md	Sat Nov 23 04:58:06 2002
  1.1177 ++++ gcc-20030210/gcc/config/sh/sh.md	Sat Feb 22 01:40:14 2003
  1.1178 +@@ -1242,7 +1242,7 @@
  1.1179 +    (clobber (reg:SI PR_REG))
  1.1180 +    (clobber (reg:SI R4_REG))
  1.1181 +    (use (match_operand:SI 1 "arith_reg_operand" "r"))]
  1.1182 +-  "TARGET_SH1 && ! TARGET_SH4"
  1.1183 ++  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
  1.1184 +   "jsr	@%1%#"
  1.1185 +   [(set_attr "type" "sfunc")
  1.1186 +    (set_attr "needs_delay_slot" "yes")])
  1.1187 +@@ -1336,7 +1336,7 @@
  1.1188 + 
  1.1189 +   operands[3] = gen_reg_rtx (Pmode);
  1.1190 +   /* Emit the move of the address to a pseudo outside of the libcall.  */
  1.1191 +-  if (TARGET_HARD_SH4 && TARGET_SH3E)
  1.1192 ++  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
  1.1193 +     {
  1.1194 +       emit_move_insn (operands[3],
  1.1195 + 		      gen_rtx_SYMBOL_REF (SImode, \"__udivsi3_i4\"));
  1.1196 +@@ -1391,7 +1391,7 @@
  1.1197 +    (clobber (reg:SI R2_REG))
  1.1198 +    (clobber (reg:SI R3_REG))
  1.1199 +    (use (match_operand:SI 1 "arith_reg_operand" "r"))]
  1.1200 +-  "TARGET_SH1 && ! TARGET_SH4"
  1.1201 ++  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
  1.1202 +   "jsr	@%1%#"
  1.1203 +   [(set_attr "type" "sfunc")
  1.1204 +    (set_attr "needs_delay_slot" "yes")])
  1.1205 +@@ -1476,7 +1476,7 @@
  1.1206 + 
  1.1207 +   operands[3] = gen_reg_rtx (Pmode);
  1.1208 +   /* Emit the move of the address to a pseudo outside of the libcall.  */
  1.1209 +-  if (TARGET_HARD_SH4 && TARGET_SH3E)
  1.1210 ++  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
  1.1211 +     {
  1.1212 +       emit_move_insn (operands[3],
  1.1213 + 		      gen_rtx_SYMBOL_REF (SImode, \"__sdivsi3_i4\"));
  1.1214 +@@ -6446,6 +6446,8 @@
  1.1215 +     case SImode:
  1.1216 +       return \"shll2	%1\;mov.l	@(r0,%1),%0\";
  1.1217 +     case HImode:
  1.1218 ++      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
  1.1219 ++	return \"add	%1,%1\;mov.w	@(r0,%1),%0\;extu.w	%0,%0\";
  1.1220 +       return \"add	%1,%1\;mov.w	@(r0,%1),%0\";
  1.1221 +     case QImode:
  1.1222 +       if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
  1.1223 +@@ -6455,7 +6457,15 @@
  1.1224 +       abort ();
  1.1225 +     }
  1.1226 + }"
  1.1227 +-  [(set_attr "length" "4")])
  1.1228 ++  [(set (attr "length")
  1.1229 ++	(cond [(eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 1))
  1.1230 ++	       (const_string "2")
  1.1231 ++	       (eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 2))
  1.1232 ++	       (const_string "4")
  1.1233 ++	       ;; Put "match_dup" here so that insn_variable_length_p return 1.
  1.1234 ++	       (ne (match_dup 2) (match_dup 2))
  1.1235 ++	       (const_string "4")]
  1.1236 ++	      (const_string "6")))])
  1.1237 + 
  1.1238 + (define_insn "casesi_shift_media"
  1.1239 +   [(set (match_operand 0 "arith_reg_operand" "=r")
  1.1240 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh3-linux.h gcc-20030210/gcc/config/sh/sh3-linux.h
  1.1241 +--- gcc-20030210.orig/gcc/config/sh/sh3-linux.h	Thu Jan  1 09:00:00 1970
  1.1242 ++++ gcc-20030210/gcc/config/sh/sh3-linux.h	Sat Feb 22 01:40:14 2003
  1.1243 +@@ -0,0 +1,29 @@
  1.1244 ++#undef TARGET_VERSION
  1.1245 ++#define TARGET_VERSION  fputs (" (SH3 GNU/Linux with ELF)", stderr);
  1.1246 ++
  1.1247 ++#undef CPP_SPEC
  1.1248 ++#define CPP_SPEC \
  1.1249 ++  "-D__LITTLE_ENDIAN__ \
  1.1250 ++   -D__SH3__ -D__sh3__ \
  1.1251 ++   -D__SIZE_TYPE__=unsigned\\ int \
  1.1252 ++   -D__PTRDIFF_TYPE__=int \
  1.1253 ++   %{fPIC:-D__PIC__ -D__pic__} \
  1.1254 ++   %{fpic:-D__PIC__ -D__pic__} \
  1.1255 ++   %{posix:-D_POSIX_SOURCE} \
  1.1256 ++   %{pthread:-D_REENTRANT -D_PTHREADS}"
  1.1257 ++
  1.1258 ++#undef ASM_SPEC
  1.1259 ++#define ASM_SPEC  "%{mrelax:-relax}"
  1.1260 ++
  1.1261 ++#undef CC1_SPEC
  1.1262 ++#define CC1_SPEC \
  1.1263 ++  "-musermode -ml -m3 %{profile:-p}"
  1.1264 ++
  1.1265 ++#undef LINK_SPEC
  1.1266 ++#define LINK_SPEC \
  1.1267 ++  "%{mrelax:-relax} \
  1.1268 ++   %{shared:-shared} \
  1.1269 ++   %{!static: \
  1.1270 ++     %{rdynamic:-export-dynamic} \
  1.1271 ++     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
  1.1272 ++    %{static:-static}"
  1.1273 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h gcc-20030210/gcc/config/sh/sh3eb-linux.h
  1.1274 +--- gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h	Thu Jan  1 09:00:00 1970
  1.1275 ++++ gcc-20030210/gcc/config/sh/sh3eb-linux.h	Sat Feb 22 01:40:14 2003
  1.1276 +@@ -0,0 +1,29 @@
  1.1277 ++#undef TARGET_VERSION
  1.1278 ++#define TARGET_VERSION  fputs (" (SH3EB GNU/Linux with ELF)", stderr);
  1.1279 ++
  1.1280 ++#undef CPP_SPEC
  1.1281 ++#define CPP_SPEC \
  1.1282 ++  "-D__BIG_ENDIAN__ \
  1.1283 ++   -D__SH3__ -D__sh3__ \
  1.1284 ++   -D__SIZE_TYPE__=unsigned\\ int \
  1.1285 ++   -D__PTRDIFF_TYPE__=int \
  1.1286 ++   %{fPIC:-D__PIC__ -D__pic__} \
  1.1287 ++   %{fpic:-D__PIC__ -D__pic__} \
  1.1288 ++   %{posix:-D_POSIX_SOURCE} \
  1.1289 ++   %{pthread:-D_REENTRANT -D_PTHREADS}"
  1.1290 ++
  1.1291 ++#undef ASM_SPEC
  1.1292 ++#define ASM_SPEC  "%{mrelax:-relax}"
  1.1293 ++
  1.1294 ++#undef CC1_SPEC
  1.1295 ++#define CC1_SPEC \
  1.1296 ++  "-musermode -mb -m3 %{profile:-p}"
  1.1297 ++
  1.1298 ++#undef LINK_SPEC
  1.1299 ++#define LINK_SPEC \
  1.1300 ++  "%{mrelax:-relax} \
  1.1301 ++   %{shared:-shared} \
  1.1302 ++   %{!static: \
  1.1303 ++     %{rdynamic:-export-dynamic} \
  1.1304 ++     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
  1.1305 ++    %{static:-static}"
  1.1306 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh4-linux.h gcc-20030210/gcc/config/sh/sh4-linux.h
  1.1307 +--- gcc-20030210.orig/gcc/config/sh/sh4-linux.h	Thu Jan  1 09:00:00 1970
  1.1308 ++++ gcc-20030210/gcc/config/sh/sh4-linux.h	Sat Feb 22 01:40:14 2003
  1.1309 +@@ -0,0 +1,29 @@
  1.1310 ++#undef TARGET_VERSION
  1.1311 ++#define TARGET_VERSION  fputs (" (SH4 GNU/Linux with ELF)", stderr);
  1.1312 ++
  1.1313 ++#undef CPP_SPEC
  1.1314 ++#define CPP_SPEC \
  1.1315 ++  "-D__LITTLE_ENDIAN__ \
  1.1316 ++   -D__SH4__ \
  1.1317 ++   -D__SIZE_TYPE__=unsigned\\ int \
  1.1318 ++   -D__PTRDIFF_TYPE__=int \
  1.1319 ++   %{fPIC:-D__PIC__ -D__pic__} \
  1.1320 ++   %{fpic:-D__PIC__ -D__pic__} \
  1.1321 ++   %{posix:-D_POSIX_SOURCE} \
  1.1322 ++   %{pthread:-D_REENTRANT -D_PTHREADS}"
  1.1323 ++
  1.1324 ++#undef ASM_SPEC
  1.1325 ++#define ASM_SPEC  "%{mrelax:-relax}"
  1.1326 ++
  1.1327 ++#undef CC1_SPEC
  1.1328 ++#define CC1_SPEC \
  1.1329 ++  "-musermode -ml -m4 %{profile:-p}"
  1.1330 ++
  1.1331 ++#undef LINK_SPEC
  1.1332 ++#define LINK_SPEC \
  1.1333 ++  "%{mrelax:-relax} \
  1.1334 ++   %{shared:-shared} \
  1.1335 ++   %{!static: \
  1.1336 ++     %{rdynamic:-export-dynamic} \
  1.1337 ++     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
  1.1338 ++    %{static:-static}"
  1.1339 +diff -ruN gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h gcc-20030210/gcc/config/sh/sh4eb-linux.h
  1.1340 +--- gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h	Thu Jan  1 09:00:00 1970
  1.1341 ++++ gcc-20030210/gcc/config/sh/sh4eb-linux.h	Sat Feb 22 01:40:14 2003
  1.1342 +@@ -0,0 +1,29 @@
  1.1343 ++#undef TARGET_VERSION
  1.1344 ++#define TARGET_VERSION  fputs (" (SH4EB GNU/Linux with ELF)", stderr);
  1.1345 ++
  1.1346 ++#undef CPP_SPEC
  1.1347 ++#define CPP_SPEC \
  1.1348 ++  "-D__BIG_ENDIAN__ \
  1.1349 ++   -D__SH4__ \
  1.1350 ++   -D__SIZE_TYPE__=unsigned\\ int \
  1.1351 ++   -D__PTRDIFF_TYPE__=int \
  1.1352 ++   %{fPIC:-D__PIC__ -D__pic__} \
  1.1353 ++   %{fpic:-D__PIC__ -D__pic__} \
  1.1354 ++   %{posix:-D_POSIX_SOURCE} \
  1.1355 ++   %{pthread:-D_REENTRANT -D_PTHREADS}"
  1.1356 ++
  1.1357 ++#undef ASM_SPEC
  1.1358 ++#define ASM_SPEC  "%{mrelax:-relax}"
  1.1359 ++
  1.1360 ++#undef CC1_SPEC
  1.1361 ++#define CC1_SPEC \
  1.1362 ++  "-musermode -mb -m4 %{profile:-p}"
  1.1363 ++
  1.1364 ++#undef LINK_SPEC
  1.1365 ++#define LINK_SPEC \
  1.1366 ++  "%{mrelax:-relax} \
  1.1367 ++   %{shared:-shared} \
  1.1368 ++   %{!static: \
  1.1369 ++     %{rdynamic:-export-dynamic} \
  1.1370 ++     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
  1.1371 ++    %{static:-static}"
  1.1372 +diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux gcc-20030210/gcc/config/sh/t-linux
  1.1373 +--- gcc-20030210.orig/gcc/config/sh/t-linux	Thu May 17 12:16:12 2001
  1.1374 ++++ gcc-20030210/gcc/config/sh/t-linux	Sat Feb 22 01:40:14 2003
  1.1375 +@@ -1,10 +1,20 @@
  1.1376 +-TARGET_LIBGCC2_CFLAGS = -fpic
  1.1377 ++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
  1.1378 ++LIBGCC1 = libgcc1-asm.a
  1.1379 ++CROSS_LIBGCC1 = libgcc1-asm.a
  1.1380 ++LIBGCC1_TEST = libgcc1-test
  1.1381 + LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \
  1.1382 +   _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
  1.1383 +   _ic_invalidate
  1.1384 ++LIB2ADDEH = $(srcdir)/unwind-sjlj.c
  1.1385 ++LIB2ADDEHDEP = unwind.inc unwind-sjlj.c
  1.1386 + 
  1.1387 +-MULTILIB_OPTIONS= mb m3e/m4
  1.1388 ++MULTILIB_OPTIONS= mb m4
  1.1389 + MULTILIB_DIRNAMES= 
  1.1390 + MULTILIB_MATCHES = 
  1.1391 + 
  1.1392 +-EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
  1.1393 ++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
  1.1394 ++
  1.1395 ++# Override t-slibgcc-elf-ver to export some libgcc symbols with
  1.1396 ++# the symbol versions that glibc used and SH specific.
  1.1397 ++SHLIB_MAPFILES =  $(srcdir)/libgcc-std.ver \
  1.1398 ++		  $(srcdir)/config/sh/libgcc-glibc.ver
  1.1399 +diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux-nomulti gcc-20030210/gcc/config/sh/t-linux-nomulti
  1.1400 +--- gcc-20030210.orig/gcc/config/sh/t-linux-nomulti	Thu Jan  1 09:00:00 1970
  1.1401 ++++ gcc-20030210/gcc/config/sh/t-linux-nomulti	Sat Feb 22 01:40:14 2003
  1.1402 +@@ -0,0 +1,9 @@
  1.1403 ++LIBGCC = libgcc.a
  1.1404 ++EXTRA_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crtbeginT.o
  1.1405 ++
  1.1406 ++INSTALL_LIBGCC = install-libgcc
  1.1407 ++
  1.1408 ++MULTILIB_OPTIONS=
  1.1409 ++MULTILIB_DIRNAMES= 
  1.1410 ++MULTILIB_MATCHES = 
  1.1411 ++EXTRA_MULTILIB_PARTS=
  1.1412 +diff -ruN gcc-20030210.orig/gcc/config.gcc gcc-20030210/gcc/config.gcc
  1.1413 +--- gcc-20030210.orig/gcc/config.gcc	Fri Jan 31 19:17:13 2003
  1.1414 ++++ gcc-20030210/gcc/config.gcc	Sat Feb 22 01:40:14 2003
  1.1415 +@@ -337,9 +337,9 @@
  1.1416 + sparc*-*-*)
  1.1417 + 	cpu_type=sparc
  1.1418 + 	;;
  1.1419 +-sh64-*-*)
  1.1420 +-	cpu_type=sh
  1.1421 +-	;;
  1.1422 ++sh*-*-*)
  1.1423 ++ 	cpu_type=sh
  1.1424 ++ 	;;
  1.1425 + esac
  1.1426 + 
  1.1427 + tm_file=${cpu_type}/${cpu_type}.h
  1.1428 +@@ -3018,9 +3018,31 @@
  1.1429 + 	  thread_file='rtems'
  1.1430 + 	fi
  1.1431 + 	;;
  1.1432 +-sh-*-linux*)
  1.1433 ++sh*-*-linux*)
  1.1434 + 	tm_file="${tm_file} sh/elf.h sh/linux.h"
  1.1435 +-	tmake_file="sh/t-sh sh/t-elf sh/t-linux"
  1.1436 ++	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux sh/t-linux"
  1.1437 ++	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
  1.1438 ++	case $machine in
  1.1439 ++		sh3eb-*)
  1.1440 ++			tm_file="${tm_file} sh/sh3eb-linux.h"
  1.1441 ++			tmake_file="${tmake_file} sh/t-linux-nomulti"
  1.1442 ++			;;
  1.1443 ++		sh4eb-*)
  1.1444 ++			tm_file="${tm_file} sh/sh4eb-linux.h"
  1.1445 ++			tmake_file="${tmake_file} sh/t-linux-nomulti"
  1.1446 ++			;;
  1.1447 ++		sh3-*)
  1.1448 ++			tm_file="${tm_file} sh/sh3-linux.h"
  1.1449 ++			tmake_file="${tmake_file} sh/t-linux-nomulti"
  1.1450 ++			;;
  1.1451 ++		sh4-*)
  1.1452 ++			tm_file="${tm_file} sh/sh4-linux.h"
  1.1453 ++			tmake_file="${tmake_file} sh/t-linux-nomulti"
  1.1454 ++			;;
  1.1455 ++		*)
  1.1456 ++			;;
  1.1457 ++	esac
  1.1458 ++	xmake_file=x-linux
  1.1459 + 	gas=yes gnu_ld=yes
  1.1460 + 	float_format=sh
  1.1461 + 	;;
  1.1462 +diff -ruN gcc-20030210.orig/gcc/dwarf2out.c gcc-20030210/gcc/dwarf2out.c
  1.1463 +--- gcc-20030210.orig/gcc/dwarf2out.c	Mon Feb 10 19:36:25 2003
  1.1464 ++++ gcc-20030210/gcc/dwarf2out.c	Sat Feb 22 01:40:14 2003
  1.1465 +@@ -10224,7 +10224,9 @@
  1.1466 + 	  /* We can have a normal definition following an inline one in the
  1.1467 + 	     case of redefinition of GNU C extern inlines.
  1.1468 + 	     It seems reasonable to use AT_specification in this case.  */
  1.1469 +-	  && !get_AT_unsigned (old_die, DW_AT_inline))
  1.1470 ++	  && !get_AT_unsigned (old_die, DW_AT_inline)
  1.1471 ++	  /* Skip the nested function.  */
  1.1472 ++	  && !decl_function_context (decl))
  1.1473 + 	{
  1.1474 + 	  /* ??? This can happen if there is a bug in the program, for
  1.1475 + 	     instance, if it has duplicate function definitions.  Ideally,
  1.1476 +diff -ruN gcc-20030210.orig/gcc/final.c gcc-20030210/gcc/final.c
  1.1477 +--- gcc-20030210.orig/gcc/final.c	Fri Jan 31 19:17:20 2003
  1.1478 ++++ gcc-20030210/gcc/final.c	Sat Feb 22 01:40:14 2003
  1.1479 +@@ -1128,7 +1128,7 @@
  1.1480 + 	    }
  1.1481 + 	}
  1.1482 + 
  1.1483 +-      INSN_ADDRESSES (uid) = insn_current_address;
  1.1484 ++      INSN_ADDRESSES (uid) = insn_current_address + insn_lengths[uid];
  1.1485 + 
  1.1486 +       if (GET_CODE (insn) == NOTE || GET_CODE (insn) == BARRIER
  1.1487 + 	  || GET_CODE (insn) == CODE_LABEL)
  1.1488 +diff -ruN gcc-20030210.orig/gcc/mkmap-symver.awk gcc-20030210/gcc/mkmap-symver.awk
  1.1489 +--- gcc-20030210.orig/gcc/mkmap-symver.awk	Fri Jan 31 19:17:26 2003
  1.1490 ++++ gcc-20030210/gcc/mkmap-symver.awk	Sat Feb 22 01:40:14 2003
  1.1491 +@@ -89,7 +89,11 @@
  1.1492 +     output(inherit[lib]);
  1.1493 + 
  1.1494 +   printf("%s {\n", lib);
  1.1495 +-  printf("  global:\n");
  1.1496 ++  for (sym in ver)
  1.1497 ++    if ((ver[sym] == lib) && (sym in def))
  1.1498 ++      count++;
  1.1499 ++  if (count > 0)
  1.1500 ++    printf("  global:\n");
  1.1501 +   for (sym in ver)
  1.1502 +     if ((ver[sym] == lib) && (sym in def))
  1.1503 +       {
  1.1504 +diff -ruN gcc-20030210.orig/gcc/reload1.c gcc-20030210/gcc/reload1.c
  1.1505 +--- gcc-20030210.orig/gcc/reload1.c	Fri Jan 31 19:17:29 2003
  1.1506 ++++ gcc-20030210/gcc/reload1.c	Sat Feb 22 01:40:14 2003
  1.1507 +@@ -6103,6 +6103,7 @@
  1.1508 + 	    for (j = 0; j < n_reloads; j++)
  1.1509 + 	      if (rld[j].in != 0
  1.1510 + 		  && rld[j].when_needed != RELOAD_OTHER
  1.1511 ++		  && rld[j].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
  1.1512 + 		  && reg_overlap_mentioned_for_reload_p (rld[j].in,
  1.1513 + 							 rld[i].in))
  1.1514 + 		rld[j].when_needed
  1.1515 +diff -ruN gcc-20030210.orig/gcc/reorg.c gcc-20030210/gcc/reorg.c
  1.1516 +--- gcc-20030210.orig/gcc/reorg.c	Fri Jan 31 19:17:30 2003
  1.1517 ++++ gcc-20030210/gcc/reorg.c	Sat Feb 22 01:40:14 2003
  1.1518 +@@ -3265,6 +3265,14 @@
  1.1519 + 		|| condjump_in_parallel_p (XVECEXP (PATTERN (insn), 0, 0))))
  1.1520 + 	continue;
  1.1521 + 
  1.1522 ++#ifdef MD_CAN_REDIRECT_BRANCH
  1.1523 ++      /* On some targets, branches with delay slots can have a limited
  1.1524 ++	 displacement.  Give the back end a chance to tell us we can't do
  1.1525 ++	 this.  */
  1.1526 ++      if (! MD_CAN_REDIRECT_BRANCH (insn, delay_insn))
  1.1527 ++	continue;
  1.1528 ++#endif
  1.1529 ++
  1.1530 +       target_label = JUMP_LABEL (delay_insn);
  1.1531 + 
  1.1532 +       if (target_label)
  1.1533 +diff -ruN gcc-20030210.orig/gcc/tree-inline.c gcc-20030210/gcc/tree-inline.c
  1.1534 +--- gcc-20030210.orig/gcc/tree-inline.c	Fri Jan 31 19:17:33 2003
  1.1535 ++++ gcc-20030210/gcc/tree-inline.c	Sat Feb 22 01:40:14 2003
  1.1536 +@@ -836,11 +836,17 @@
  1.1537 + 
  1.1538 +   /* Don't try to inline functions that are not well-suited to
  1.1539 +      inlining.  */
  1.1540 +-  if (!inlinable_function_p (fn, id))
  1.1541 +-    return NULL_TREE;
  1.1542 ++  if (! inlinable_function_p (fn, id)
  1.1543 ++      || ! (*lang_hooks.tree_inlining.start_inlining) (fn))
  1.1544 ++    {
  1.1545 ++      if (DECL_INLINE (fn) && warn_inline && ! flag_really_no_inline)
  1.1546 ++	{
  1.1547 ++	  warning_with_decl (fn, "inlining failed in call to `%s'");
  1.1548 ++	  warning ("called from here");
  1.1549 ++	}
  1.1550 + 
  1.1551 +-  if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
  1.1552 +-    return NULL_TREE;
  1.1553 ++      return NULL_TREE;
  1.1554 ++    }
  1.1555 + 
  1.1556 +   /* Set the current filename and line number to the function we are
  1.1557 +      inlining so that when we create new _STMT nodes here they get
  1.1558 +diff -ruN gcc-20030210.orig/libjava/Makefile.in gcc-20030210/libjava/Makefile.in
  1.1559 +--- gcc-20030210.orig/libjava/Makefile.in	Tue Jan 28 10:44:37 2003
  1.1560 ++++ gcc-20030210/libjava/Makefile.in	Sat Feb 22 01:40:14 2003
  1.1561 +@@ -1637,6 +1637,7 @@
  1.1562 + 	"AS=$(AS)" \
  1.1563 + 	"CC=$(CC)" \
  1.1564 + 	"CXX=$(CXX)" \
  1.1565 ++	"GCJ=$(GCJ)" \
  1.1566 + 	"LD=$(LD)" \
  1.1567 + 	"LIBCFLAGS=$(LIBCFLAGS)" \
  1.1568 + 	"NM=$(NM)" \
  1.1569 +diff -ruN gcc-20030210.orig/libjava/configure gcc-20030210/libjava/configure
  1.1570 +--- gcc-20030210.orig/libjava/configure	Tue Jan 28 10:44:37 2003
  1.1571 ++++ gcc-20030210/libjava/configure	Sat Feb 22 01:42:11 2003
  1.1572 +@@ -2031,7 +2031,7 @@
  1.1573 + # This must be Linux ELF.
  1.1574 + linux-gnu*)
  1.1575 +   case $host_cpu in
  1.1576 +-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
  1.1577 ++  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
  1.1578 +     lt_cv_deplibs_check_method=pass_all ;;
  1.1579 +   *)
  1.1580 +     # glibc up to 2.1.1 does not perform some relocations on ARM
  1.1581 +diff -ruN gcc-20030210.orig/libjava/java/net/natInetAddress.cc gcc-20030210/libjava/java/net/natInetAddress.cc
  1.1582 +--- gcc-20030210.orig/libjava/java/net/natInetAddress.cc	Tue Mar  5 05:02:19 2002
  1.1583 ++++ gcc-20030210/libjava/java/net/natInetAddress.cc	Sat Feb 22 01:40:14 2003
  1.1584 +@@ -56,7 +56,7 @@
  1.1585 + #endif
  1.1586 + 
  1.1587 + #ifndef HAVE_GETHOSTNAME_DECL
  1.1588 +-extern "C" int gethostname (char *name, int namelen);
  1.1589 ++extern "C" int gethostname (char *name, unsigned int namelen);
  1.1590 + #endif
  1.1591 + 
  1.1592 + #ifdef DISABLE_JAVA_NET
  1.1593 +diff -ruN gcc-20030210.orig/libjava/libltdl/aclocal.m4 gcc-20030210/libjava/libltdl/aclocal.m4
  1.1594 +--- gcc-20030210.orig/libjava/libltdl/aclocal.m4	Sun Sep 10 17:04:40 2000
  1.1595 ++++ gcc-20030210/libjava/libltdl/aclocal.m4	Sat Feb 22 01:40:14 2003
  1.1596 +@@ -573,7 +573,7 @@
  1.1597 + # This must be Linux ELF.
  1.1598 + linux-gnu*)
  1.1599 +   case "$host_cpu" in
  1.1600 +-  alpha* | i*86 | powerpc* | sparc* | ia64* )
  1.1601 ++  alpha* | i*86 | powerpc* | sparc* | ia64* | sh*)
  1.1602 +     lt_cv_deplibs_check_method=pass_all ;;
  1.1603 +   *)
  1.1604 +     # glibc up to 2.1.1 does not perform some relocations on ARM
  1.1605 +diff -ruN gcc-20030210.orig/libjava/sysdep/sh/locks.h gcc-20030210/libjava/sysdep/sh/locks.h
  1.1606 +--- gcc-20030210.orig/libjava/sysdep/sh/locks.h	Thu Jan  1 09:00:00 1970
  1.1607 ++++ gcc-20030210/libjava/sysdep/sh/locks.h	Sat Feb 22 01:40:14 2003
  1.1608 +@@ -0,0 +1,72 @@
  1.1609 ++// locks.h - Thread synchronization primitives. SuperH implementation.
  1.1610 ++
  1.1611 ++/* Copyright (C) 2002  Free Software Foundation
  1.1612 ++
  1.1613 ++   This file is part of libgcj.
  1.1614 ++
  1.1615 ++This software is copyrighted work licensed under the terms of the
  1.1616 ++Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
  1.1617 ++details.  */
  1.1618 ++
  1.1619 ++#ifndef __SYSDEP_LOCKS_H__
  1.1620 ++#define __SYSDEP_LOCKS_H__
  1.1621 ++
  1.1622 ++typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
  1.1623 ++				/* address.				*/
  1.1624 ++
  1.1625 ++static unsigned char __cas_lock = 0;
  1.1626 ++
  1.1627 ++inline static void
  1.1628 ++__cas_start_atomic (void)
  1.1629 ++{
  1.1630 ++  unsigned int val;
  1.1631 ++
  1.1632 ++  do
  1.1633 ++    __asm__ __volatile__ ("tas.b @%1; movt %0"
  1.1634 ++			  : "=r" (val)
  1.1635 ++			  : "r" (&__cas_lock)
  1.1636 ++			  : "memory");
  1.1637 ++  while (val == 0);
  1.1638 ++}
  1.1639 ++
  1.1640 ++inline static void
  1.1641 ++__cas_end_atomic (void)
  1.1642 ++{
  1.1643 ++  __asm__ __volatile__ (" " : : : "memory");
  1.1644 ++  __cas_lock = 0;
  1.1645 ++}
  1.1646 ++
  1.1647 ++inline static bool
  1.1648 ++compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
  1.1649 ++		  obj_addr_t new_val)
  1.1650 ++{
  1.1651 ++  bool ret;
  1.1652 ++
  1.1653 ++  __cas_start_atomic ();
  1.1654 ++  if (*addr != old)
  1.1655 ++    ret = false;
  1.1656 ++  else
  1.1657 ++    {
  1.1658 ++      *addr = new_val;
  1.1659 ++      ret = true;
  1.1660 ++    }
  1.1661 ++  __cas_end_atomic ();
  1.1662 ++
  1.1663 ++  return ret;
  1.1664 ++}
  1.1665 ++
  1.1666 ++inline static void
  1.1667 ++release_set (volatile obj_addr_t *addr, obj_addr_t new_val)
  1.1668 ++{
  1.1669 ++  __asm__ __volatile__ (" " : : : "memory");
  1.1670 ++  *(addr) = new_val;
  1.1671 ++}
  1.1672 ++
  1.1673 ++inline static bool
  1.1674 ++compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old,
  1.1675 ++			  obj_addr_t new_val)
  1.1676 ++{
  1.1677 ++  return compare_and_swap (addr, old, new_val);
  1.1678 ++}
  1.1679 ++
  1.1680 ++#endif /* ! __SYSDEP_LOCKS_H__ */
  1.1681 +diff -ruN gcc-20030210.orig/libstdc++-v3/acinclude.m4 gcc-20030210/libstdc++-v3/acinclude.m4
  1.1682 +--- gcc-20030210.orig/libstdc++-v3/acinclude.m4	Tue Jan 28 02:30:41 2003
  1.1683 ++++ gcc-20030210/libstdc++-v3/acinclude.m4	Sat Feb 22 01:40:14 2003
  1.1684 +@@ -1828,9 +1828,10 @@
  1.1685 +   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
  1.1686 + 
  1.1687 +   # Passed down for canadian crosses.
  1.1688 +-  if test x"$CANADIAN" = xyes; then
  1.1689 +-    TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1690 +-  fi
  1.1691 ++  #if test x"$CANADIAN" = xyes; then
  1.1692 ++  #  TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1693 ++  #fi
  1.1694 ++  TOPLEVEL_INCLUDES=''
  1.1695 + 
  1.1696 +   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
  1.1697 + 
  1.1698 +diff -ruN gcc-20030210.orig/libstdc++-v3/aclocal.m4 gcc-20030210/libstdc++-v3/aclocal.m4
  1.1699 +--- gcc-20030210.orig/libstdc++-v3/aclocal.m4	Mon Feb 10 19:36:47 2003
  1.1700 ++++ gcc-20030210/libstdc++-v3/aclocal.m4	Sat Feb 22 01:40:14 2003
  1.1701 +@@ -1840,9 +1840,10 @@
  1.1702 +   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
  1.1703 + 
  1.1704 +   # Passed down for canadian crosses.
  1.1705 +-  if test x"$CANADIAN" = xyes; then
  1.1706 +-    TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1707 +-  fi
  1.1708 ++  #if test x"$CANADIAN" = xyes; then
  1.1709 ++  #  TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1710 ++  #fi
  1.1711 ++  TOPLEVEL_INCLUDES=''
  1.1712 + 
  1.1713 +   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
  1.1714 + 
  1.1715 +diff -ruN gcc-20030210.orig/libstdc++-v3/configure gcc-20030210/libstdc++-v3/configure
  1.1716 +--- gcc-20030210.orig/libstdc++-v3/configure	Mon Feb 10 19:37:17 2003
  1.1717 ++++ gcc-20030210/libstdc++-v3/configure	Sat Feb 22 01:40:14 2003
  1.1718 +@@ -1982,7 +1982,7 @@
  1.1719 + # This must be Linux ELF.
  1.1720 + linux-gnu*)
  1.1721 +   case $host_cpu in
  1.1722 +-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
  1.1723 ++  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh*)
  1.1724 +     lt_cv_deplibs_check_method=pass_all ;;
  1.1725 +   *)
  1.1726 +     # glibc up to 2.1.1 does not perform some relocations on ARM
  1.1727 +@@ -22340,9 +22340,10 @@
  1.1728 +   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
  1.1729 + 
  1.1730 +   # Passed down for canadian crosses.
  1.1731 +-  if test x"$CANADIAN" = xyes; then
  1.1732 +-    TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1733 +-  fi
  1.1734 ++  #if test x"$CANADIAN" = xyes; then
  1.1735 ++  #  TOPLEVEL_INCLUDES='-I$(includedir)'
  1.1736 ++  #fi
  1.1737 ++  TOPLEVEL_INCLUDES=''
  1.1738 + 
  1.1739 +   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
  1.1740 + 
  1.1741 +diff -ruN gcc-20030210.orig/libtool.m4 gcc-20030210/libtool.m4
  1.1742 +--- gcc-20030210.orig/libtool.m4	Fri Jan 31 19:16:59 2003
  1.1743 ++++ gcc-20030210/libtool.m4	Sat Feb 22 01:40:14 2003
  1.1744 +@@ -597,7 +597,7 @@
  1.1745 + # This must be Linux ELF.
  1.1746 + linux-gnu*)
  1.1747 +   case $host_cpu in
  1.1748 +-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
  1.1749 ++  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
  1.1750 +     lt_cv_deplibs_check_method=pass_all ;;
  1.1751 +   *)
  1.1752 +     # glibc up to 2.1.1 does not perform some relocations on ARM
  1.1753 +diff -ruN gcc-20030210.orig/zlib/configure gcc-20030210/zlib/configure
  1.1754 +--- gcc-20030210.orig/zlib/configure	Tue Jan 28 10:44:15 2003
  1.1755 ++++ gcc-20030210/zlib/configure	Sat Feb 22 01:40:14 2003
  1.1756 +@@ -1571,7 +1571,7 @@
  1.1757 + # This must be Linux ELF.
  1.1758 + linux-gnu*)
  1.1759 +   case $host_cpu in
  1.1760 +-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
  1.1761 ++  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
  1.1762 +     lt_cv_deplibs_check_method=pass_all ;;
  1.1763 +   *)
  1.1764 +     # glibc up to 2.1.1 does not perform some relocations on ARM