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