patches/gcc/3.2.3/120-gcc-20030210-sh-linux-1.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
yann@402
     1
diff -ruN gcc-20030210.orig/boehm-gc/configure gcc-20030210/boehm-gc/configure
yann@402
     2
--- gcc-20030210.orig/boehm-gc/configure	Fri Jan 31 19:17:00 2003
yann@402
     3
+++ gcc-20030210/boehm-gc/configure	Sat Feb 22 01:40:14 2003
yann@402
     4
@@ -1922,7 +1922,7 @@
yann@402
     5
 # This must be Linux ELF.
yann@402
     6
 linux-gnu*)
yann@402
     7
   case $host_cpu in
yann@402
     8
-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
yann@402
     9
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
yann@402
    10
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
    11
   *)
yann@402
    12
     # glibc up to 2.1.1 does not perform some relocations on ARM
yann@402
    13
diff -ruN gcc-20030210.orig/config-ml.in gcc-20030210/config-ml.in
yann@402
    14
--- gcc-20030210.orig/config-ml.in	Fri Jan 31 19:16:59 2003
yann@402
    15
+++ gcc-20030210/config-ml.in	Sat Feb 22 01:40:14 2003
yann@402
    16
@@ -545,6 +545,7 @@
yann@402
    17
 	      if [ -d ../$${dir}/$${lib} ]; then \
yann@402
    18
 		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
yann@402
    19
 		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
yann@402
    20
+				DESTDIR="$(DESTDIR)" \
yann@402
    21
 				CFLAGS="$(CFLAGS) $${flags}" \
yann@402
    22
 				prefix="$(prefix)" \
yann@402
    23
 				exec_prefix="$(exec_prefix)" \
yann@402
    24
diff -ruN gcc-20030210.orig/debian/edit-specs.in gcc-20030210/debian/edit-specs.in
yann@402
    25
--- gcc-20030210.orig/debian/edit-specs.in	Thu Jan  1 09:00:00 1970
yann@402
    26
+++ gcc-20030210/debian/edit-specs.in	Sat Feb 22 01:40:14 2003
yann@402
    27
@@ -0,0 +1,45 @@
yann@402
    28
+/^*asm:$/ {
yann@402
    29
+n
yann@402
    30
+c\
yann@402
    31
+@AS_ENDIAN_FLAG@ %{mrelax:-relax}
yann@402
    32
+}
yann@402
    33
+/^*cpp:$/ {
yann@402
    34
+n
yann@402
    35
+c\
yann@402
    36
+%(cpp_default_cpu_spec)    %(subtarget_cpp_spec)    %(subtarget_cpp_ptr_spec)    %(subtarget_cpp_endian_spec)
yann@402
    37
+}
yann@402
    38
+/^*cc1:$/ {
yann@402
    39
+n
yann@402
    40
+c\
yann@402
    41
+-musermode @CC1_CPU_ENDIAN_FLAGS@  %{profile:-p}
yann@402
    42
+}
yann@402
    43
+/^*link:$/ {
yann@402
    44
+n
yann@402
    45
+c\
yann@402
    46
+%{!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@402
    47
+}
yann@402
    48
+/^*multilib:$/ {
yann@402
    49
+n
yann@402
    50
+c\
yann@402
    51
+. ;
yann@402
    52
+}
yann@402
    53
+/^*multilib_matches:$/ {
yann@402
    54
+n
yann@402
    55
+c\
yann@402
    56
+
yann@402
    57
+}
yann@402
    58
+/^*multilib_options:$/ {
yann@402
    59
+n
yann@402
    60
+c\
yann@402
    61
+
yann@402
    62
+}
yann@402
    63
+/^*subtarget_cpp_endian_spec:$/ {
yann@402
    64
+n
yann@402
    65
+c\
yann@402
    66
+@CPP_ENDIAN_DEF@
yann@402
    67
+}
yann@402
    68
+/^*cpp_default_cpu_spec:$/ {
yann@402
    69
+n
yann@402
    70
+c\
yann@402
    71
+@CPP_CPU_DEFS@
yann@402
    72
+}
yann@402
    73
diff -ruN gcc-20030210.orig/debian/install-CPU-linux gcc-20030210/debian/install-CPU-linux
yann@402
    74
--- gcc-20030210.orig/debian/install-CPU-linux	Thu Jan  1 09:00:00 1970
yann@402
    75
+++ gcc-20030210/debian/install-CPU-linux	Sat Feb 22 01:40:14 2003
yann@402
    76
@@ -0,0 +1,111 @@
yann@402
    77
+#! /bin/sh
yann@402
    78
+
yann@402
    79
+VERSION=$1; shift
yann@402
    80
+CPU=$1
yann@402
    81
+
yann@402
    82
+# literally (binary-ly) same
yann@402
    83
+PROGS_C="cpp gcc"
yann@402
    84
+PROGS_ADDITIONAL="c++ g++ g77 gcj"
yann@402
    85
+
yann@402
    86
+DRIVERS_C="cc1 cpp0 tradcpp0"
yann@402
    87
+DRIVERS_ADDITIONAL="cc1obj cc1plus collect2 f771 jc1 jvgenmain"
yann@402
    88
+if [ -z "$STEP1_COMPILER_BUILD" ]; then
yann@402
    89
+  PROGS="$PROGS_C $PROGS_ADDITIONAL"
yann@402
    90
+  DRIVERS="$DRIVERS_C $DRIVERSADDITIONAL"
yann@402
    91
+  INITIAL=""
yann@402
    92
+else
yann@402
    93
+  PROGS=$PROGS_C
yann@402
    94
+  DRIVERS=$DRIVERS_C
yann@402
    95
+  INITIAL="-initial"
yann@402
    96
+fi
yann@402
    97
+
yann@402
    98
+OBJS="crtbegin.o crtbeginS.o crtend.o crtendS.o"
yann@402
    99
+LIBS_C="libgcc.a"
yann@402
   100
+LIBS_1="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.3 libstdc++.so.3.0.2"
yann@402
   101
+LIBS_2="libobjc.a libstdc++.a libsupc++.a"
yann@402
   102
+INCLUDE="include"
yann@402
   103
+
yann@402
   104
+cd debian/gcc-sh-linux-others${INITIAL} || exit 1
yann@402
   105
+
yann@402
   106
+# Make directories.
yann@402
   107
+mkdir -p usr/bin usr/share usr/share/man usr/share/man/man1 usr/lib \
yann@402
   108
+	 usr/lib/gcc-lib usr/lib/gcc-lib/${CPU}-linux \
yann@402
   109
+	 usr/lib/gcc-lib/${CPU}-linux/${VERSION} \
yann@402
   110
+	 usr/${CPU}-linux usr/${CPU}-linux/lib
yann@402
   111
+
yann@402
   112
+# Make symbolic links for include dir.
yann@402
   113
+(cd usr/${CPU}-linux; ln -s ../sh-linux/include .)
yann@402
   114
+
yann@402
   115
+# Make symbolic links for executables.
yann@402
   116
+(cd usr/bin;
yann@402
   117
+  for p in ${PROGS}; do
yann@402
   118
+    ln -s shCPU-linux-GCC ${CPU}-linux-$p
yann@402
   119
+  done)
yann@402
   120
+
yann@402
   121
+case "${CPU}" in
yann@402
   122
+    sh3)
yann@402
   123
+	MULTILIBDIR=
yann@402
   124
+	AS_ENDIAN_FLAG="-little"
yann@402
   125
+	CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
yann@402
   126
+	CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
yann@402
   127
+	CC1_CPU_ENDIAN_FLAGS="-ml -m3"
yann@402
   128
+	LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh3"
yann@402
   129
+	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3-linux/lib"
yann@402
   130
+    ;;
yann@402
   131
+    sh3eb)
yann@402
   132
+	MULTILIBDIR=/mb
yann@402
   133
+	AS_ENDIAN_FLAG="-big"
yann@402
   134
+	CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
yann@402
   135
+	CPP_CPU_DEFS="-D__SH3__ -D__sh3__"
yann@402
   136
+	CC1_CPU_ENDIAN_FLAGS="-mb -m3"
yann@402
   137
+	LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh3"
yann@402
   138
+	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh3eb-linux/lib"
yann@402
   139
+    ;;
yann@402
   140
+    sh4)
yann@402
   141
+	MULTILIBDIR=/m4
yann@402
   142
+	AS_ENDIAN_FLAG="-little"
yann@402
   143
+	CPP_ENDIAN_DEF="-D__LITTLE_ENDIAN__"
yann@402
   144
+	CPP_CPU_DEFS="-D__SH4__"
yann@402
   145
+	CC1_CPU_ENDIAN_FLAGS="-ml -m4"
yann@402
   146
+	LINKER_CPU_ENDIAN_FLAGS="-m shlelf_linux -EL --architecture sh4"
yann@402
   147
+	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4-linux/lib"
yann@402
   148
+    ;;
yann@402
   149
+    sh4eb)
yann@402
   150
+	MULTILIBDIR=/mb/m4
yann@402
   151
+	AS_ENDIAN_FLAG="-big"
yann@402
   152
+	CPP_ENDIAN_DEF="-D__BIG_ENDIAN__"
yann@402
   153
+	CPP_CPU_DEFS="-D__SH4__"
yann@402
   154
+	CC1_CPU_ENDIAN_FLAGS="-mb -m4"
yann@402
   155
+	LINKER_CPU_ENDIAN_FLAGS="-m shelf_linux -EB --architecture sh4"
yann@402
   156
+	LINKER_RPATH_LINK_FLAG="-rpath-link /usr/sh4eb-linux/lib"
yann@402
   157
+    ;;
yann@402
   158
+esac
yann@402
   159
+
yann@402
   160
+# Make symbolic links for GCC drivers, objects, libraries, and include dir.
yann@402
   161
+(cd usr/lib/gcc-lib/${CPU}-linux/${VERSION};
yann@402
   162
+ for f in ${DRIVERS} ${INCLUDE}; do
yann@402
   163
+    ln -s ../../sh-linux/${VERSION}/$f $f;
yann@402
   164
+ done
yann@402
   165
+ for f in ${OBJS} ${LIBS_C}; do
yann@402
   166
+    ln -s ../../sh-linux/${VERSION}${MULTILIBDIR}/$f $f;
yann@402
   167
+ done)
yann@402
   168
+
yann@402
   169
+if [ -z "$STEP1_COMPILER_BUILD" ]; then
yann@402
   170
+  for f in ${LIBS_1} ${LIBS_2}; do
yann@402
   171
+    mv ../gcc-sh-linux/usr/sh-linux/lib${MULTILIBDIR}/$f usr/${CPU}-linux/lib/;
yann@402
   172
+  done
yann@402
   173
+fi
yann@402
   174
+
yann@402
   175
+sed -e "s+@AS_ENDIAN_FLAG@+${AS_ENDIAN_FLAG}+" \
yann@402
   176
+    -e "s+@CPP_ENDIAN_DEF@+${CPP_ENDIAN_DEF}+" \
yann@402
   177
+    -e "s+@CPP_CPU_DEFS@+${CPP_CPU_DEFS}+" \
yann@402
   178
+    -e "s+@CC1_CPU_ENDIAN_FLAGS@+${CC1_CPU_ENDIAN_FLAGS}+" \
yann@402
   179
+    -e "s+@LINKER_CPU_ENDIAN_FLAGS@+${LINKER_CPU_ENDIAN_FLAGS}+" \
yann@402
   180
+    -e "s+@LINKER_RPATH_LINK_FLAG@+${LINKER_RPATH_LINK_FLAG}+" \
yann@402
   181
+    ../edit-specs.in >../edit-specs-${CPU}.sed
yann@402
   182
+
yann@402
   183
+sed -f ../edit-specs-${CPU}.sed \
yann@402
   184
+    ../gcc-sh-linux${INITIAL}/usr/lib/gcc-lib/sh-linux/${VERSION}/specs \
yann@402
   185
+    > usr/lib/gcc-lib/${CPU}-linux/${VERSION}/specs
yann@402
   186
+
yann@402
   187
+exit 0
yann@402
   188
diff -ruN gcc-20030210.orig/debian/multilib-symlink gcc-20030210/debian/multilib-symlink
yann@402
   189
--- gcc-20030210.orig/debian/multilib-symlink	Thu Jan  1 09:00:00 1970
yann@402
   190
+++ gcc-20030210/debian/multilib-symlink	Sat Feb 22 01:40:14 2003
yann@402
   191
@@ -0,0 +1,10 @@
yann@402
   192
+#! /bin/sh
yann@402
   193
+
yann@402
   194
+cd /usr/sh-linux/lib
yann@402
   195
+ln -s ../../sh3-linux/lib/{*.a,*.so*,*.o} .
yann@402
   196
+cd m4
yann@402
   197
+ln -s ../../../sh4-linux/lib/{*.a,*.so*,*.o} .
yann@402
   198
+cd ../mb
yann@402
   199
+ln -s ../../../sh3eb-linux/lib/{*.a,*.so*,*.o} .
yann@402
   200
+cd m4
yann@402
   201
+ln -s ../../../../sh4eb-linux/lib/{*.a,*.so*,*.o} .
yann@402
   202
diff -ruN gcc-20030210.orig/debian/shCPU-linux-GCC gcc-20030210/debian/shCPU-linux-GCC
yann@402
   203
--- gcc-20030210.orig/debian/shCPU-linux-GCC	Thu Jan  1 09:00:00 1970
yann@402
   204
+++ gcc-20030210/debian/shCPU-linux-GCC	Sat Feb 22 01:40:14 2003
yann@402
   205
@@ -0,0 +1,59 @@
yann@402
   206
+#! /bin/bash
yann@402
   207
+
yann@402
   208
+BASENAME=${0##*/}
yann@402
   209
+PROG=${BASENAME##*-}
yann@402
   210
+CPU=${BASENAME%%-*}
yann@402
   211
+
yann@402
   212
+if [ "$PROG" = gcc ]; then
yann@402
   213
+    if [ "$1" = "-b" -a "$2" = "i386-linux" ]; then
yann@402
   214
+	shift 2
yann@402
   215
+	exec /usr/bin/gcc "$@"
yann@402
   216
+    elif [ "$1" = "-print-multi-lib" -o "$1" = "--print-multi-lib" ]; then
yann@402
   217
+	echo ".;"
yann@402
   218
+	exit 0
yann@402
   219
+    elif [ "$1" = "-print-multi-os-directory" -o "$1" = "--print-multi-os-directory" ]; then
yann@402
   220
+	echo "."
yann@402
   221
+	exit 0
yann@402
   222
+    elif [ "$1" = "-dumpspecs" ]; then
yann@402
   223
+	cat /usr/lib/gcc-lib/${CPU}-linux/@@VERSION@@/specs
yann@402
   224
+	exit 0
yann@402
   225
+    fi
yann@402
   226
+fi
yann@402
   227
+
yann@402
   228
+case "${CPU}" in
yann@402
   229
+    sh3)
yann@402
   230
+	ARCH=m3
yann@402
   231
+	DEFINES="-D__sh3__ -D__SH3__ -D__LITTLE_ENDIAN__"
yann@402
   232
+	ENDIAN=ml
yann@402
   233
+    ;;
yann@402
   234
+    sh3eb)
yann@402
   235
+	ARCH=m3
yann@402
   236
+	DEFINES="-D__sh3__ -D__SH3__ -D__BIG_ENDIAN__"
yann@402
   237
+	ENDIAN=mb
yann@402
   238
+    ;;
yann@402
   239
+    sh4)
yann@402
   240
+	ARCH=m4
yann@402
   241
+	DEFINES="-D__SH4__ -D__LITTLE_ENDIAN__"
yann@402
   242
+	ENDIAN=ml
yann@402
   243
+    ;;
yann@402
   244
+    sh4eb)
yann@402
   245
+	ARCH=m4
yann@402
   246
+	DEFINES="-D__SH4__ -D__BIG_ENDIAN__"
yann@402
   247
+	ENDIAN=mb
yann@402
   248
+    ;;
yann@402
   249
+esac
yann@402
   250
+
yann@402
   251
+# Prepend the appropriate options
yann@402
   252
+# If user specifies some options, it will be overridden
yann@402
   253
+
yann@402
   254
+case "${PROG}" in
yann@402
   255
+    cpp)
yann@402
   256
+	exec sh-linux-${PROG} $DEFINES "$@"
yann@402
   257
+    ;;
yann@402
   258
+    c++|g++|g77|gcc|gcj)
yann@402
   259
+	exec sh-linux-${PROG} -$ARCH -$ENDIAN "$@"
yann@402
   260
+    ;;
yann@402
   261
+esac
yann@402
   262
+
yann@402
   263
+echo "Something wrong..."
yann@402
   264
+exit 1
yann@402
   265
diff -ruN gcc-20030210.orig/gcc/config/sh/elf.h gcc-20030210/gcc/config/sh/elf.h
yann@402
   266
--- gcc-20030210.orig/gcc/config/sh/elf.h	Fri Feb 22 01:42:28 2002
yann@402
   267
+++ gcc-20030210/gcc/config/sh/elf.h	Sat Feb 22 01:40:14 2003
yann@402
   268
@@ -170,3 +170,7 @@
yann@402
   269
 #undef ENDFILE_SPEC
yann@402
   270
 #define ENDFILE_SPEC \
yann@402
   271
   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
yann@402
   272
+
yann@402
   273
+/* ASM_OUTPUT_CASE_LABEL is defined in elfos.h.  With it, 
yann@402
   274
+   redundant .align will be generated.  */
yann@402
   275
+#undef  ASM_OUTPUT_CASE_LABEL
yann@402
   276
diff -ruN gcc-20030210.orig/gcc/config/sh/lib1funcs.asm gcc-20030210/gcc/config/sh/lib1funcs.asm
yann@402
   277
--- gcc-20030210.orig/gcc/config/sh/lib1funcs.asm	Fri Feb 22 01:42:28 2002
yann@402
   278
+++ gcc-20030210/gcc/config/sh/lib1funcs.asm	Sat Feb 22 01:40:14 2003
yann@402
   279
@@ -39,8 +39,13 @@
yann@402
   280
 
yann@402
   281
 #ifdef __ELF__
yann@402
   282
 #define LOCAL(X) .L_##X
yann@402
   283
+#define FUNC(X) .type X,@function; .hidden X
yann@402
   284
+#define _ENDFUNC(X) .Lfe_##X: .size X,.Lfe_##X-X
yann@402
   285
+#define ENDFUNC(X) _ENDFUNC(X)
yann@402
   286
 #else
yann@402
   287
 #define LOCAL(X) L_##X
yann@402
   288
+#define FUNC(X)
yann@402
   289
+#define ENDFUNC(X)
yann@402
   290
 #endif
yann@402
   291
 
yann@402
   292
 #ifdef __linux__
yann@402
   293
@@ -91,6 +96,40 @@
yann@402
   294
 	.global	GLOBAL(ashiftrt_r4_31)
yann@402
   295
 	.global	GLOBAL(ashiftrt_r4_32)
yann@402
   296
 
yann@402
   297
+	FUNC(GLOBAL(ashiftrt_r4_0))
yann@402
   298
+	FUNC(GLOBAL(ashiftrt_r4_1))
yann@402
   299
+	FUNC(GLOBAL(ashiftrt_r4_2))
yann@402
   300
+	FUNC(GLOBAL(ashiftrt_r4_3))
yann@402
   301
+	FUNC(GLOBAL(ashiftrt_r4_4))
yann@402
   302
+	FUNC(GLOBAL(ashiftrt_r4_5))
yann@402
   303
+	FUNC(GLOBAL(ashiftrt_r4_6))
yann@402
   304
+	FUNC(GLOBAL(ashiftrt_r4_7))
yann@402
   305
+	FUNC(GLOBAL(ashiftrt_r4_8))
yann@402
   306
+	FUNC(GLOBAL(ashiftrt_r4_9))
yann@402
   307
+	FUNC(GLOBAL(ashiftrt_r4_10))
yann@402
   308
+	FUNC(GLOBAL(ashiftrt_r4_11))
yann@402
   309
+	FUNC(GLOBAL(ashiftrt_r4_12))
yann@402
   310
+	FUNC(GLOBAL(ashiftrt_r4_13))
yann@402
   311
+	FUNC(GLOBAL(ashiftrt_r4_14))
yann@402
   312
+	FUNC(GLOBAL(ashiftrt_r4_15))
yann@402
   313
+	FUNC(GLOBAL(ashiftrt_r4_16))
yann@402
   314
+	FUNC(GLOBAL(ashiftrt_r4_17))
yann@402
   315
+	FUNC(GLOBAL(ashiftrt_r4_18))
yann@402
   316
+	FUNC(GLOBAL(ashiftrt_r4_19))
yann@402
   317
+	FUNC(GLOBAL(ashiftrt_r4_20))
yann@402
   318
+	FUNC(GLOBAL(ashiftrt_r4_21))
yann@402
   319
+	FUNC(GLOBAL(ashiftrt_r4_22))
yann@402
   320
+	FUNC(GLOBAL(ashiftrt_r4_23))
yann@402
   321
+	FUNC(GLOBAL(ashiftrt_r4_24))
yann@402
   322
+	FUNC(GLOBAL(ashiftrt_r4_25))
yann@402
   323
+	FUNC(GLOBAL(ashiftrt_r4_26))
yann@402
   324
+	FUNC(GLOBAL(ashiftrt_r4_27))
yann@402
   325
+	FUNC(GLOBAL(ashiftrt_r4_28))
yann@402
   326
+	FUNC(GLOBAL(ashiftrt_r4_29))
yann@402
   327
+	FUNC(GLOBAL(ashiftrt_r4_30))
yann@402
   328
+	FUNC(GLOBAL(ashiftrt_r4_31))
yann@402
   329
+	FUNC(GLOBAL(ashiftrt_r4_32))
yann@402
   330
+
yann@402
   331
 	.align	1
yann@402
   332
 GLOBAL(ashiftrt_r4_32):
yann@402
   333
 GLOBAL(ashiftrt_r4_31):
yann@402
   334
@@ -170,6 +209,41 @@
yann@402
   335
 GLOBAL(ashiftrt_r4_0):
yann@402
   336
 	rts
yann@402
   337
 	nop
yann@402
   338
+
yann@402
   339
+	ENDFUNC(GLOBAL(ashiftrt_r4_0))
yann@402
   340
+	ENDFUNC(GLOBAL(ashiftrt_r4_1))
yann@402
   341
+	ENDFUNC(GLOBAL(ashiftrt_r4_2))
yann@402
   342
+	ENDFUNC(GLOBAL(ashiftrt_r4_3))
yann@402
   343
+	ENDFUNC(GLOBAL(ashiftrt_r4_4))
yann@402
   344
+	ENDFUNC(GLOBAL(ashiftrt_r4_5))
yann@402
   345
+	ENDFUNC(GLOBAL(ashiftrt_r4_6))
yann@402
   346
+	ENDFUNC(GLOBAL(ashiftrt_r4_7))
yann@402
   347
+	ENDFUNC(GLOBAL(ashiftrt_r4_8))
yann@402
   348
+	ENDFUNC(GLOBAL(ashiftrt_r4_9))
yann@402
   349
+	ENDFUNC(GLOBAL(ashiftrt_r4_10))
yann@402
   350
+	ENDFUNC(GLOBAL(ashiftrt_r4_11))
yann@402
   351
+	ENDFUNC(GLOBAL(ashiftrt_r4_12))
yann@402
   352
+	ENDFUNC(GLOBAL(ashiftrt_r4_13))
yann@402
   353
+	ENDFUNC(GLOBAL(ashiftrt_r4_14))
yann@402
   354
+	ENDFUNC(GLOBAL(ashiftrt_r4_15))
yann@402
   355
+	ENDFUNC(GLOBAL(ashiftrt_r4_16))
yann@402
   356
+	ENDFUNC(GLOBAL(ashiftrt_r4_17))
yann@402
   357
+	ENDFUNC(GLOBAL(ashiftrt_r4_18))
yann@402
   358
+	ENDFUNC(GLOBAL(ashiftrt_r4_19))
yann@402
   359
+	ENDFUNC(GLOBAL(ashiftrt_r4_20))
yann@402
   360
+	ENDFUNC(GLOBAL(ashiftrt_r4_21))
yann@402
   361
+	ENDFUNC(GLOBAL(ashiftrt_r4_22))
yann@402
   362
+	ENDFUNC(GLOBAL(ashiftrt_r4_23))
yann@402
   363
+	ENDFUNC(GLOBAL(ashiftrt_r4_24))
yann@402
   364
+	ENDFUNC(GLOBAL(ashiftrt_r4_25))
yann@402
   365
+	ENDFUNC(GLOBAL(ashiftrt_r4_26))
yann@402
   366
+	ENDFUNC(GLOBAL(ashiftrt_r4_27))
yann@402
   367
+	ENDFUNC(GLOBAL(ashiftrt_r4_28))
yann@402
   368
+	ENDFUNC(GLOBAL(ashiftrt_r4_29))
yann@402
   369
+	ENDFUNC(GLOBAL(ashiftrt_r4_30))
yann@402
   370
+	ENDFUNC(GLOBAL(ashiftrt_r4_31))
yann@402
   371
+	ENDFUNC(GLOBAL(ashiftrt_r4_32))
yann@402
   372
+
yann@402
   373
 #endif
yann@402
   374
 
yann@402
   375
 #ifdef L_ashiftrt_n
yann@402
   376
@@ -192,6 +266,7 @@
yann@402
   377
 !
yann@402
   378
 
yann@402
   379
 	.global	GLOBAL(ashrsi3)
yann@402
   380
+	FUNC(GLOBAL(ashrsi3))
yann@402
   381
 	.align	2
yann@402
   382
 GLOBAL(ashrsi3):
yann@402
   383
 	mov	#31,r0
yann@402
   384
@@ -319,6 +394,8 @@
yann@402
   385
 	rts
yann@402
   386
 	nop
yann@402
   387
 
yann@402
   388
+	ENDFUNC(GLOBAL(ashrsi3))
yann@402
   389
+
yann@402
   390
 #endif
yann@402
   391
 
yann@402
   392
 #ifdef L_ashiftlt
yann@402
   393
@@ -340,6 +417,7 @@
yann@402
   394
 ! (none)
yann@402
   395
 !
yann@402
   396
 	.global	GLOBAL(ashlsi3)
yann@402
   397
+	FUNC(GLOBAL(ashlsi3))
yann@402
   398
 	.align	2
yann@402
   399
 GLOBAL(ashlsi3):
yann@402
   400
 	mov	#31,r0
yann@402
   401
@@ -476,6 +554,8 @@
yann@402
   402
 	rts
yann@402
   403
 	nop
yann@402
   404
 
yann@402
   405
+	ENDFUNC(GLOBAL(ashlsi3))
yann@402
   406
+
yann@402
   407
 #endif
yann@402
   408
 
yann@402
   409
 #ifdef L_lshiftrt
yann@402
   410
@@ -497,6 +577,7 @@
yann@402
   411
 ! (none)
yann@402
   412
 !
yann@402
   413
 	.global	GLOBAL(lshrsi3)
yann@402
   414
+	FUNC(GLOBAL(lshrsi3))
yann@402
   415
 	.align	2
yann@402
   416
 GLOBAL(lshrsi3):
yann@402
   417
 	mov	#31,r0
yann@402
   418
@@ -633,6 +714,8 @@
yann@402
   419
 	rts
yann@402
   420
 	nop
yann@402
   421
 
yann@402
   422
+	ENDFUNC(GLOBAL(lshrsi3))
yann@402
   423
+
yann@402
   424
 #endif
yann@402
   425
 
yann@402
   426
 #ifdef L_movstr
yann@402
   427
@@ -649,76 +732,113 @@
yann@402
   428
 	add	#64,r4
yann@402
   429
 	.align	4
yann@402
   430
 	.global	GLOBAL(movstrSI64)
yann@402
   431
+	FUNC(GLOBAL(movstrSI64))
yann@402
   432
 GLOBAL(movstrSI64):
yann@402
   433
 	mov.l	@(60,r5),r0
yann@402
   434
 	mov.l	r0,@(60,r4)
yann@402
   435
 	.global	GLOBAL(movstrSI60)
yann@402
   436
+	FUNC(GLOBAL(movstrSI60))
yann@402
   437
 GLOBAL(movstrSI60):
yann@402
   438
 	mov.l	@(56,r5),r0
yann@402
   439
 	mov.l	r0,@(56,r4)
yann@402
   440
 	.global	GLOBAL(movstrSI56)
yann@402
   441
+	FUNC(GLOBAL(movstrSI56))
yann@402
   442
 GLOBAL(movstrSI56):
yann@402
   443
 	mov.l	@(52,r5),r0
yann@402
   444
 	mov.l	r0,@(52,r4)
yann@402
   445
 	.global	GLOBAL(movstrSI52)
yann@402
   446
+	FUNC(GLOBAL(movstrSI52))
yann@402
   447
 GLOBAL(movstrSI52):
yann@402
   448
 	mov.l	@(48,r5),r0
yann@402
   449
 	mov.l	r0,@(48,r4)
yann@402
   450
 	.global	GLOBAL(movstrSI48)
yann@402
   451
+	FUNC(GLOBAL(movstrSI48))
yann@402
   452
 GLOBAL(movstrSI48):
yann@402
   453
 	mov.l	@(44,r5),r0
yann@402
   454
 	mov.l	r0,@(44,r4)
yann@402
   455
 	.global	GLOBAL(movstrSI44)
yann@402
   456
+	FUNC(GLOBAL(movstrSI44))
yann@402
   457
 GLOBAL(movstrSI44):
yann@402
   458
 	mov.l	@(40,r5),r0
yann@402
   459
 	mov.l	r0,@(40,r4)
yann@402
   460
 	.global	GLOBAL(movstrSI40)
yann@402
   461
+	FUNC(GLOBAL(movstrSI40))
yann@402
   462
 GLOBAL(movstrSI40):
yann@402
   463
 	mov.l	@(36,r5),r0
yann@402
   464
 	mov.l	r0,@(36,r4)
yann@402
   465
 	.global	GLOBAL(movstrSI36)
yann@402
   466
+	FUNC(GLOBAL(movstrSI36))
yann@402
   467
 GLOBAL(movstrSI36):
yann@402
   468
 	mov.l	@(32,r5),r0
yann@402
   469
 	mov.l	r0,@(32,r4)
yann@402
   470
 	.global	GLOBAL(movstrSI32)
yann@402
   471
+	FUNC(GLOBAL(movstrSI32))
yann@402
   472
 GLOBAL(movstrSI32):
yann@402
   473
 	mov.l	@(28,r5),r0
yann@402
   474
 	mov.l	r0,@(28,r4)
yann@402
   475
 	.global	GLOBAL(movstrSI28)
yann@402
   476
+	FUNC(GLOBAL(movstrSI28))
yann@402
   477
 GLOBAL(movstrSI28):
yann@402
   478
 	mov.l	@(24,r5),r0
yann@402
   479
 	mov.l	r0,@(24,r4)
yann@402
   480
 	.global	GLOBAL(movstrSI24)
yann@402
   481
+	FUNC(GLOBAL(movstrSI24))
yann@402
   482
 GLOBAL(movstrSI24):
yann@402
   483
 	mov.l	@(20,r5),r0
yann@402
   484
 	mov.l	r0,@(20,r4)
yann@402
   485
 	.global	GLOBAL(movstrSI20)
yann@402
   486
+	FUNC(GLOBAL(movstrSI20))
yann@402
   487
 GLOBAL(movstrSI20):
yann@402
   488
 	mov.l	@(16,r5),r0
yann@402
   489
 	mov.l	r0,@(16,r4)
yann@402
   490
 	.global	GLOBAL(movstrSI16)
yann@402
   491
+	FUNC(GLOBAL(movstrSI16))
yann@402
   492
 GLOBAL(movstrSI16):
yann@402
   493
 	mov.l	@(12,r5),r0
yann@402
   494
 	mov.l	r0,@(12,r4)
yann@402
   495
 	.global	GLOBAL(movstrSI12)
yann@402
   496
+	FUNC(GLOBAL(movstrSI12))
yann@402
   497
 GLOBAL(movstrSI12):
yann@402
   498
 	mov.l	@(8,r5),r0
yann@402
   499
 	mov.l	r0,@(8,r4)
yann@402
   500
 	.global	GLOBAL(movstrSI8)
yann@402
   501
+	FUNC(GLOBAL(movstrSI8))
yann@402
   502
 GLOBAL(movstrSI8):
yann@402
   503
 	mov.l	@(4,r5),r0
yann@402
   504
 	mov.l	r0,@(4,r4)
yann@402
   505
 	.global	GLOBAL(movstrSI4)
yann@402
   506
+	FUNC(GLOBAL(movstrSI4))
yann@402
   507
 GLOBAL(movstrSI4):
yann@402
   508
 	mov.l	@(0,r5),r0
yann@402
   509
 	mov.l	r0,@(0,r4)
yann@402
   510
+	.global	GLOBAL(movstrSI0)
yann@402
   511
+	FUNC(GLOBAL(movstrSI0))
yann@402
   512
 GLOBAL(movstrSI0):
yann@402
   513
 	rts
yann@402
   514
 	nop
yann@402
   515
 
yann@402
   516
+	ENDFUNC(GLOBAL(movstrSI64))
yann@402
   517
+	ENDFUNC(GLOBAL(movstrSI60))
yann@402
   518
+	ENDFUNC(GLOBAL(movstrSI56))
yann@402
   519
+	ENDFUNC(GLOBAL(movstrSI52))
yann@402
   520
+	ENDFUNC(GLOBAL(movstrSI48))
yann@402
   521
+	ENDFUNC(GLOBAL(movstrSI44))
yann@402
   522
+	ENDFUNC(GLOBAL(movstrSI40))
yann@402
   523
+	ENDFUNC(GLOBAL(movstrSI36))
yann@402
   524
+	ENDFUNC(GLOBAL(movstrSI32))
yann@402
   525
+	ENDFUNC(GLOBAL(movstrSI28))
yann@402
   526
+	ENDFUNC(GLOBAL(movstrSI24))
yann@402
   527
+	ENDFUNC(GLOBAL(movstrSI20))
yann@402
   528
+	ENDFUNC(GLOBAL(movstrSI16))
yann@402
   529
+	ENDFUNC(GLOBAL(movstrSI12))
yann@402
   530
+	ENDFUNC(GLOBAL(movstrSI8))
yann@402
   531
+	ENDFUNC(GLOBAL(movstrSI4))
yann@402
   532
+	ENDFUNC(GLOBAL(movstrSI0))
yann@402
   533
+
yann@402
   534
 	.align	4
yann@402
   535
 
yann@402
   536
 	.global	GLOBAL(movstr)
yann@402
   537
+	FUNC(GLOBAL(movstr))
yann@402
   538
 GLOBAL(movstr):
yann@402
   539
 	mov.l	@(60,r5),r0
yann@402
   540
 	mov.l	r0,@(60,r4)
yann@402
   541
@@ -775,6 +895,8 @@
yann@402
   542
 	add	#64,r5
yann@402
   543
 	bra	GLOBAL(movstr)
yann@402
   544
 	add	#64,r4
yann@402
   545
+
yann@402
   546
+	FUNC(GLOBAL(movstr))
yann@402
   547
 #endif
yann@402
   548
 
yann@402
   549
 #ifdef L_movstr_i4
yann@402
   550
@@ -783,6 +905,10 @@
yann@402
   551
 	.global	GLOBAL(movstr_i4_odd)
yann@402
   552
 	.global	GLOBAL(movstrSI12_i4)
yann@402
   553
 
yann@402
   554
+	FUNC(GLOBAL(movstr_i4_even))
yann@402
   555
+	FUNC(GLOBAL(movstr_i4_odd))
yann@402
   556
+	FUNC(GLOBAL(movstrSI12_i4))
yann@402
   557
+
yann@402
   558
 	.p2align	5
yann@402
   559
 L_movstr_2mod4_end:
yann@402
   560
 	mov.l	r0,@(16,r4)
yann@402
   561
@@ -791,6 +917,11 @@
yann@402
   562
 
yann@402
   563
 	.p2align	2
yann@402
   564
 
yann@402
   565
+GLOBAL(movstr_i4_even):
yann@402
   566
+	mov.l	@r5+,r0
yann@402
   567
+	bra	L_movstr_start_even
yann@402
   568
+	mov.l	@r5+,r1
yann@402
   569
+
yann@402
   570
 GLOBAL(movstr_i4_odd):
yann@402
   571
 	mov.l	@r5+,r1
yann@402
   572
 	add	#-4,r4
yann@402
   573
@@ -817,10 +948,8 @@
yann@402
   574
 	rts
yann@402
   575
 	mov.l	r3,@(12,r4)
yann@402
   576
 
yann@402
   577
-GLOBAL(movstr_i4_even):
yann@402
   578
-	mov.l	@r5+,r0
yann@402
   579
-	bra	L_movstr_start_even
yann@402
   580
-	mov.l	@r5+,r1
yann@402
   581
+	ENDFUNC(GLOBAL(movstr_i4_even))
yann@402
   582
+	ENDFUNC(GLOBAL(movstr_i4_odd))
yann@402
   583
 
yann@402
   584
 	.p2align	4
yann@402
   585
 GLOBAL(movstrSI12_i4):
yann@402
   586
@@ -831,12 +960,16 @@
yann@402
   587
 	mov.l	r1,@(4,r4)
yann@402
   588
 	rts
yann@402
   589
 	mov.l	r2,@(8,r4)
yann@402
   590
+
yann@402
   591
+	ENDFUNC(GLOBAL(movstrSI12_i4))
yann@402
   592
+
yann@402
   593
 #endif
yann@402
   594
 
yann@402
   595
 #ifdef L_mulsi3
yann@402
   596
 
yann@402
   597
 
yann@402
   598
 	.global	GLOBAL(mulsi3)
yann@402
   599
+	FUNC(GLOBAL(mulsi3))
yann@402
   600
 
yann@402
   601
 ! r4 =       aabb
yann@402
   602
 ! r5 =       ccdd
yann@402
   603
@@ -869,7 +1002,7 @@
yann@402
   604
 	rts
yann@402
   605
 	add	r2,r0
yann@402
   606
 
yann@402
   607
-
yann@402
   608
+	FUNC(GLOBAL(mulsi3))
yann@402
   609
 #endif
yann@402
   610
 #endif /* ! __SH5__ */
yann@402
   611
 #ifdef L_sdivsi3_i4
yann@402
   612
@@ -879,6 +1012,7 @@
yann@402
   613
 !! args in r4 and r5, result in fpul, clobber dr0, dr2
yann@402
   614
 
yann@402
   615
 	.global	GLOBAL(sdivsi3_i4)
yann@402
   616
+	FUNC(GLOBAL(sdivsi3_i4))
yann@402
   617
 GLOBAL(sdivsi3_i4):
yann@402
   618
 	lds r4,fpul
yann@402
   619
 	float fpul,dr0
yann@402
   620
@@ -888,6 +1022,8 @@
yann@402
   621
 	rts
yann@402
   622
 	ftrc dr0,fpul
yann@402
   623
 
yann@402
   624
+	ENDFUNC(GLOBAL(sdivsi3_i4))
yann@402
   625
+
yann@402
   626
 #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
yann@402
   627
 !! args in r4 and r5, result in fpul, clobber r2, dr0, dr2
yann@402
   628
 
yann@402
   629
@@ -896,6 +1032,7 @@
yann@402
   630
 	.mode	SHcompact
yann@402
   631
 #endif
yann@402
   632
 	.global	GLOBAL(sdivsi3_i4)
yann@402
   633
+	FUNC(GLOBAL(sdivsi3_i4))
yann@402
   634
 GLOBAL(sdivsi3_i4):
yann@402
   635
 	sts.l fpscr,@-r15
yann@402
   636
 	mov #8,r2
yann@402
   637
@@ -910,6 +1047,8 @@
yann@402
   638
 	rts
yann@402
   639
 	lds.l @r15+,fpscr
yann@402
   640
 
yann@402
   641
+	ENDFUNC(GLOBAL(sdivsi3_i4))
yann@402
   642
+
yann@402
   643
 #endif /* ! __SH5__ || __SH5__ == 32 */
yann@402
   644
 #endif /* ! __SH4__ */
yann@402
   645
 #endif
yann@402
   646
@@ -924,9 +1063,10 @@
yann@402
   647
 !!
yann@402
   648
 !!
yann@402
   649
 
yann@402
   650
-!! args in r4 and r5, result in r0 clobber r1,r2,r3
yann@402
   651
+!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit
yann@402
   652
 
yann@402
   653
 	.global	GLOBAL(sdivsi3)
yann@402
   654
+	FUNC(GLOBAL(sdivsi3))
yann@402
   655
 #if __SHMEDIA__
yann@402
   656
 #if __SH5__ == 32
yann@402
   657
 	.section	.text..SHmedia32,"ax"
yann@402
   658
@@ -1076,6 +1216,7 @@
yann@402
   659
 div0:	rts
yann@402
   660
 	mov	#0,r0
yann@402
   661
 
yann@402
   662
+	ENDFUNC(GLOBAL(sdivsi3))
yann@402
   663
 #endif /* ! __SHMEDIA__ */
yann@402
   664
 #endif /* ! __SH4__ */
yann@402
   665
 #endif
yann@402
   666
@@ -1084,9 +1225,11 @@
yann@402
   667
 	.title "SH DIVIDE"
yann@402
   668
 !! 4 byte integer Divide code for the Hitachi SH
yann@402
   669
 #ifdef __SH4__
yann@402
   670
-!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
yann@402
   671
+!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4,
yann@402
   672
+!! and t bit
yann@402
   673
 
yann@402
   674
 	.global	GLOBAL(udivsi3_i4)
yann@402
   675
+	FUNC(GLOBAL(udivsi3_i4))
yann@402
   676
 GLOBAL(udivsi3_i4):
yann@402
   677
 	mov #1,r1
yann@402
   678
 	cmp/hi r1,r5
yann@402
   679
@@ -1127,6 +1270,8 @@
yann@402
   680
 L1:
yann@402
   681
 	.double 2147483648
yann@402
   682
 
yann@402
   683
+	ENDFUNC(GLOBAL(udivsi3_i4))
yann@402
   684
+
yann@402
   685
 #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
yann@402
   686
 !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
yann@402
   687
 
yann@402
   688
@@ -1135,6 +1280,7 @@
yann@402
   689
 	.mode	SHcompact
yann@402
   690
 #endif
yann@402
   691
 	.global	GLOBAL(udivsi3_i4)
yann@402
   692
+	FUNC(GLOBAL(udivsi3_i4))
yann@402
   693
 GLOBAL(udivsi3_i4):
yann@402
   694
 	mov #1,r1
yann@402
   695
 	cmp/hi r1,r5
yann@402
   696
@@ -1183,6 +1329,8 @@
yann@402
   697
 #endif
yann@402
   698
 	.double 2147483648
yann@402
   699
 
yann@402
   700
+	ENDFUNC(GLOBAL(udivsi3_i4))
yann@402
   701
+
yann@402
   702
 #endif /* ! __SH5__ || __SH5__ == 32 */
yann@402
   703
 #endif /* ! __SH4__ */
yann@402
   704
 #endif
yann@402
   705
@@ -1199,6 +1347,7 @@
yann@402
   706
 
yann@402
   707
 !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
yann@402
   708
 	.global	GLOBAL(udivsi3)
yann@402
   709
+	FUNC(GLOBAL(udivsi3))
yann@402
   710
 
yann@402
   711
 #if __SHMEDIA__
yann@402
   712
 #if __SH5__ == 32
yann@402
   713
@@ -1299,6 +1448,8 @@
yann@402
   714
 ret:	rts
yann@402
   715
 	mov	r4,r0
yann@402
   716
 
yann@402
   717
+	ENDFUNC(GLOBAL(udivsi3))
yann@402
   718
+
yann@402
   719
 #endif /* ! __SHMEDIA__ */
yann@402
   720
 #endif /* __SH4__ */
yann@402
   721
 #endif
yann@402
   722
@@ -1308,6 +1459,7 @@
yann@402
   723
 	.mode	SHcompact
yann@402
   724
 #endif
yann@402
   725
 	.global GLOBAL(set_fpscr)
yann@402
   726
+	FUNC(GLOBAL(set_fpscr))
yann@402
   727
 GLOBAL(set_fpscr):
yann@402
   728
 	lds r4,fpscr
yann@402
   729
 	mov.l LOCAL(set_fpscr_L1),r1
yann@402
   730
@@ -1340,11 +1492,16 @@
yann@402
   731
 	.align 2
yann@402
   732
 LOCAL(set_fpscr_L1):
yann@402
   733
 	.long GLOBAL(fpscr_values)
yann@402
   734
+
yann@402
   735
+	ENDFUNC(GLOBAL(set_fpscr))
yann@402
   736
+
yann@402
   737
+#ifndef NO_FPSCR_VALUES
yann@402
   738
 #ifdef __ELF__
yann@402
   739
         .comm   GLOBAL(fpscr_values),8,4
yann@402
   740
 #else
yann@402
   741
         .comm   GLOBAL(fpscr_values),8
yann@402
   742
 #endif /* ELF */
yann@402
   743
+#endif /* NO_FPSCR_VALUES */
yann@402
   744
 #endif /* SH3E / SH4 */
yann@402
   745
 #endif /* L_set_fpscr */
yann@402
   746
 #ifdef L_ic_invalidate
yann@402
   747
@@ -1360,6 +1517,7 @@
yann@402
   748
 	blink	tr0, r63
yann@402
   749
 #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
yann@402
   750
 	.global GLOBAL(ic_invalidate)
yann@402
   751
+	FUNC(GLOBAL(ic_invalidate))
yann@402
   752
 GLOBAL(ic_invalidate):
yann@402
   753
 	ocbwb	@r4
yann@402
   754
 	mova	0f,r0
yann@402
   755
@@ -1382,6 +1540,9 @@
yann@402
   756
 	nop
yann@402
   757
 	.endr
yann@402
   758
 	.endr
yann@402
   759
+
yann@402
   760
+	ENDFUNC(GLOBAL(ic_invalidate))
yann@402
   761
+
yann@402
   762
 #endif /* SH4 */
yann@402
   763
 #endif /* L_ic_invalidate */
yann@402
   764
 
yann@402
   765
diff -ruN gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver gcc-20030210/gcc/config/sh/libgcc-glibc.ver
yann@402
   766
--- gcc-20030210.orig/gcc/config/sh/libgcc-glibc.ver	Thu Jan  1 09:00:00 1970
yann@402
   767
+++ gcc-20030210/gcc/config/sh/libgcc-glibc.ver	Sat Feb 22 01:40:14 2003
yann@402
   768
@@ -0,0 +1,21 @@
yann@402
   769
+# In order to work around the very problems that force us to now generally
yann@402
   770
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
yann@402
   771
+# By now choosing the same version tags for these specific routines, we
yann@402
   772
+# maintain enough binary compatibility to allow future versions of glibc
yann@402
   773
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
yann@402
   774
+
yann@402
   775
+# Note that we cannot use the default libgcc-glibc.ver file on sh,
yann@402
   776
+# because GLIBC_2.0 does not exist on this architecture, as the first 
yann@402
   777
+# ever glibc release on the platform was GLIBC_2.2.
yann@402
   778
+
yann@402
   779
+%inherit GCC_3.0 GLIBC_2.2
yann@402
   780
+GLIBC_2.2 {
yann@402
   781
+  __register_frame
yann@402
   782
+  __register_frame_table
yann@402
   783
+  __deregister_frame
yann@402
   784
+  __register_frame_info
yann@402
   785
+  __deregister_frame_info
yann@402
   786
+  __frame_state_for
yann@402
   787
+  __register_frame_info_table
yann@402
   788
+}
yann@402
   789
+
yann@402
   790
diff -ruN gcc-20030210.orig/gcc/config/sh/linux.h gcc-20030210/gcc/config/sh/linux.h
yann@402
   791
--- gcc-20030210.orig/gcc/config/sh/linux.h	Tue Apr 16 05:27:42 2002
yann@402
   792
+++ gcc-20030210/gcc/config/sh/linux.h	Sat Feb 22 01:40:14 2003
yann@402
   793
@@ -19,6 +19,10 @@
yann@402
   794
 the Free Software Foundation, 59 Temple Place - Suite 330,
yann@402
   795
 Boston, MA 02111-1307, USA.  */
yann@402
   796
 
yann@402
   797
+/* We're not SYSVR4, not having /usr/ccs */
yann@402
   798
+#undef MD_EXEC_PREFIX
yann@402
   799
+#undef MD_STARTFILE_PREFIX
yann@402
   800
+
yann@402
   801
 /* Run-time Target Specification.  */
yann@402
   802
 #undef TARGET_VERSION
yann@402
   803
 #define TARGET_VERSION  fputs (" (SH GNU/Linux with ELF)", stderr);
yann@402
   804
@@ -39,6 +43,28 @@
yann@402
   805
 #undef WCHAR_TYPE_SIZE
yann@402
   806
 #define WCHAR_TYPE_SIZE BITS_PER_WORD
yann@402
   807
 
yann@402
   808
+/* This was defined in linux.h.  Define it here also. */
yann@402
   809
+#undef  DEFAULT_VTABLE_THUNKS
yann@402
   810
+#define DEFAULT_VTABLE_THUNKS   1
yann@402
   811
+
yann@402
   812
+/* Likewise.  */
yann@402
   813
+#define HANDLE_PRAGMA_PACK_PUSH_POP
yann@402
   814
+
yann@402
   815
+/* Pick up the return address upon entry to a procedure. Used for
yann@402
   816
+   dwarf2 unwind information.  This also enables the table driven
yann@402
   817
+   mechanism.  */
yann@402
   818
+
yann@402
   819
+#define INCOMING_RETURN_ADDR_RTX	gen_rtx_REG (Pmode, PR_REG)
yann@402
   820
+#define DWARF_FRAME_RETURN_COLUMN	DWARF_FRAME_REGNUM (PR_REG)
yann@402
   821
+
yann@402
   822
+#undef CPP_SPEC
yann@402
   823
+#define CPP_SPEC "\
yann@402
   824
+   %{m4:-D__SH4__} \
yann@402
   825
+   %{!m4:%(cpp_default_cpu_spec)} \
yann@402
   826
+   %(subtarget_cpp_spec) \
yann@402
   827
+   %(subtarget_cpp_ptr_spec) \
yann@402
   828
+   %(subtarget_cpp_endian_spec) "
yann@402
   829
+
yann@402
   830
 #undef SUBTARGET_CPP_SPEC
yann@402
   831
 #define SUBTARGET_CPP_SPEC "\
yann@402
   832
    %{fPIC:-D__PIC__ -D__pic__} \
yann@402
   833
@@ -55,36 +81,45 @@
yann@402
   834
 #undef CPP_DEFAULT_CPU_SPEC
yann@402
   835
 #define CPP_DEFAULT_CPU_SPEC "-D__SH3__ -D__sh3__"
yann@402
   836
 
yann@402
   837
-
yann@402
   838
 #undef CPP_PREDEFINES
yann@402
   839
 #define CPP_PREDEFINES "-D__ELF__ -Dunix -D__sh__ -D__gnu_linux__ -Dlinux -Asystem=posix"
yann@402
   840
 
yann@402
   841
+/* The GNU C++ standard library requires that these macros be defined.  */
yann@402
   842
+#undef CPLUSPLUS_CPP_SPEC
yann@402
   843
+#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
yann@402
   844
+
yann@402
   845
 #undef ASM_SPEC
yann@402
   846
-#define ASM_SPEC  "%{!mb:-little} %{mrelax:-relax}"
yann@402
   847
+#define ASM_SPEC  "%{mb:-big} %{!mb:-little} %{mrelax:-relax}"
yann@402
   848
 
yann@402
   849
 #undef CC1_SPEC
yann@402
   850
 #define CC1_SPEC \
yann@402
   851
-  "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
yann@402
   852
-
yann@402
   853
-#undef CC1PLUS_SPEC
yann@402
   854
-#define CC1PLUS_SPEC \
yann@402
   855
-  "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
yann@402
   856
+  "-musermode %{!mb:-ml} %{!m4:-m3} %{profile:-p}"
yann@402
   857
 
yann@402
   858
+/* XXX: It's wrong if prefix != /usr */
yann@402
   859
 #undef LINK_SPEC
yann@402
   860
 #define LINK_SPEC \
yann@402
   861
-  "%{!mb:-m shlelf_linux} %{mrelax:-relax} \
yann@402
   862
+  "%{!mb:-m shlelf_linux -EL} %{mb:-m shelf_linux -EB} %{mrelax:-relax} \
yann@402
   863
    %{shared:-shared} \
yann@402
   864
    %{!static: \
yann@402
   865
      %{rdynamic:-export-dynamic} \
yann@402
   866
      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
yann@402
   867
-     %{!rpath:-rpath /lib}} \
yann@402
   868
+     %{!mb:%{!m4:-rpath-link /usr/sh-linux/lib }} \
yann@402
   869
+     %{!mb:%{m4:-rpath-link /usr/sh-linux/lib/m4 }} \
yann@402
   870
+     %{mb:%{!m4:-rpath-link /usr/sh-linux/lib/mb }} \
yann@402
   871
+     %{mb:%{m4:-rpath-link /usr/sh-linux/lib/mb/m4 }}} \
yann@402
   872
    %{static:-static}"
yann@402
   873
 
yann@402
   874
 #undef LIB_SPEC
yann@402
   875
+#undef LIB_SPEC
yann@402
   876
 #define LIB_SPEC \
yann@402
   877
   "%{shared: -lc} \
yann@402
   878
-   %{!shared: %{pthread:-lthread} \
yann@402
   879
-     %{profile:-lc_p} %{!profile: -lc}}"
yann@402
   880
+   %{!shared: %{mieee:-lieee} %{pthread:-lpthread} \
yann@402
   881
+	%{profile:-lc_p} %{!profile: -lc}}"
yann@402
   882
+
yann@402
   883
+#if defined(HAVE_LD_EH_FRAME_HDR)
yann@402
   884
+#undef LINK_EH_SPEC
yann@402
   885
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
yann@402
   886
+#endif
yann@402
   887
 
yann@402
   888
 #undef STARTFILE_SPEC
yann@402
   889
 #define STARTFILE_SPEC \
yann@402
   890
@@ -92,4 +127,40 @@
yann@402
   891
      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
yann@402
   892
 		       %{!p:%{profile:gcrt1.o%s} \
yann@402
   893
 			 %{!profile:crt1.o%s}}}} \
yann@402
   894
-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
yann@402
   895
+   crti.o%s %{static:crtbeginT.o%s}\
yann@402
   896
+   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
yann@402
   897
+
yann@402
   898
+#undef FUNCTION_PROFILER
yann@402
   899
+#define FUNCTION_PROFILER(STREAM,LABELNO)				\
yann@402
   900
+do									\
yann@402
   901
+{									\
yann@402
   902
+  if (flag_pic)								\
yann@402
   903
+    {									\
yann@402
   904
+      fprintf (STREAM, "	mov.l	3f,r1\n");			\
yann@402
   905
+      fprintf (STREAM, "	mova	3f,r0\n");			\
yann@402
   906
+      fprintf (STREAM, "	add	r1,r0\n");			\
yann@402
   907
+      fprintf (STREAM, "	mov.l	1f,r1\n");			\
yann@402
   908
+      fprintf (STREAM, "	mov.l	@(r0,r1),r1\n");		\
yann@402
   909
+    }									\
yann@402
   910
+  else									\
yann@402
   911
+    {									\
yann@402
   912
+      fprintf (STREAM, "	mov.l	1f,r1\n");			\
yann@402
   913
+    }									\
yann@402
   914
+  fprintf (STREAM, "	sts.l	pr,@-r15\n");				\
yann@402
   915
+  fprintf (STREAM, "	mova	2f,r0\n");				\
yann@402
   916
+  fprintf (STREAM, "	jmp	@r1\n");				\
yann@402
   917
+  fprintf (STREAM, "	lds	r0,pr\n");				\
yann@402
   918
+  fprintf (STREAM, "	.align	2\n");					\
yann@402
   919
+  if (flag_pic)								\
yann@402
   920
+    {									\
yann@402
   921
+      fprintf (STREAM, "1:	.long	mcount@GOT\n");			\
yann@402
   922
+      fprintf (STREAM, "3:	.long	_GLOBAL_OFFSET_TABLE_\n");	\
yann@402
   923
+    }									\
yann@402
   924
+  else									\
yann@402
   925
+    {									\
yann@402
   926
+      fprintf (STREAM, "1:	.long	mcount\n");			\
yann@402
   927
+    }									\
yann@402
   928
+  fprintf (STREAM, "2:	lds.l	@r15+,pr\n");				\
yann@402
   929
+} while (0)
yann@402
   930
+
yann@402
   931
+#define NO_SHARED_LIBGCC_MULTILIB
yann@402
   932
diff -ruN gcc-20030210.orig/gcc/config/sh/sh-protos.h gcc-20030210/gcc/config/sh/sh-protos.h
yann@402
   933
--- gcc-20030210.orig/gcc/config/sh/sh-protos.h	Fri Feb 22 01:42:28 2002
yann@402
   934
+++ gcc-20030210/gcc/config/sh/sh-protos.h	Sat Feb 22 01:40:14 2003
yann@402
   935
@@ -74,6 +74,7 @@
yann@402
   936
 extern int shl_sext_length PARAMS ((rtx));
yann@402
   937
 extern int gen_shl_sext PARAMS ((rtx, rtx, rtx, rtx));
yann@402
   938
 extern rtx gen_datalabel_ref PARAMS ((rtx));
yann@402
   939
+extern int shl_casesi_worker_length PARAMS ((rtx));
yann@402
   940
 extern int regs_used PARAMS ((rtx, int));
yann@402
   941
 extern void fixup_addr_diff_vecs PARAMS ((rtx));
yann@402
   942
 extern int get_dest_uid PARAMS ((rtx, int));
yann@402
   943
diff -ruN gcc-20030210.orig/gcc/config/sh/sh.c gcc-20030210/gcc/config/sh/sh.c
yann@402
   944
--- gcc-20030210.orig/gcc/config/sh/sh.c	Fri Feb 22 01:42:28 2002
yann@402
   945
+++ gcc-20030210/gcc/config/sh/sh.c	Sat Feb 22 01:40:14 2003
yann@402
   946
@@ -2143,6 +2143,48 @@
yann@402
   947
   return sym;
yann@402
   948
 }
yann@402
   949
 
yann@402
   950
+
yann@402
   951
+/* Function to be used in the length attribute of the casesi_worker
yann@402
   952
+   instruction.  Returns number of instructions, which is half of the
yann@402
   953
+   length of bytes. */
yann@402
   954
+
yann@402
   955
+int
yann@402
   956
+shl_casesi_worker_length (insn)
yann@402
   957
+     rtx insn;
yann@402
   958
+{
yann@402
   959
+  rtx set_src, label;
yann@402
   960
+  rtx diff_vec;
yann@402
   961
+
yann@402
   962
+  set_src = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
yann@402
   963
+  if (!(GET_CODE (set_src) == UNSPEC
yann@402
   964
+	&& XINT (set_src, 1) == UNSPEC_CASESI))
yann@402
   965
+    abort ();
yann@402
   966
+
yann@402
   967
+  label = XVECEXP (set_src, 0, 2);
yann@402
   968
+  if (GET_CODE (label) != LABEL_REF)
yann@402
   969
+    abort ();
yann@402
   970
+
yann@402
   971
+  diff_vec = PATTERN (next_real_insn (XEXP (label, 0)));
yann@402
   972
+
yann@402
   973
+  if (GET_CODE (diff_vec) != ADDR_DIFF_VEC)
yann@402
   974
+    abort ();
yann@402
   975
+
yann@402
   976
+  switch (GET_MODE (diff_vec))
yann@402
   977
+    {
yann@402
   978
+    case SImode:
yann@402
   979
+      return 2;
yann@402
   980
+    case HImode:
yann@402
   981
+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
yann@402
   982
+	return 3;
yann@402
   983
+      return 2;
yann@402
   984
+    case QImode:
yann@402
   985
+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
yann@402
   986
+	return 2;
yann@402
   987
+      return 1;
yann@402
   988
+    default:
yann@402
   989
+      abort ();
yann@402
   990
+    }
yann@402
   991
+}
yann@402
   992
 
yann@402
   993
 /* The SH cannot load a large constant into a register, constants have to
yann@402
   994
    come from a pc relative load.  The reference of a pc relative load
yann@402
   995
@@ -3190,7 +3232,7 @@
yann@402
   996
       vec_lab = XEXP (XEXP (pat, 0), 0);
yann@402
   997
 
yann@402
   998
       /* Search the matching casesi_jump_2.  */
yann@402
   999
-      for (prev = vec_lab; ; prev = PREV_INSN (prev))
yann@402
  1000
+      for (prev = vec_lab; prev; prev = PREV_INSN (prev))
yann@402
  1001
 	{
yann@402
  1002
 	  if (GET_CODE (prev) != JUMP_INSN)
yann@402
  1003
 	    continue;
yann@402
  1004
@@ -3205,6 +3247,13 @@
yann@402
  1005
 	    break;
yann@402
  1006
 	}
yann@402
  1007
 
yann@402
  1008
+      if (prev == NULL)
yann@402
  1009
+	{			/* Switch statement has been optimized out.  */
yann@402
  1010
+	  delete_insn (PREV_INSN (insn));
yann@402
  1011
+	  delete_insn (insn);
yann@402
  1012
+	  continue;
yann@402
  1013
+	}
yann@402
  1014
+
yann@402
  1015
       /* Emit the reference label of the braf where it belongs, right after
yann@402
  1016
 	 the casesi_jump_2 (i.e. braf).  */
yann@402
  1017
       braf_label = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);
yann@402
  1018
@@ -3223,7 +3272,7 @@
yann@402
  1019
      rtx barrier_or_label;
yann@402
  1020
 {
yann@402
  1021
   rtx next = next_real_insn (barrier_or_label), pat, prev;
yann@402
  1022
-  int slot, credit, jump_to_next;
yann@402
  1023
+  int slot, credit, jump_to_next = 0;
yann@402
  1024
  
yann@402
  1025
   if (! next)
yann@402
  1026
     return 0;
yann@402
  1027
@@ -4507,7 +4556,8 @@
yann@402
  1028
   if (current_function_varargs || current_function_stdarg)
yann@402
  1029
     {
yann@402
  1030
       /* This is not used by the SH3E calling convention  */
yann@402
  1031
-      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI)
yann@402
  1032
+      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI
yann@402
  1033
+	  || TARGET_NO_IMPLICIT_FP)
yann@402
  1034
 	{
yann@402
  1035
 	  /* Push arg regs as if they'd been provided by caller in stack.  */
yann@402
  1036
 	  for (i = 0; i < NPARM_REGS(SImode); i++)
yann@402
  1037
@@ -5149,7 +5199,8 @@
yann@402
  1038
   tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
yann@402
  1039
   tree record;
yann@402
  1040
 
yann@402
  1041
-  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
yann@402
  1042
+  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI
yann@402
  1043
+      || TARGET_NO_IMPLICIT_FP)
yann@402
  1044
     return ptr_type_node;
yann@402
  1045
 
yann@402
  1046
   record = make_node (RECORD_TYPE);
yann@402
  1047
@@ -5211,7 +5262,8 @@
yann@402
  1048
       return;
yann@402
  1049
     }
yann@402
  1050
 
yann@402
  1051
-  if ((! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
yann@402
  1052
+  if ((! TARGET_SH3E && ! TARGET_SH4)
yann@402
  1053
+      || TARGET_HITACHI || TARGET_NO_IMPLICIT_FP)
yann@402
  1054
     {
yann@402
  1055
       std_expand_builtin_va_start (stdarg_p, valist, nextarg);
yann@402
  1056
       return;
yann@402
  1057
@@ -5289,7 +5341,8 @@
yann@402
  1058
   rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
yann@402
  1059
   pptr_type_node = build_pointer_type (ptr_type_node);
yann@402
  1060
 
yann@402
  1061
-  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4) && ! TARGET_HITACHI)
yann@402
  1062
+  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4)
yann@402
  1063
+      && ! TARGET_HITACHI && ! TARGET_NO_IMPLICIT_FP)
yann@402
  1064
     {
yann@402
  1065
       tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;
yann@402
  1066
       tree next_o, next_o_limit, next_fp, next_fp_limit, next_stack;
yann@402
  1067
diff -ruN gcc-20030210.orig/gcc/config/sh/sh.h gcc-20030210/gcc/config/sh/sh.h
yann@402
  1068
--- gcc-20030210.orig/gcc/config/sh/sh.h	Fri Feb 22 01:42:28 2002
yann@402
  1069
+++ gcc-20030210/gcc/config/sh/sh.h	Sat Feb 22 01:40:14 2003
yann@402
  1070
@@ -147,10 +147,10 @@
yann@402
  1071
 #define HARD_SH4_BIT	(1<<5)
yann@402
  1072
 #define FPU_SINGLE_BIT	(1<<7)
yann@402
  1073
 #define SH4_BIT	       	(1<<12)
yann@402
  1074
+#define NO_IMPLICIT_FP_BIT	(1<<3)
yann@402
  1075
 #define FMOVD_BIT	(1<<4)
yann@402
  1076
 #define SH5_BIT		(1<<0)
yann@402
  1077
 #define SPACE_BIT 	(1<<13)
yann@402
  1078
-#define BIGTABLE_BIT  	(1<<14)
yann@402
  1079
 #define RELAX_BIT	(1<<15)
yann@402
  1080
 #define USERMODE_BIT	(1<<16)
yann@402
  1081
 #define HITACHI_BIT     (1<<22)
yann@402
  1082
@@ -205,6 +205,9 @@
yann@402
  1083
 /* Nonzero if we should generate code for a SH5 CPU (either ISA).  */
yann@402
  1084
 #define TARGET_SH5 (target_flags & SH5_BIT)
yann@402
  1085
 
yann@402
  1086
+/* Nonzero if we should not use FPU implicitly.  */
yann@402
  1087
+#define TARGET_NO_IMPLICIT_FP (target_flags & NO_IMPLICIT_FP_BIT)
yann@402
  1088
+
yann@402
  1089
 /* Nonzero if we should generate code using the SHcompact instruction
yann@402
  1090
    set and 32-bit ABI.  */
yann@402
  1091
 #define TARGET_SHCOMPACT (TARGET_SH5 && TARGET_SH1)
yann@402
  1092
@@ -225,6 +228,7 @@
yann@402
  1093
 
yann@402
  1094
 /* Nonzero if we should generate code using SHmedia FPU instructions.  */
yann@402
  1095
 #define TARGET_SHMEDIA_FPU (TARGET_SHMEDIA && TARGET_FPU_DOUBLE)
yann@402
  1096
+
yann@402
  1097
 /* Nonzero if we should generate fmovd.  */
yann@402
  1098
 #define TARGET_FMOVD (target_flags & FMOVD_BIT)
yann@402
  1099
 
yann@402
  1100
@@ -234,9 +238,6 @@
yann@402
  1101
 /* Nonzero if we should generate smaller code rather than faster code.  */
yann@402
  1102
 #define TARGET_SMALLCODE   (target_flags & SPACE_BIT)
yann@402
  1103
 
yann@402
  1104
-/* Nonzero to use long jump tables.  */
yann@402
  1105
-#define TARGET_BIGTABLE     (target_flags & BIGTABLE_BIT)
yann@402
  1106
-
yann@402
  1107
 /* Nonzero to generate pseudo-ops needed by the assembler and linker
yann@402
  1108
    to do function call relaxing.  */
yann@402
  1109
 #define TARGET_RELAX (target_flags & RELAX_BIT)
yann@402
  1110
@@ -297,7 +298,6 @@
yann@402
  1111
   {"5-compact-nofpu", TARGET_NONE, "" },	\
yann@402
  1112
   {"5-compact-nofpu", SH5_BIT|SH3_BIT|SH2_BIT|SH1_BIT, "Generate FPU-less SHcompact code" }, \
yann@402
  1113
   {"b",		-LITTLE_ENDIAN_BIT, "" },  	\
yann@402
  1114
-  {"bigtable", 	BIGTABLE_BIT, "" },		\
yann@402
  1115
   {"dalign",  	DALIGN_BIT, "" },		\
yann@402
  1116
   {"fmovd",  	FMOVD_BIT, "" },		\
yann@402
  1117
   {"hitachi",	HITACHI_BIT, "" },		\
yann@402
  1118
@@ -306,6 +306,7 @@
yann@402
  1119
   {"isize", 	ISIZE_BIT, "" },		\
yann@402
  1120
   {"l",		LITTLE_ENDIAN_BIT, "" },  	\
yann@402
  1121
   {"no-ieee",  	-IEEE_BIT, "" },		\
yann@402
  1122
+  {"no-implicit-fp", NO_IMPLICIT_FP_BIT, "" },	\
yann@402
  1123
   {"padstruct", PADSTRUCT_BIT, "" },    	\
yann@402
  1124
   {"prefergot",	PREFERGOT_BIT, "" },		\
yann@402
  1125
   {"relax",	RELAX_BIT, "" },		\
yann@402
  1126
@@ -2493,16 +2494,22 @@
yann@402
  1127
     goto LABEL;								\
yann@402
  1128
 }
yann@402
  1129
 
yann@402
  1130
+extern int optimize; /* needed for gen_casesi.  */
yann@402
  1131
+extern int optimize_size;
yann@402
  1132
+
yann@402
  1133
 /* Specify the machine mode that this machine uses
yann@402
  1134
    for the index in the tablejump instruction.  */
yann@402
  1135
-#define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)
yann@402
  1136
+#define CASE_VECTOR_MODE SImode
yann@402
  1137
 
yann@402
  1138
 #define CASE_VECTOR_SHORTEN_MODE(MIN_OFFSET, MAX_OFFSET, BODY) \
yann@402
  1139
 ((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 127 \
yann@402
  1140
  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, QImode) \
yann@402
  1141
  : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 255 \
yann@402
  1142
  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, QImode) \
yann@402
  1143
- : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 ? HImode \
yann@402
  1144
+ : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 \
yann@402
  1145
+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, HImode) \
yann@402
  1146
+ : optimize_size && (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 65535 \
yann@402
  1147
+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, HImode) \
yann@402
  1148
  : SImode)
yann@402
  1149
 
yann@402
  1150
 /* Define as C expression which evaluates to nonzero if the tablejump
yann@402
  1151
@@ -3038,10 +3045,7 @@
yann@402
  1152
 /* Output an absolute table element.  */
yann@402
  1153
 
yann@402
  1154
 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)  				\
yann@402
  1155
-  if (TARGET_BIGTABLE) 							\
yann@402
  1156
-    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); 			\
yann@402
  1157
-  else									\
yann@402
  1158
-    asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); 			\
yann@402
  1159
+    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE))
yann@402
  1160
 
yann@402
  1161
 /* Output various types of constants.  */
yann@402
  1162
 
yann@402
  1163
@@ -3167,8 +3171,6 @@
yann@402
  1164
 #define sh_cpu_attr ((enum attr_cpu)sh_cpu)
yann@402
  1165
 extern enum processor_type sh_cpu;
yann@402
  1166
 
yann@402
  1167
-extern int optimize; /* needed for gen_casesi.  */
yann@402
  1168
-
yann@402
  1169
 enum mdep_reorg_phase_e
yann@402
  1170
 {
yann@402
  1171
   SH_BEFORE_MDEP_REORG,
yann@402
  1172
diff -ruN gcc-20030210.orig/gcc/config/sh/sh.md gcc-20030210/gcc/config/sh/sh.md
yann@402
  1173
--- gcc-20030210.orig/gcc/config/sh/sh.md	Sat Nov 23 04:58:06 2002
yann@402
  1174
+++ gcc-20030210/gcc/config/sh/sh.md	Sat Feb 22 01:40:14 2003
yann@402
  1175
@@ -1242,7 +1242,7 @@
yann@402
  1176
    (clobber (reg:SI PR_REG))
yann@402
  1177
    (clobber (reg:SI R4_REG))
yann@402
  1178
    (use (match_operand:SI 1 "arith_reg_operand" "r"))]
yann@402
  1179
-  "TARGET_SH1 && ! TARGET_SH4"
yann@402
  1180
+  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
yann@402
  1181
   "jsr	@%1%#"
yann@402
  1182
   [(set_attr "type" "sfunc")
yann@402
  1183
    (set_attr "needs_delay_slot" "yes")])
yann@402
  1184
@@ -1336,7 +1336,7 @@
yann@402
  1185
 
yann@402
  1186
   operands[3] = gen_reg_rtx (Pmode);
yann@402
  1187
   /* Emit the move of the address to a pseudo outside of the libcall.  */
yann@402
  1188
-  if (TARGET_HARD_SH4 && TARGET_SH3E)
yann@402
  1189
+  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
yann@402
  1190
     {
yann@402
  1191
       emit_move_insn (operands[3],
yann@402
  1192
 		      gen_rtx_SYMBOL_REF (SImode, \"__udivsi3_i4\"));
yann@402
  1193
@@ -1391,7 +1391,7 @@
yann@402
  1194
    (clobber (reg:SI R2_REG))
yann@402
  1195
    (clobber (reg:SI R3_REG))
yann@402
  1196
    (use (match_operand:SI 1 "arith_reg_operand" "r"))]
yann@402
  1197
-  "TARGET_SH1 && ! TARGET_SH4"
yann@402
  1198
+  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"
yann@402
  1199
   "jsr	@%1%#"
yann@402
  1200
   [(set_attr "type" "sfunc")
yann@402
  1201
    (set_attr "needs_delay_slot" "yes")])
yann@402
  1202
@@ -1476,7 +1476,7 @@
yann@402
  1203
 
yann@402
  1204
   operands[3] = gen_reg_rtx (Pmode);
yann@402
  1205
   /* Emit the move of the address to a pseudo outside of the libcall.  */
yann@402
  1206
-  if (TARGET_HARD_SH4 && TARGET_SH3E)
yann@402
  1207
+  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)
yann@402
  1208
     {
yann@402
  1209
       emit_move_insn (operands[3],
yann@402
  1210
 		      gen_rtx_SYMBOL_REF (SImode, \"__sdivsi3_i4\"));
yann@402
  1211
@@ -6446,6 +6446,8 @@
yann@402
  1212
     case SImode:
yann@402
  1213
       return \"shll2	%1\;mov.l	@(r0,%1),%0\";
yann@402
  1214
     case HImode:
yann@402
  1215
+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
yann@402
  1216
+	return \"add	%1,%1\;mov.w	@(r0,%1),%0\;extu.w	%0,%0\";
yann@402
  1217
       return \"add	%1,%1\;mov.w	@(r0,%1),%0\";
yann@402
  1218
     case QImode:
yann@402
  1219
       if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
yann@402
  1220
@@ -6455,7 +6457,15 @@
yann@402
  1221
       abort ();
yann@402
  1222
     }
yann@402
  1223
 }"
yann@402
  1224
-  [(set_attr "length" "4")])
yann@402
  1225
+  [(set (attr "length")
yann@402
  1226
+	(cond [(eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 1))
yann@402
  1227
+	       (const_string "2")
yann@402
  1228
+	       (eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 2))
yann@402
  1229
+	       (const_string "4")
yann@402
  1230
+	       ;; Put "match_dup" here so that insn_variable_length_p return 1.
yann@402
  1231
+	       (ne (match_dup 2) (match_dup 2))
yann@402
  1232
+	       (const_string "4")]
yann@402
  1233
+	      (const_string "6")))])
yann@402
  1234
 
yann@402
  1235
 (define_insn "casesi_shift_media"
yann@402
  1236
   [(set (match_operand 0 "arith_reg_operand" "=r")
yann@402
  1237
diff -ruN gcc-20030210.orig/gcc/config/sh/sh3-linux.h gcc-20030210/gcc/config/sh/sh3-linux.h
yann@402
  1238
--- gcc-20030210.orig/gcc/config/sh/sh3-linux.h	Thu Jan  1 09:00:00 1970
yann@402
  1239
+++ gcc-20030210/gcc/config/sh/sh3-linux.h	Sat Feb 22 01:40:14 2003
yann@402
  1240
@@ -0,0 +1,29 @@
yann@402
  1241
+#undef TARGET_VERSION
yann@402
  1242
+#define TARGET_VERSION  fputs (" (SH3 GNU/Linux with ELF)", stderr);
yann@402
  1243
+
yann@402
  1244
+#undef CPP_SPEC
yann@402
  1245
+#define CPP_SPEC \
yann@402
  1246
+  "-D__LITTLE_ENDIAN__ \
yann@402
  1247
+   -D__SH3__ -D__sh3__ \
yann@402
  1248
+   -D__SIZE_TYPE__=unsigned\\ int \
yann@402
  1249
+   -D__PTRDIFF_TYPE__=int \
yann@402
  1250
+   %{fPIC:-D__PIC__ -D__pic__} \
yann@402
  1251
+   %{fpic:-D__PIC__ -D__pic__} \
yann@402
  1252
+   %{posix:-D_POSIX_SOURCE} \
yann@402
  1253
+   %{pthread:-D_REENTRANT -D_PTHREADS}"
yann@402
  1254
+
yann@402
  1255
+#undef ASM_SPEC
yann@402
  1256
+#define ASM_SPEC  "%{mrelax:-relax}"
yann@402
  1257
+
yann@402
  1258
+#undef CC1_SPEC
yann@402
  1259
+#define CC1_SPEC \
yann@402
  1260
+  "-musermode -ml -m3 %{profile:-p}"
yann@402
  1261
+
yann@402
  1262
+#undef LINK_SPEC
yann@402
  1263
+#define LINK_SPEC \
yann@402
  1264
+  "%{mrelax:-relax} \
yann@402
  1265
+   %{shared:-shared} \
yann@402
  1266
+   %{!static: \
yann@402
  1267
+     %{rdynamic:-export-dynamic} \
yann@402
  1268
+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
yann@402
  1269
+    %{static:-static}"
yann@402
  1270
diff -ruN gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h gcc-20030210/gcc/config/sh/sh3eb-linux.h
yann@402
  1271
--- gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h	Thu Jan  1 09:00:00 1970
yann@402
  1272
+++ gcc-20030210/gcc/config/sh/sh3eb-linux.h	Sat Feb 22 01:40:14 2003
yann@402
  1273
@@ -0,0 +1,29 @@
yann@402
  1274
+#undef TARGET_VERSION
yann@402
  1275
+#define TARGET_VERSION  fputs (" (SH3EB GNU/Linux with ELF)", stderr);
yann@402
  1276
+
yann@402
  1277
+#undef CPP_SPEC
yann@402
  1278
+#define CPP_SPEC \
yann@402
  1279
+  "-D__BIG_ENDIAN__ \
yann@402
  1280
+   -D__SH3__ -D__sh3__ \
yann@402
  1281
+   -D__SIZE_TYPE__=unsigned\\ int \
yann@402
  1282
+   -D__PTRDIFF_TYPE__=int \
yann@402
  1283
+   %{fPIC:-D__PIC__ -D__pic__} \
yann@402
  1284
+   %{fpic:-D__PIC__ -D__pic__} \
yann@402
  1285
+   %{posix:-D_POSIX_SOURCE} \
yann@402
  1286
+   %{pthread:-D_REENTRANT -D_PTHREADS}"
yann@402
  1287
+
yann@402
  1288
+#undef ASM_SPEC
yann@402
  1289
+#define ASM_SPEC  "%{mrelax:-relax}"
yann@402
  1290
+
yann@402
  1291
+#undef CC1_SPEC
yann@402
  1292
+#define CC1_SPEC \
yann@402
  1293
+  "-musermode -mb -m3 %{profile:-p}"
yann@402
  1294
+
yann@402
  1295
+#undef LINK_SPEC
yann@402
  1296
+#define LINK_SPEC \
yann@402
  1297
+  "%{mrelax:-relax} \
yann@402
  1298
+   %{shared:-shared} \
yann@402
  1299
+   %{!static: \
yann@402
  1300
+     %{rdynamic:-export-dynamic} \
yann@402
  1301
+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
yann@402
  1302
+    %{static:-static}"
yann@402
  1303
diff -ruN gcc-20030210.orig/gcc/config/sh/sh4-linux.h gcc-20030210/gcc/config/sh/sh4-linux.h
yann@402
  1304
--- gcc-20030210.orig/gcc/config/sh/sh4-linux.h	Thu Jan  1 09:00:00 1970
yann@402
  1305
+++ gcc-20030210/gcc/config/sh/sh4-linux.h	Sat Feb 22 01:40:14 2003
yann@402
  1306
@@ -0,0 +1,29 @@
yann@402
  1307
+#undef TARGET_VERSION
yann@402
  1308
+#define TARGET_VERSION  fputs (" (SH4 GNU/Linux with ELF)", stderr);
yann@402
  1309
+
yann@402
  1310
+#undef CPP_SPEC
yann@402
  1311
+#define CPP_SPEC \
yann@402
  1312
+  "-D__LITTLE_ENDIAN__ \
yann@402
  1313
+   -D__SH4__ \
yann@402
  1314
+   -D__SIZE_TYPE__=unsigned\\ int \
yann@402
  1315
+   -D__PTRDIFF_TYPE__=int \
yann@402
  1316
+   %{fPIC:-D__PIC__ -D__pic__} \
yann@402
  1317
+   %{fpic:-D__PIC__ -D__pic__} \
yann@402
  1318
+   %{posix:-D_POSIX_SOURCE} \
yann@402
  1319
+   %{pthread:-D_REENTRANT -D_PTHREADS}"
yann@402
  1320
+
yann@402
  1321
+#undef ASM_SPEC
yann@402
  1322
+#define ASM_SPEC  "%{mrelax:-relax}"
yann@402
  1323
+
yann@402
  1324
+#undef CC1_SPEC
yann@402
  1325
+#define CC1_SPEC \
yann@402
  1326
+  "-musermode -ml -m4 %{profile:-p}"
yann@402
  1327
+
yann@402
  1328
+#undef LINK_SPEC
yann@402
  1329
+#define LINK_SPEC \
yann@402
  1330
+  "%{mrelax:-relax} \
yann@402
  1331
+   %{shared:-shared} \
yann@402
  1332
+   %{!static: \
yann@402
  1333
+     %{rdynamic:-export-dynamic} \
yann@402
  1334
+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
yann@402
  1335
+    %{static:-static}"
yann@402
  1336
diff -ruN gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h gcc-20030210/gcc/config/sh/sh4eb-linux.h
yann@402
  1337
--- gcc-20030210.orig/gcc/config/sh/sh4eb-linux.h	Thu Jan  1 09:00:00 1970
yann@402
  1338
+++ gcc-20030210/gcc/config/sh/sh4eb-linux.h	Sat Feb 22 01:40:14 2003
yann@402
  1339
@@ -0,0 +1,29 @@
yann@402
  1340
+#undef TARGET_VERSION
yann@402
  1341
+#define TARGET_VERSION  fputs (" (SH4EB GNU/Linux with ELF)", stderr);
yann@402
  1342
+
yann@402
  1343
+#undef CPP_SPEC
yann@402
  1344
+#define CPP_SPEC \
yann@402
  1345
+  "-D__BIG_ENDIAN__ \
yann@402
  1346
+   -D__SH4__ \
yann@402
  1347
+   -D__SIZE_TYPE__=unsigned\\ int \
yann@402
  1348
+   -D__PTRDIFF_TYPE__=int \
yann@402
  1349
+   %{fPIC:-D__PIC__ -D__pic__} \
yann@402
  1350
+   %{fpic:-D__PIC__ -D__pic__} \
yann@402
  1351
+   %{posix:-D_POSIX_SOURCE} \
yann@402
  1352
+   %{pthread:-D_REENTRANT -D_PTHREADS}"
yann@402
  1353
+
yann@402
  1354
+#undef ASM_SPEC
yann@402
  1355
+#define ASM_SPEC  "%{mrelax:-relax}"
yann@402
  1356
+
yann@402
  1357
+#undef CC1_SPEC
yann@402
  1358
+#define CC1_SPEC \
yann@402
  1359
+  "-musermode -mb -m4 %{profile:-p}"
yann@402
  1360
+
yann@402
  1361
+#undef LINK_SPEC
yann@402
  1362
+#define LINK_SPEC \
yann@402
  1363
+  "%{mrelax:-relax} \
yann@402
  1364
+   %{shared:-shared} \
yann@402
  1365
+   %{!static: \
yann@402
  1366
+     %{rdynamic:-export-dynamic} \
yann@402
  1367
+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
yann@402
  1368
+    %{static:-static}"
yann@402
  1369
diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux gcc-20030210/gcc/config/sh/t-linux
yann@402
  1370
--- gcc-20030210.orig/gcc/config/sh/t-linux	Thu May 17 12:16:12 2001
yann@402
  1371
+++ gcc-20030210/gcc/config/sh/t-linux	Sat Feb 22 01:40:14 2003
yann@402
  1372
@@ -1,10 +1,20 @@
yann@402
  1373
-TARGET_LIBGCC2_CFLAGS = -fpic
yann@402
  1374
+TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
yann@402
  1375
+LIBGCC1 = libgcc1-asm.a
yann@402
  1376
+CROSS_LIBGCC1 = libgcc1-asm.a
yann@402
  1377
+LIBGCC1_TEST = libgcc1-test
yann@402
  1378
 LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \
yann@402
  1379
   _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
yann@402
  1380
   _ic_invalidate
yann@402
  1381
+LIB2ADDEH = $(srcdir)/unwind-sjlj.c
yann@402
  1382
+LIB2ADDEHDEP = unwind.inc unwind-sjlj.c
yann@402
  1383
 
yann@402
  1384
-MULTILIB_OPTIONS= mb m3e/m4
yann@402
  1385
+MULTILIB_OPTIONS= mb m4
yann@402
  1386
 MULTILIB_DIRNAMES= 
yann@402
  1387
 MULTILIB_MATCHES = 
yann@402
  1388
 
yann@402
  1389
-EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
yann@402
  1390
+EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
yann@402
  1391
+
yann@402
  1392
+# Override t-slibgcc-elf-ver to export some libgcc symbols with
yann@402
  1393
+# the symbol versions that glibc used and SH specific.
yann@402
  1394
+SHLIB_MAPFILES =  $(srcdir)/libgcc-std.ver \
yann@402
  1395
+		  $(srcdir)/config/sh/libgcc-glibc.ver
yann@402
  1396
diff -ruN gcc-20030210.orig/gcc/config/sh/t-linux-nomulti gcc-20030210/gcc/config/sh/t-linux-nomulti
yann@402
  1397
--- gcc-20030210.orig/gcc/config/sh/t-linux-nomulti	Thu Jan  1 09:00:00 1970
yann@402
  1398
+++ gcc-20030210/gcc/config/sh/t-linux-nomulti	Sat Feb 22 01:40:14 2003
yann@402
  1399
@@ -0,0 +1,9 @@
yann@402
  1400
+LIBGCC = libgcc.a
yann@402
  1401
+EXTRA_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crtbeginT.o
yann@402
  1402
+
yann@402
  1403
+INSTALL_LIBGCC = install-libgcc
yann@402
  1404
+
yann@402
  1405
+MULTILIB_OPTIONS=
yann@402
  1406
+MULTILIB_DIRNAMES= 
yann@402
  1407
+MULTILIB_MATCHES = 
yann@402
  1408
+EXTRA_MULTILIB_PARTS=
yann@402
  1409
diff -ruN gcc-20030210.orig/gcc/config.gcc gcc-20030210/gcc/config.gcc
yann@402
  1410
--- gcc-20030210.orig/gcc/config.gcc	Fri Jan 31 19:17:13 2003
yann@402
  1411
+++ gcc-20030210/gcc/config.gcc	Sat Feb 22 01:40:14 2003
yann@402
  1412
@@ -337,9 +337,9 @@
yann@402
  1413
 sparc*-*-*)
yann@402
  1414
 	cpu_type=sparc
yann@402
  1415
 	;;
yann@402
  1416
-sh64-*-*)
yann@402
  1417
-	cpu_type=sh
yann@402
  1418
-	;;
yann@402
  1419
+sh*-*-*)
yann@402
  1420
+ 	cpu_type=sh
yann@402
  1421
+ 	;;
yann@402
  1422
 esac
yann@402
  1423
 
yann@402
  1424
 tm_file=${cpu_type}/${cpu_type}.h
yann@402
  1425
@@ -3018,9 +3018,31 @@
yann@402
  1426
 	  thread_file='rtems'
yann@402
  1427
 	fi
yann@402
  1428
 	;;
yann@402
  1429
-sh-*-linux*)
yann@402
  1430
+sh*-*-linux*)
yann@402
  1431
 	tm_file="${tm_file} sh/elf.h sh/linux.h"
yann@402
  1432
-	tmake_file="sh/t-sh sh/t-elf sh/t-linux"
yann@402
  1433
+	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux sh/t-linux"
yann@402
  1434
+	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
yann@402
  1435
+	case $machine in
yann@402
  1436
+		sh3eb-*)
yann@402
  1437
+			tm_file="${tm_file} sh/sh3eb-linux.h"
yann@402
  1438
+			tmake_file="${tmake_file} sh/t-linux-nomulti"
yann@402
  1439
+			;;
yann@402
  1440
+		sh4eb-*)
yann@402
  1441
+			tm_file="${tm_file} sh/sh4eb-linux.h"
yann@402
  1442
+			tmake_file="${tmake_file} sh/t-linux-nomulti"
yann@402
  1443
+			;;
yann@402
  1444
+		sh3-*)
yann@402
  1445
+			tm_file="${tm_file} sh/sh3-linux.h"
yann@402
  1446
+			tmake_file="${tmake_file} sh/t-linux-nomulti"
yann@402
  1447
+			;;
yann@402
  1448
+		sh4-*)
yann@402
  1449
+			tm_file="${tm_file} sh/sh4-linux.h"
yann@402
  1450
+			tmake_file="${tmake_file} sh/t-linux-nomulti"
yann@402
  1451
+			;;
yann@402
  1452
+		*)
yann@402
  1453
+			;;
yann@402
  1454
+	esac
yann@402
  1455
+	xmake_file=x-linux
yann@402
  1456
 	gas=yes gnu_ld=yes
yann@402
  1457
 	float_format=sh
yann@402
  1458
 	;;
yann@402
  1459
diff -ruN gcc-20030210.orig/gcc/dwarf2out.c gcc-20030210/gcc/dwarf2out.c
yann@402
  1460
--- gcc-20030210.orig/gcc/dwarf2out.c	Mon Feb 10 19:36:25 2003
yann@402
  1461
+++ gcc-20030210/gcc/dwarf2out.c	Sat Feb 22 01:40:14 2003
yann@402
  1462
@@ -10224,7 +10224,9 @@
yann@402
  1463
 	  /* We can have a normal definition following an inline one in the
yann@402
  1464
 	     case of redefinition of GNU C extern inlines.
yann@402
  1465
 	     It seems reasonable to use AT_specification in this case.  */
yann@402
  1466
-	  && !get_AT_unsigned (old_die, DW_AT_inline))
yann@402
  1467
+	  && !get_AT_unsigned (old_die, DW_AT_inline)
yann@402
  1468
+	  /* Skip the nested function.  */
yann@402
  1469
+	  && !decl_function_context (decl))
yann@402
  1470
 	{
yann@402
  1471
 	  /* ??? This can happen if there is a bug in the program, for
yann@402
  1472
 	     instance, if it has duplicate function definitions.  Ideally,
yann@402
  1473
diff -ruN gcc-20030210.orig/gcc/final.c gcc-20030210/gcc/final.c
yann@402
  1474
--- gcc-20030210.orig/gcc/final.c	Fri Jan 31 19:17:20 2003
yann@402
  1475
+++ gcc-20030210/gcc/final.c	Sat Feb 22 01:40:14 2003
yann@402
  1476
@@ -1128,7 +1128,7 @@
yann@402
  1477
 	    }
yann@402
  1478
 	}
yann@402
  1479
 
yann@402
  1480
-      INSN_ADDRESSES (uid) = insn_current_address;
yann@402
  1481
+      INSN_ADDRESSES (uid) = insn_current_address + insn_lengths[uid];
yann@402
  1482
 
yann@402
  1483
       if (GET_CODE (insn) == NOTE || GET_CODE (insn) == BARRIER
yann@402
  1484
 	  || GET_CODE (insn) == CODE_LABEL)
yann@402
  1485
diff -ruN gcc-20030210.orig/gcc/mkmap-symver.awk gcc-20030210/gcc/mkmap-symver.awk
yann@402
  1486
--- gcc-20030210.orig/gcc/mkmap-symver.awk	Fri Jan 31 19:17:26 2003
yann@402
  1487
+++ gcc-20030210/gcc/mkmap-symver.awk	Sat Feb 22 01:40:14 2003
yann@402
  1488
@@ -89,7 +89,11 @@
yann@402
  1489
     output(inherit[lib]);
yann@402
  1490
 
yann@402
  1491
   printf("%s {\n", lib);
yann@402
  1492
-  printf("  global:\n");
yann@402
  1493
+  for (sym in ver)
yann@402
  1494
+    if ((ver[sym] == lib) && (sym in def))
yann@402
  1495
+      count++;
yann@402
  1496
+  if (count > 0)
yann@402
  1497
+    printf("  global:\n");
yann@402
  1498
   for (sym in ver)
yann@402
  1499
     if ((ver[sym] == lib) && (sym in def))
yann@402
  1500
       {
yann@402
  1501
diff -ruN gcc-20030210.orig/gcc/reload1.c gcc-20030210/gcc/reload1.c
yann@402
  1502
--- gcc-20030210.orig/gcc/reload1.c	Fri Jan 31 19:17:29 2003
yann@402
  1503
+++ gcc-20030210/gcc/reload1.c	Sat Feb 22 01:40:14 2003
yann@402
  1504
@@ -6103,6 +6103,7 @@
yann@402
  1505
 	    for (j = 0; j < n_reloads; j++)
yann@402
  1506
 	      if (rld[j].in != 0
yann@402
  1507
 		  && rld[j].when_needed != RELOAD_OTHER
yann@402
  1508
+		  && rld[j].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
yann@402
  1509
 		  && reg_overlap_mentioned_for_reload_p (rld[j].in,
yann@402
  1510
 							 rld[i].in))
yann@402
  1511
 		rld[j].when_needed
yann@402
  1512
diff -ruN gcc-20030210.orig/gcc/reorg.c gcc-20030210/gcc/reorg.c
yann@402
  1513
--- gcc-20030210.orig/gcc/reorg.c	Fri Jan 31 19:17:30 2003
yann@402
  1514
+++ gcc-20030210/gcc/reorg.c	Sat Feb 22 01:40:14 2003
yann@402
  1515
@@ -3265,6 +3265,14 @@
yann@402
  1516
 		|| condjump_in_parallel_p (XVECEXP (PATTERN (insn), 0, 0))))
yann@402
  1517
 	continue;
yann@402
  1518
 
yann@402
  1519
+#ifdef MD_CAN_REDIRECT_BRANCH
yann@402
  1520
+      /* On some targets, branches with delay slots can have a limited
yann@402
  1521
+	 displacement.  Give the back end a chance to tell us we can't do
yann@402
  1522
+	 this.  */
yann@402
  1523
+      if (! MD_CAN_REDIRECT_BRANCH (insn, delay_insn))
yann@402
  1524
+	continue;
yann@402
  1525
+#endif
yann@402
  1526
+
yann@402
  1527
       target_label = JUMP_LABEL (delay_insn);
yann@402
  1528
 
yann@402
  1529
       if (target_label)
yann@402
  1530
diff -ruN gcc-20030210.orig/gcc/tree-inline.c gcc-20030210/gcc/tree-inline.c
yann@402
  1531
--- gcc-20030210.orig/gcc/tree-inline.c	Fri Jan 31 19:17:33 2003
yann@402
  1532
+++ gcc-20030210/gcc/tree-inline.c	Sat Feb 22 01:40:14 2003
yann@402
  1533
@@ -836,11 +836,17 @@
yann@402
  1534
 
yann@402
  1535
   /* Don't try to inline functions that are not well-suited to
yann@402
  1536
      inlining.  */
yann@402
  1537
-  if (!inlinable_function_p (fn, id))
yann@402
  1538
-    return NULL_TREE;
yann@402
  1539
+  if (! inlinable_function_p (fn, id)
yann@402
  1540
+      || ! (*lang_hooks.tree_inlining.start_inlining) (fn))
yann@402
  1541
+    {
yann@402
  1542
+      if (DECL_INLINE (fn) && warn_inline && ! flag_really_no_inline)
yann@402
  1543
+	{
yann@402
  1544
+	  warning_with_decl (fn, "inlining failed in call to `%s'");
yann@402
  1545
+	  warning ("called from here");
yann@402
  1546
+	}
yann@402
  1547
 
yann@402
  1548
-  if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
yann@402
  1549
-    return NULL_TREE;
yann@402
  1550
+      return NULL_TREE;
yann@402
  1551
+    }
yann@402
  1552
 
yann@402
  1553
   /* Set the current filename and line number to the function we are
yann@402
  1554
      inlining so that when we create new _STMT nodes here they get
yann@402
  1555
diff -ruN gcc-20030210.orig/libjava/Makefile.in gcc-20030210/libjava/Makefile.in
yann@402
  1556
--- gcc-20030210.orig/libjava/Makefile.in	Tue Jan 28 10:44:37 2003
yann@402
  1557
+++ gcc-20030210/libjava/Makefile.in	Sat Feb 22 01:40:14 2003
yann@402
  1558
@@ -1637,6 +1637,7 @@
yann@402
  1559
 	"AS=$(AS)" \
yann@402
  1560
 	"CC=$(CC)" \
yann@402
  1561
 	"CXX=$(CXX)" \
yann@402
  1562
+	"GCJ=$(GCJ)" \
yann@402
  1563
 	"LD=$(LD)" \
yann@402
  1564
 	"LIBCFLAGS=$(LIBCFLAGS)" \
yann@402
  1565
 	"NM=$(NM)" \
yann@402
  1566
diff -ruN gcc-20030210.orig/libjava/configure gcc-20030210/libjava/configure
yann@402
  1567
--- gcc-20030210.orig/libjava/configure	Tue Jan 28 10:44:37 2003
yann@402
  1568
+++ gcc-20030210/libjava/configure	Sat Feb 22 01:42:11 2003
yann@402
  1569
@@ -2031,7 +2031,7 @@
yann@402
  1570
 # This must be Linux ELF.
yann@402
  1571
 linux-gnu*)
yann@402
  1572
   case $host_cpu in
yann@402
  1573
-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
yann@402
  1574
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
yann@402
  1575
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
  1576
   *)
yann@402
  1577
     # glibc up to 2.1.1 does not perform some relocations on ARM
yann@402
  1578
diff -ruN gcc-20030210.orig/libjava/java/net/natInetAddress.cc gcc-20030210/libjava/java/net/natInetAddress.cc
yann@402
  1579
--- gcc-20030210.orig/libjava/java/net/natInetAddress.cc	Tue Mar  5 05:02:19 2002
yann@402
  1580
+++ gcc-20030210/libjava/java/net/natInetAddress.cc	Sat Feb 22 01:40:14 2003
yann@402
  1581
@@ -56,7 +56,7 @@
yann@402
  1582
 #endif
yann@402
  1583
 
yann@402
  1584
 #ifndef HAVE_GETHOSTNAME_DECL
yann@402
  1585
-extern "C" int gethostname (char *name, int namelen);
yann@402
  1586
+extern "C" int gethostname (char *name, unsigned int namelen);
yann@402
  1587
 #endif
yann@402
  1588
 
yann@402
  1589
 #ifdef DISABLE_JAVA_NET
yann@402
  1590
diff -ruN gcc-20030210.orig/libjava/libltdl/aclocal.m4 gcc-20030210/libjava/libltdl/aclocal.m4
yann@402
  1591
--- gcc-20030210.orig/libjava/libltdl/aclocal.m4	Sun Sep 10 17:04:40 2000
yann@402
  1592
+++ gcc-20030210/libjava/libltdl/aclocal.m4	Sat Feb 22 01:40:14 2003
yann@402
  1593
@@ -573,7 +573,7 @@
yann@402
  1594
 # This must be Linux ELF.
yann@402
  1595
 linux-gnu*)
yann@402
  1596
   case "$host_cpu" in
yann@402
  1597
-  alpha* | i*86 | powerpc* | sparc* | ia64* )
yann@402
  1598
+  alpha* | i*86 | powerpc* | sparc* | ia64* | sh*)
yann@402
  1599
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
  1600
   *)
yann@402
  1601
     # glibc up to 2.1.1 does not perform some relocations on ARM
yann@402
  1602
diff -ruN gcc-20030210.orig/libjava/sysdep/sh/locks.h gcc-20030210/libjava/sysdep/sh/locks.h
yann@402
  1603
--- gcc-20030210.orig/libjava/sysdep/sh/locks.h	Thu Jan  1 09:00:00 1970
yann@402
  1604
+++ gcc-20030210/libjava/sysdep/sh/locks.h	Sat Feb 22 01:40:14 2003
yann@402
  1605
@@ -0,0 +1,72 @@
yann@402
  1606
+// locks.h - Thread synchronization primitives. SuperH implementation.
yann@402
  1607
+
yann@402
  1608
+/* Copyright (C) 2002  Free Software Foundation
yann@402
  1609
+
yann@402
  1610
+   This file is part of libgcj.
yann@402
  1611
+
yann@402
  1612
+This software is copyrighted work licensed under the terms of the
yann@402
  1613
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
yann@402
  1614
+details.  */
yann@402
  1615
+
yann@402
  1616
+#ifndef __SYSDEP_LOCKS_H__
yann@402
  1617
+#define __SYSDEP_LOCKS_H__
yann@402
  1618
+
yann@402
  1619
+typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
yann@402
  1620
+				/* address.				*/
yann@402
  1621
+
yann@402
  1622
+static unsigned char __cas_lock = 0;
yann@402
  1623
+
yann@402
  1624
+inline static void
yann@402
  1625
+__cas_start_atomic (void)
yann@402
  1626
+{
yann@402
  1627
+  unsigned int val;
yann@402
  1628
+
yann@402
  1629
+  do
yann@402
  1630
+    __asm__ __volatile__ ("tas.b @%1; movt %0"
yann@402
  1631
+			  : "=r" (val)
yann@402
  1632
+			  : "r" (&__cas_lock)
yann@402
  1633
+			  : "memory");
yann@402
  1634
+  while (val == 0);
yann@402
  1635
+}
yann@402
  1636
+
yann@402
  1637
+inline static void
yann@402
  1638
+__cas_end_atomic (void)
yann@402
  1639
+{
yann@402
  1640
+  __asm__ __volatile__ (" " : : : "memory");
yann@402
  1641
+  __cas_lock = 0;
yann@402
  1642
+}
yann@402
  1643
+
yann@402
  1644
+inline static bool
yann@402
  1645
+compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
yann@402
  1646
+		  obj_addr_t new_val)
yann@402
  1647
+{
yann@402
  1648
+  bool ret;
yann@402
  1649
+
yann@402
  1650
+  __cas_start_atomic ();
yann@402
  1651
+  if (*addr != old)
yann@402
  1652
+    ret = false;
yann@402
  1653
+  else
yann@402
  1654
+    {
yann@402
  1655
+      *addr = new_val;
yann@402
  1656
+      ret = true;
yann@402
  1657
+    }
yann@402
  1658
+  __cas_end_atomic ();
yann@402
  1659
+
yann@402
  1660
+  return ret;
yann@402
  1661
+}
yann@402
  1662
+
yann@402
  1663
+inline static void
yann@402
  1664
+release_set (volatile obj_addr_t *addr, obj_addr_t new_val)
yann@402
  1665
+{
yann@402
  1666
+  __asm__ __volatile__ (" " : : : "memory");
yann@402
  1667
+  *(addr) = new_val;
yann@402
  1668
+}
yann@402
  1669
+
yann@402
  1670
+inline static bool
yann@402
  1671
+compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old,
yann@402
  1672
+			  obj_addr_t new_val)
yann@402
  1673
+{
yann@402
  1674
+  return compare_and_swap (addr, old, new_val);
yann@402
  1675
+}
yann@402
  1676
+
yann@402
  1677
+#endif /* ! __SYSDEP_LOCKS_H__ */
yann@402
  1678
diff -ruN gcc-20030210.orig/libstdc++-v3/acinclude.m4 gcc-20030210/libstdc++-v3/acinclude.m4
yann@402
  1679
--- gcc-20030210.orig/libstdc++-v3/acinclude.m4	Tue Jan 28 02:30:41 2003
yann@402
  1680
+++ gcc-20030210/libstdc++-v3/acinclude.m4	Sat Feb 22 01:40:14 2003
yann@402
  1681
@@ -1828,9 +1828,10 @@
yann@402
  1682
   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
yann@402
  1683
 
yann@402
  1684
   # Passed down for canadian crosses.
yann@402
  1685
-  if test x"$CANADIAN" = xyes; then
yann@402
  1686
-    TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1687
-  fi
yann@402
  1688
+  #if test x"$CANADIAN" = xyes; then
yann@402
  1689
+  #  TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1690
+  #fi
yann@402
  1691
+  TOPLEVEL_INCLUDES=''
yann@402
  1692
 
yann@402
  1693
   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
yann@402
  1694
 
yann@402
  1695
diff -ruN gcc-20030210.orig/libstdc++-v3/aclocal.m4 gcc-20030210/libstdc++-v3/aclocal.m4
yann@402
  1696
--- gcc-20030210.orig/libstdc++-v3/aclocal.m4	Mon Feb 10 19:36:47 2003
yann@402
  1697
+++ gcc-20030210/libstdc++-v3/aclocal.m4	Sat Feb 22 01:40:14 2003
yann@402
  1698
@@ -1840,9 +1840,10 @@
yann@402
  1699
   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
yann@402
  1700
 
yann@402
  1701
   # Passed down for canadian crosses.
yann@402
  1702
-  if test x"$CANADIAN" = xyes; then
yann@402
  1703
-    TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1704
-  fi
yann@402
  1705
+  #if test x"$CANADIAN" = xyes; then
yann@402
  1706
+  #  TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1707
+  #fi
yann@402
  1708
+  TOPLEVEL_INCLUDES=''
yann@402
  1709
 
yann@402
  1710
   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
yann@402
  1711
 
yann@402
  1712
diff -ruN gcc-20030210.orig/libstdc++-v3/configure gcc-20030210/libstdc++-v3/configure
yann@402
  1713
--- gcc-20030210.orig/libstdc++-v3/configure	Mon Feb 10 19:37:17 2003
yann@402
  1714
+++ gcc-20030210/libstdc++-v3/configure	Sat Feb 22 01:40:14 2003
yann@402
  1715
@@ -1982,7 +1982,7 @@
yann@402
  1716
 # This must be Linux ELF.
yann@402
  1717
 linux-gnu*)
yann@402
  1718
   case $host_cpu in
yann@402
  1719
-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
yann@402
  1720
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh*)
yann@402
  1721
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
  1722
   *)
yann@402
  1723
     # glibc up to 2.1.1 does not perform some relocations on ARM
yann@402
  1724
@@ -22340,9 +22340,10 @@
yann@402
  1725
   GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
yann@402
  1726
 
yann@402
  1727
   # Passed down for canadian crosses.
yann@402
  1728
-  if test x"$CANADIAN" = xyes; then
yann@402
  1729
-    TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1730
-  fi
yann@402
  1731
+  #if test x"$CANADIAN" = xyes; then
yann@402
  1732
+  #  TOPLEVEL_INCLUDES='-I$(includedir)'
yann@402
  1733
+  #fi
yann@402
  1734
+  TOPLEVEL_INCLUDES=''
yann@402
  1735
 
yann@402
  1736
   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
yann@402
  1737
 
yann@402
  1738
diff -ruN gcc-20030210.orig/libtool.m4 gcc-20030210/libtool.m4
yann@402
  1739
--- gcc-20030210.orig/libtool.m4	Fri Jan 31 19:16:59 2003
yann@402
  1740
+++ gcc-20030210/libtool.m4	Sat Feb 22 01:40:14 2003
yann@402
  1741
@@ -597,7 +597,7 @@
yann@402
  1742
 # This must be Linux ELF.
yann@402
  1743
 linux-gnu*)
yann@402
  1744
   case $host_cpu in
yann@402
  1745
-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
yann@402
  1746
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
yann@402
  1747
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
  1748
   *)
yann@402
  1749
     # glibc up to 2.1.1 does not perform some relocations on ARM
yann@402
  1750
diff -ruN gcc-20030210.orig/zlib/configure gcc-20030210/zlib/configure
yann@402
  1751
--- gcc-20030210.orig/zlib/configure	Tue Jan 28 10:44:15 2003
yann@402
  1752
+++ gcc-20030210/zlib/configure	Sat Feb 22 01:40:14 2003
yann@402
  1753
@@ -1571,7 +1571,7 @@
yann@402
  1754
 # This must be Linux ELF.
yann@402
  1755
 linux-gnu*)
yann@402
  1756
   case $host_cpu in
yann@402
  1757
-  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
yann@402
  1758
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* )
yann@402
  1759
     lt_cv_deplibs_check_method=pass_all ;;
yann@402
  1760
   *)
yann@402
  1761
     # glibc up to 2.1.1 does not perform some relocations on ARM