This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Adding SH support to glibc-2.1.3


Hi,

Here's a patch for glibc-2.1.3 to support new sh-linux-gnu target for
Linux on Hitachi SH processors.
We've already done the paper work for copyright assignment, and got back
the copy from FSF.

Patch consists of two parts.  One is for changes of generic part, and
another is SH specific part.  For the changes of generic part, there
are four diffs.  First three diffs are trivial, just add sh[34]
support.  We need the 4-th diff for csu/Makefile to get cststuff
routines directly.  This is needed because we couldn't use generated
files.   The constant (for label) is emitted far away than expected
by the generation, after the function epilogue.

Sorry for this long patch. Any comments are appreciated.

Thanks,
--

2000-05-25  Kazumoto Kojima  <kkojima@rr.iij4u.or.jp>
	    Yutaka Niibe  <gniibe@chroot.org>

	* configure.in: Add machine sh3, sh4.
	* configure: Likewise
	* scripts/config.sub: Likewise.
	* csu/Makefile: Add new variable crts-predefined whose non-zero
	value means to generate crt[in].o from system dependent predefined
	crt[in].S instead of initfini.c.

	* elf/elf.h: Add SH specific declarations of relocations.
	* sysdeps/sh/Dist: New file.
	* sysdeps/sh/Implies: New file.
	* sysdeps/sh/gmp-mparam.h: New file for SH specific definitions
	for GNU MP library.
	* sysdeps/sh/machine-gmon.h: New file for SH specific definitions
	for profiling support.
	* sysdeps/sh/memcpy.S: New file for memcpy function written in
	assembler.
	* sysdeps/sh/memset.S: Likewise for memset.
	* sysdeps/sh/strlen.S: Likewise for strlen.
	* sysdeps/sh/sysdep.h: New file for SH specific assembler macros.

	* sysdeps/sh/sh3/__longjmp.S: New file for SH-3 specific __longjmp
	function written in assembler.
	* sysdeps/sh/sh3/bits/endian.h: New file for SH-3 specific
	definitions for endian.
	* sysdeps/sh/sh3/bits/huge_val.h: New file for SH-3 specific
	definitions for HUGE_VAL constant.
	* sysdeps/sh/sh3/bits/setjmp.h: New file for SH-3 specific
	definitions for jmp_buf.
	* sysdeps/sh/sh3/bsd-_setjmp.S: New file for SH-3 specific
	BSD _setjmp function written in assembler.
	* sysdeps/sh/sh3/bsd-setjmp.S: Likewise for setjmp.
	* sysdeps/sh/sh3/dl-machine.h: New file for SH-3 specific
	ELF dynamic location inline functions.
	* sysdeps/sh/sh3/elf/crti.S: Likewise for _init and _fini
	function prologue.
	* sysdeps/sh/sh3/elf/crti.S: Likewise for their epilogue and
	__gmon_start__ function.
	* sysdeps/sh/sh3/elf/start.S: New file for the startup code
	for  SH-3 in ELF.
	* sysdeps/sh/sh3/setjmp.S: New file for SH specific __setjmp
	and __sigsetjmp functions written in assembler.
	* sysdeps/sh/sh3/sys/ucontext.h: New file for SH-3 specific
	definitions for user context.

	* sysdeps/sh/sh4/__longjmp.S: New file for SH-4 specific __longjmp
	function written in assembler.
	* sysdeps/sh/sh4/bits/endian.h: New file for SH-4 specific
	definitions for endian.
	* sysdeps/sh/sh4/bits/huge_val.h: New file for SH-4 specific
	definitions for HUGE_VAL constant.
	* sysdeps/sh/sh4/bits/setjmp.h: New file for SH-4 specific
	definitions for jmp_buf.
	* sysdeps/sh/sh4/bsd-_setjmp.S: New file for SH-4 specific
	BSD _setjmp function written in assembler.
	* sysdeps/sh/sh4/bsd-setjmp.S: Likewise for setjmp.
	* sysdeps/sh/sh4/dl-machine.h: New file for SH-4 specific
	ELF dynamic location inline functions.
	* sysdeps/sh/sh4/elf/crti.S: Likewise for _init and _fini
	function prologue.
	* sysdeps/sh/sh4/elf/crti.S: Likewise for their epilogue and
	__gmon_start__ function.
	* sysdeps/sh/sh4/elf/start.S: New file for the startup code
	for  SH-4 in ELF.
	* sysdeps/sh/sh4/setjmp.S: New file for SH specific __setjmp
	and __sigsetjmp functions written in assembler.
	* sysdeps/sh/sh4/sys/ucontext.h: New file for SH-4 specific
	definitions for user context.
	* sysdeps/sh/sh4/fpu/bits/fenv.h: New file for SH-4 specific
	definitions for FPU.
	* sysdeps/sh/sh4/fpu/fclrexcpt.c: New file for SH-4 specific
	feclearexcept function.
	* sysdeps/sh/sh4/fpu/fegetenv.c: Likewise for fegetenv.
	* sysdeps/sh/sh4/fpu/fegetround.c: Likewise for fegetround.
	* sysdeps/sh/sh4/fpu/feholdexcpt.c: Likewise for feholdexcept.
	* sysdeps/sh/sh4/fpu/fesetenv.c: Likewise for fesetenv.
	* sysdeps/sh/sh4/fpu/fesetround.c: Likewise for fesetround.
	* sysdeps/sh/sh4/fpu/fraiseexcpt.c: Likewise for feraiseexcept.
	* sysdeps/sh/sh4/fpu/fsetexcptflg.c: Likewise for fesetexceptflag.
	* sysdeps/sh/sh4/fpu/ftestexcept.c: Likewise for fetestexcept.
	* sysdeps/sh/sh4/fpu/fpu_control.h: New file for SH-4 specific
	FPU control word definitions.

	* sysdeps/unix/sh/sysdep.S: New file for SH specific __syscall_error
	function in unix.
	* /sysdeps/unix/sh/sysdep.h: New file for SH specific miscellaneous
	definitions in unix.
	* sysdeps/unix/sysv/linux/sh/Dist: New file.
	* sysdeps/unix/sysv/linux/sh/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/sh/Versions: Likewise.
	* sysdeps/unix/sysv/linux/sh/bits/mman.h: New file for Linux/SH
	specific definitions for mmap interface.
	* sysdeps/unix/sysv/linux/sh/sysdep.S: New files for Linux/SH
	specific definitions for system call and errno.
	* sysdeps/unix/sysv/linux/sh/brk.c: New file for Linux/SH specific
	definitions for brk function.
	* sysdeps/unix/sysv/linux/sh/clone.S: Likewise for clone.
	* sysdeps/unix/sysv/linux/sh/pipe.S: Likewise for pipe.
	* sysdeps/unix/sysv/linux/sh/socket.S: Likewise for socket.
	* sysdeps/unix/sysv/linux/sh/vfork.S: Likewise for vfork.
	* sysdeps/unix/sysv/linux/sh/sigrestorer.S: Likewise for signal
	restorers.
	* sysdeps/unix/sysv/linux/sh/getgroups.c: Likewise for getgroups.
	* sysdeps/unix/sysv/linux/sh/pread.c: Likewise for pread.
	* sysdeps/unix/sysv/linux/sh/pread64.c: Likewise for pread64.
	* sysdeps/unix/sysv/linux/sh/pwrite.c: Likewise for pwrite.
	* sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise for pwrite64.
	* sysdeps/unix/sysv/linux/sh/setgid.c: Likewise for setgid.
	* sysdeps/unix/sysv/linux/sh/seteuid.c: Likewise for seteuid.
	* sysdeps/unix/sysv/linux/sh/setfsgid.c: Likewise for setfsgid.
	* sysdeps/unix/sysv/linux/sh/setfsuid.c: Likewise for setfsuid.
	* sysdeps/unix/sysv/linux/sh/setgid.c: Likewise for setgid.
	* sysdeps/unix/sysv/linux/sh/setgroups.c: Likewise for setgroups.
	* sysdeps/unix/sysv/linux/sh/setregid.c: Likewise for setregid.
	* sysdeps/unix/sysv/linux/sh/setresgid.c: Likewise for setresgid.
	* sysdeps/unix/sysv/linux/sh/setresuid.c: Likewise for setresuid.
	* sysdeps/unix/sysv/linux/sh/setreuid.c: Likewise for setreuid.
	* sysdeps/unix/sysv/linux/sh/setuid.c: Likewise for setuid.
	* sysdeps/unix/sysv/linux/sh/errlist.c:  New file for Linux/SH
	specific definitions for errlist.
	* sysdeps/unix/sysv/linux/sh/errlist.c:  Likewise for siglist.
	* sysdeps/unix/sysv/linux/sh/sigaction.c: New file for Linux/SH
	specific definitions for sigaction.
	* /sysdeps/unix/sysv/linux/sh/init-first.h: New file for Linux/SH
	specific definitions for library initialization.
	* sysdeps/unix/sysv/linux/sh/profil-counter.h: New file for Linux/SH
	specific definitions for profiling support.
	* sysdeps/unix/sysv/linux/sh/register-dump.h: New file for Linux/SH
	specific definitions for register dump.
	* sysdeps/unix/sysv/linux/sh/sigcontextinfo.h: New file for Linux/SH
	specific definitions for signal context.
	* sysdeps/unix/sysv/linux/sh/sys/io.h: New file for Linux/SH specific
	definitions for low level I/O.
	* sysdeps/unix/sysv/linux/sh/sys/user.h: New file for Linux/SH
	specific definitions for low level user context.
	* sysdeps/unix/sysv/linux/sh/syscalls.list: New file for Linux/SH
	specific system call list.

	* linuxthreads/sysdeps/sh/pt-machine.h: New file for SH specific
	definitions in linuxthreads.


diff -u -r -N glibc-2.1.3-original/configure glibc-2.1.3/configure
--- glibc-2.1.3-original/configure	Tue Oct  5 09:56:26 1999
+++ glibc-2.1.3/configure	Wed May 24 04:38:56 2000
@@ -903,6 +903,8 @@
 		IP22) machine=mips/mips3 ;;
 		*)    machine=mips/$machine ;;
 		esac ;;
+sh3*)		base_machine=sh machine=sh/sh3 ;;
+sh4*)		base_machine=sh machine=sh/sh4 ;;
 sparc | sparcv[67])
 		base_machine=sparc machine=sparc/sparc32 ;;
 sparcv8 | supersparc | hypersparc)
diff -u -r -N glibc-2.1.3-original/configure.in glibc-2.1.3/configure.in
--- glibc-2.1.3-original/configure.in	Tue Oct  5 09:55:45 1999
+++ glibc-2.1.3/configure.in	Wed May 24 04:37:59 2000
@@ -219,6 +219,8 @@
 		IP22) machine=mips/mips3 ;;
 		*)    machine=mips/$machine ;;
 		esac ;;
+sh3*)		base_machine=sh machine=sh/sh3 ;;
+sh4*)		base_machine=sh machine=sh/sh4 ;;
 sparc | sparcv[67])
 		base_machine=sparc machine=sparc/sparc32 ;;
 sparcv8 | supersparc | hypersparc)
diff -u -r -N glibc-2.1.3-original/csu/Makefile glibc-2.1.3/csu/Makefile
--- glibc-2.1.3-original/csu/Makefile	Sat Apr 10 21:43:02 1999
+++ glibc-2.1.3/csu/Makefile	Thu May 25 17:08:11 2000
@@ -76,12 +76,19 @@
 
 install-lib += $(crtstuff:=.o)
 extra-objs += $(crtstuff:=.o)
+ifneq (yes,$(crts-predefined))
 generated += $(crtstuff:=.S) initfini.s defs.h
 omit-deps += $(crtstuff)
 
 # Special rules for the building of crti.o and crtn.o
 $(objpfx)crt%.o: $(objpfx)crt%.S $(objpfx)defs.h
 	$(compile.S) -g0 $(ASFLAGS-.os) -o $@
+else
+generated += initfini.s defs.h
+
+$(objpfx)crti.o: $(objpfx)defs.h
+$(objpfx)crtn.o: $(objpfx)defs.h
+endif
 
 CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions
 
@@ -91,6 +98,7 @@
 
 # We only have one kind of startup code files.  Static binaries and
 # shared libraries are build using the PIC version.
+ifneq (yes,$(crts-predefined))
 $(objpfx)crti.S: $(objpfx)initfini.s
 	sed -n -e '1,/@HEADER_ENDS/p' \
 	       -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
@@ -100,6 +108,7 @@
 	sed -n -e '1,/@HEADER_ENDS/p' \
 	       -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
 	       -e '/@TRAILER_BEGINS/,$$p' $< > $@
+endif
 
 $(objpfx)defs.h: $(objpfx)initfini.s
 	sed -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
diff -u -r -N glibc-2.1.3-original/elf/elf.h glibc-2.1.3/elf/elf.h
--- glibc-2.1.3-original/elf/elf.h	Wed Feb 23 16:02:47 2000
+++ glibc-2.1.3/elf/elf.h	Sun Mar 12 04:09:08 2000
@@ -1580,6 +1580,41 @@
 /* Keep this the last entry.  */
 #define R_ARM_NUM		256
 
+/* SH specific declarations */
+
+/* SH relocs.  */
+#define	R_SH_NONE		0
+#define	R_SH_DIR32		1
+#define	R_SH_REL32		2
+#define	R_SH_DIR8WPN		3
+#define	R_SH_IND12W		4
+#define	R_SH_DIR8WPL		5
+#define	R_SH_DIR8WPZ		6
+#define	R_SH_DIR8BP		7
+#define	R_SH_DIR8W		8
+#define	R_SH_DIR8L		9
+#define	R_SH_SWITCH16		25
+#define	R_SH_SWITCH32		26
+#define	R_SH_USES		27
+#define	R_SH_COUNT		28
+#define	R_SH_ALIGN		29
+#define	R_SH_CODE		30
+#define	R_SH_DATA		31
+#define	R_SH_LABEL		32
+#define	R_SH_SWITCH8		33
+#define	R_SH_GNU_VTINHERIT	34
+#define	R_SH_GNU_VTENTRY	35
+#define	R_SH_GOT32		160
+#define	R_SH_PLT32		161
+#define	R_SH_COPY		162
+#define	R_SH_GLOB_DAT		163
+#define	R_SH_JMP_SLOT		164
+#define	R_SH_RELATIVE		165
+#define	R_SH_GOTOFF		166
+#define	R_SH_GOTPC		167
+/* Keep this the last entry.  */
+#define	R_SH_NUM		256
+
 __END_DECLS
 
 #endif	/* elf.h */
diff -u -r -N glibc-2.1.3-original/linuxthreads/sysdeps/sh/pt-machine.h glibc-2.1.3/linuxthreads/sysdeps/sh/pt-machine.h
--- glibc-2.1.3-original/linuxthreads/sysdeps/sh/pt-machine.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/linuxthreads/sysdeps/sh/pt-machine.h	Sun Mar 12 07:54:45 2000
@@ -0,0 +1,46 @@
+/* Machine-dependent pthreads configuration and inline functions.
+   SuperH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Niibe Yutaka <gniibe@m17n.org>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef PT_EI
+# define PT_EI extern inline
+#endif
+
+/* Spinlock implementation; required.  */
+PT_EI int
+testandset (int *spinlock)
+{
+  int ret;
+
+  __asm__ __volatile__(
+       "tas.b	%1\n\t"
+       "movt	%0"
+       : "=z" (ret), "=m" (*spinlock)
+       : /* "1" (*spinlock) */
+       : "memory", "cc");
+
+  return ret;
+}
+
+
+/* Get some notion of the current stack.  Need not be exactly the top
+   of the stack, just something somewhere in the current frame.  */
+#define CURRENT_STACK_FRAME  stack_pointer
+register char * stack_pointer __asm__ ("r15");
diff -u -r -N glibc-2.1.3-original/scripts/config.sub glibc-2.1.3/scripts/config.sub
--- glibc-2.1.3-original/scripts/config.sub	Tue Oct 26 05:23:27 1999
+++ glibc-2.1.3/scripts/config.sub	Thu May 25 17:06:42 2000
@@ -171,7 +171,7 @@
 		| 580 | i960 | h8300 \
 		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
 		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
-		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
+		| we32k | ns16k | clipper | i370 | sh | sh[34] | powerpc | powerpcle \
 		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
 		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
 		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
@@ -837,6 +837,9 @@
 		;;
 	we32k)
 		basic_machine=we32k-att
+		;;
+	sh3 | sh4 |  sh3-unknown | sh4-unknown)
+		base_machine=sh
 		;;
 	sparc | sparcv9)
 		basic_machine=sparc-sun
diff -u -r -N glibc-2.1.3-original/sysdeps/generic/bits/libc-lock.h glibc-2.1.3/sysdeps/generic/bits/libc-lock.h
--- glibc-2.1.3-original/sysdeps/generic/bits/libc-lock.h	Mon Oct 13 12:53:17 1997
+++ glibc-2.1.3/sysdeps/generic/bits/libc-lock.h	Sun Mar 12 18:21:12 2000
@@ -90,7 +90,9 @@
 /* End critical region with cleanup.  */
 #define __libc_cleanup_region_end(DOIT)
 
-
+/* Sometimes we have to exit the block in the middle.  */
+#define __libc_cleanup_end(DOIT)
+  
 /* We need portable names for some of the functions.  */
 #define __libc_mutex_unlock
 
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/Dist glibc-2.1.3/sysdeps/sh/Dist
--- glibc-2.1.3-original/sysdeps/sh/Dist	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/Dist	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+ieee754.h
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/Implies glibc-2.1.3/sysdeps/sh/Implies
--- glibc-2.1.3-original/sysdeps/sh/Implies	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/Implies	Sun Mar 12 04:15:28 2000
@@ -0,0 +1,2 @@
+wordsize-32
+ieee754
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/bits/string.h glibc-2.1.3/sysdeps/sh/bits/string.h
--- glibc-2.1.3-original/sysdeps/sh/bits/string.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/bits/string.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,22 @@
+/* SH specific definitions for string functions.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#define _HAVE_STRING_ARCH_strcpy 1
+#define _HAVE_STRING_ARCH_stpcpy 1
+#define _HAVE_STRING_ARCH_mempcpy 1
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/gmp-mparam.h glibc-2.1.3/sysdeps/sh/gmp-mparam.h
--- glibc-2.1.3-original/sysdeps/sh/gmp-mparam.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/gmp-mparam.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,30 @@
+/* gmp-mparam.h -- Compiler/machine parameter header file.
+
+Copyright (C) 1991, 1993, 1994, 1995, 2000 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+#define BITS_PER_MP_LIMB 32
+#define BYTES_PER_MP_LIMB 4
+#define BITS_PER_LONGINT 32
+#define BITS_PER_INT 32
+#define BITS_PER_SHORTINT 16
+#define BITS_PER_CHAR 8
+
+#define IEEE_DOUBLE_BIG_ENDIAN 0
+#define IEEE_DOUBLE_MIXED_ENDIAN 1
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/machine-gmon.h glibc-2.1.3/sysdeps/sh/machine-gmon.h
--- glibc-2.1.3-original/sysdeps/sh/machine-gmon.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/machine-gmon.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,34 @@
+/* Machine-dependent definitions for profiling support.  SH version.
+   Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* NOTYET  */
+
+/* We must not pollute the global namespace.  */
+#define mcount_internal __mcount_internal
+
+void mcount_internal (u_long frompc, u_long selfpc);
+
+#define _MCOUNT_DECL(frompc, selfpc) \
+void mcount_internal (u_long frompc, u_long selfpc)
+
+
+/* Define MCOUNT as empty since we have the implementation in another
+   file.  */
+#define MCOUNT
+
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/memcpy.S glibc-2.1.3/sysdeps/sh/memcpy.S
--- glibc-2.1.3-original/sysdeps/sh/memcpy.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/memcpy.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,231 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#include <endian.h>
+
+/*
+ * void *memcpy(void *dst, const void *src, size_t n);
+ * No overlap between the memory of DST and of SRC are assumed.
+ */
+
+ENTRY(memcpy)
+	tst	r6,r6
+	bt/s	1f
+	mov	r4,r0
+	mov	#12,r1
+	cmp/gt	r6,r1
+	bf	2f
+0:
+	mov.b	@r5+,r1
+	dt	r6
+	mov.b	r1,@r4
+	bf/s	0b
+	add	#1,r4
+1:
+	rts
+	nop
+2:	
+	mov.l	r8,@-r15
+	mov.l	r9,@-r15
+	mov	r6,r2
+	mov.l	r10,@-r15
+	mov.l	r11,@-r15
+	mov.l	r14,@-r15
+	mov	r4,r11
+	mov	r15,r14
+	mov	r5,r0
+	and	#1,r0
+	tst	r0,r0
+	bt/s	.L42
+	mov	r5,r0
+	mov.b	@r5+,r1
+	add	#-1,r2
+	add	#1,r4
+	mov.b	r1,@r11
+	mov	r5,r0
+.L42:
+	and	#2,r0
+	tst	r0,r0
+	bt/s	.L43
+	mov	r4,r0
+	mov.b	@r5+,r1
+	mov.b	r1,@r4
+	mov.b	@r5+,r1
+	add	#1,r4
+	add	#-2,r2
+	mov.b	r1,@r4
+	add	#1,r4
+	mov	r4,r0
+.L43:
+	and	#1,r0
+	tst	r0,r0
+	bf/s	.L38
+	mov	r4,r0
+	and	#2,r0
+	tst	r0,r0
+	bf/s	.L7
+	mov	r2,r0
+	shlr2	r0
+	and	#3,r0
+	cmp/eq	#2,r0
+	bt/s	.L10
+	mov	#2,r1
+	cmp/gt	r1,r0
+	bt/s	.L14
+	cmp/eq	#3,r0
+	cmp/eq	#1,r0
+	bt/s	.L11
+	mov	r0,r1
+	bra	.L44
+	shll2	r1
+	.align 5
+.L14:
+	bf	.L8
+	mov.l	@(8,r5),r1
+	mov.l	r1,@(8,r4)
+.L10:
+	mov.l	@(4,r5),r1
+	mov.l	r1,@(4,r4)
+.L11:
+	mov.l	@r5,r1
+	mov.l	r1,@r4
+.L8:
+	mov	r0,r1
+	shll2	r1
+.L44:
+	add	r1,r4
+	add	r1,r5
+	mov	r2,r0
+	mov	#-4,r1
+	shad	r1,r0
+	mov	#3,r6
+	bra	.L37
+	and	r2,r6
+	.align 5
+.L18:
+	mov.l	@r5+,r1
+	mov.l	@r5+,r2
+	mov.l	@r5+,r3
+	mov.l	@r5+,r7
+	mov.l	r1,@r4
+	mov.l	r2,@(4,r4)
+	mov.l	r3,@(8,r4)
+	mov.l	r7,@(12,r4)
+	add	#16,r4
+.L37:
+	cmp/pl	r0
+	bt/s	.L18
+	add	#-1,r0
+	mov	r6,r2
+.L38:
+	bra	.L40
+	mov	r2,r0
+	.align 5
+.L7:
+	shar	r0
+	and	#3,r0
+	cmp/eq	#2,r0
+	bt/s	.L23
+	mov	#2,r1
+	cmp/gt	r1,r0
+	bt/s	.L27
+	cmp/eq	#3,r0
+	cmp/eq	#1,r0
+	bt/s	.L24
+	mov	r0,r1
+	bra	.L45
+	add	r0,r1
+	.align 5
+.L27:
+	bf	.L21
+	add	#4,r5
+	mov.w	@r5,r1
+	add	#4,r4
+	mov.w	r1,@r4
+	add	#-4,r5
+	add	#-4,r4
+.L23:
+	add	#2,r5
+	mov.w	@r5,r1
+	add	#2,r4
+	mov.w	r1,@r4
+	add	#-2,r5
+	add	#-2,r4
+.L24:
+	mov.w	@r5,r1
+	mov.w	r1,@r4
+.L21:
+	mov	r0,r1
+	add	r0,r1
+.L45:
+	add	r1,r4
+	add	r1,r5
+	mov	r2,r0
+	mov	#-3,r1
+	shad	r1,r0
+	mov	#1,r10
+	mov	r0,r1
+	and	r2,r10
+	cmp/pl	r1
+	bf/s	.L29
+	add	#-1,r0
+	mov	r4,r9
+	mov	r4,r8
+	add	#4,r9
+	mov	r4,r6
+	add	#6,r8
+	add	#2,r6
+.L31:
+	mov.w	@r5+,r1
+	mov.w	@r5+,r2
+	mov.w	@r5+,r3
+	mov.w	@r5+,r7
+	mov.w	r1,@r4
+	mov.w	r2,@r6
+	add	#8,r4
+	mov	r0,r1
+	add	#8,r6
+	mov.w	r3,@r9
+	add	#-1,r0
+	add	#8,r9
+	mov.w	r7,@r8
+	cmp/pl	r1
+	bt/s	.L31
+	add	#8,r8
+.L29:
+	mov	r10,r2
+	mov	r2,r0
+.L40:
+	cmp/pl	r0
+	bf	.L34
+.L35:
+	mov.b	@r5+,r1
+	dt	r2
+	mov.b	r1,@r4
+	bf/s	.L35
+	add	#1,r4
+.L34:
+	mov	r11,r0
+	mov	r14,r15
+	mov.l	@r15+,r14
+	mov.l	@r15+,r11
+	mov.l	@r15+,r10
+	mov.l	@r15+,r9
+	rts	
+	mov.l	@r15+,r8
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/memprof.h glibc-2.1.3/sysdeps/sh/memprof.h
--- glibc-2.1.3-original/sysdeps/sh/memprof.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/memprof.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#define GETSP() ({ register uintptr_t stack_ptr asm ("%r15"); stack_ptr; })
+
+#include <sysdeps/generic/memprof.h>
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/memset.S glibc-2.1.3/sysdeps/sh/memset.S
--- glibc-2.1.3-original/sysdeps/sh/memset.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/memset.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,79 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* void *memset (t, c, len)  */
+
+ENTRY(memset)
+	tst	r6, r6
+	bt/s	end
+	mov	r4, r3
+	mov	#3, r0
+	cmp/hs	r6, r0
+	bt/s	2f
+	and	r4, r0
+	tst	r0, r0
+	bt/s	1f
+	add	r0, r6
+	add	#-1, r0
+	shll2	r0
+	braf	r0
+	add	#-4, r6
+
+	mov.b	r5, @r4
+	add	#1, r4
+	mov.b	r5, @r4
+	add	#1, r4
+	mov.b	r5, @r4
+	add	#1, r4
+1:
+	extu.b	r5, r0
+	shll8	r5
+	or	r5, r0
+	extu.w	r0, r0
+	mov	r0, r5
+	swap.w	r5, r5
+	or	r0, r5
+	
+2:
+	add	#-4, r6
+	cmp/pz	r6
+	bf	afew
+	mov.l	r5, @r4
+	bra	2b
+	add	#4, r4
+
+afew:
+	mov	#-1, r0
+	sub	r6, r0
+	shll2	r0
+	braf	r0
+	nop
+
+	mov.b	r5, @r4
+	add	#1, r4
+	mov.b	r5, @r4
+	add	#1, r4
+	mov.b	r5, @r4
+	add	#1, r4
+end:
+	rts
+	mov	r3, r0
+END(memset)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/__longjmp.S glibc-2.1.3/sysdeps/sh/sh3/__longjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/__longjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/__longjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,44 @@
+/* longjmp for SH.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _SETJMP_H
+#define _ASM
+#include <bits/setjmp.h>
+
+/* __longjmp(jmpbuf, val) */
+
+ENTRY (__longjmp)
+	mov.l	@r4+, r8
+	mov.l	@r4+, r9
+	mov.l	@r4+, r10
+	mov.l	@r4+, r11
+	mov.l	@r4+, r12
+	mov.l	@r4+, r13
+	mov.l	@r4+, r14
+	mov.l	@r4+, r15
+	mov	r5, r0		/* get the return value in place */
+	tst	r0, r0
+	bf.s	1f
+	 lds.l	@r4+, pr
+	mov	#1,r0		/* can't let setjmp() return zero! */
+1:
+	rts
+	 ldc.l	@r4+, gbr
+END (__longjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/bits/endian.h glibc-2.1.3/sysdeps/sh/sh3/bits/endian.h
--- glibc-2.1.3-original/sysdeps/sh/sh3/bits/endian.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/bits/endian.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,13 @@
+/* SH is bi-endian but with a big-endian FPU.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+#ifdef __LITTLE_ENDIAN__
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+#else
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BIG_ENDIAN
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/bits/huge_val.h glibc-2.1.3/sysdeps/sh/sh3/bits/huge_val.h
--- glibc-2.1.3-original/sysdeps/sh/sh3/bits/huge_val.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/bits/huge_val.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,88 @@
+/* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   SH version.
+   Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+#endif
+
+#include <features.h>
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#ifdef	__GNUC__
+
+# define HUGE_VAL \
+  (__extension__							      \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
+    { __l: 0x000000007ff00000ULL }).__d)
+
+#else /* not GCC */
+
+# include <endian.h>
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VAL_bytes	{ 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VAL_bytes	{ 0, 0, 0xf0, 0x7f, 0, 0, 0, 0 }
+# endif
+
+static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
+# define HUGE_VAL	(__huge_val.__d)
+
+#endif	/* GCC.  */
+
+
+/* ISO C 9X extensions: (float) HUGE_VALF and (long double) HUGE_VALL.  */
+
+#ifdef __USE_ISOC9X
+
+# ifdef __GNUC__
+
+#  define HUGE_VALF \
+  (__extension__							      \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })    \
+    { __l: 0x7f800000UL }).__d)
+
+# else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#   define __HUGE_VALF_bytes	{ 0x7f, 0x80, 0, 0 }
+#  endif
+#  if __BYTE_ORDER == __LITTLE_ENDIAN
+#   define __HUGE_VALF_bytes	{ 0, 0, 0x80, 0x7f }
+#  endif
+
+static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
+#  define HUGE_VALF	(__huge_valf.__f)
+
+# endif	/* GCC.  */
+
+
+/* Generally there is no separate `long double' format and it is the
+   same as `double'.  */
+# define HUGE_VALL HUGE_VAL
+
+#endif /* __USE_ISOC9X.  */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/bits/setjmp.h glibc-2.1.3/sysdeps/sh/sh3/bits/setjmp.h
--- glibc-2.1.3-original/sysdeps/sh/sh3/bits/setjmp.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/bits/setjmp.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,45 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Define the machine-dependent type `jmp_buf'.  SH version. */
+
+#ifndef _SETJMP_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+#ifndef _ASM
+typedef struct
+  {
+    /* Callee-saved registers r8 through r15.  */
+    int __regs[8];
+
+    /* Program counter.  */
+    __ptr_t __pc;
+
+    /* The global pointer.  */
+    __ptr_t __gbr;
+
+  } __jmp_buf[1];
+#endif
+
+#define JB_SIZE		(4 * 10)
+
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+  ((__ptr_t) (address) < &(jmpbuf)[0].__regs[7])
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/bsd-_setjmp.S glibc-2.1.3/sysdeps/sh/sh3/bsd-_setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/bsd-_setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/bsd-_setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,51 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  SH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+   We cannot do it in C because it must be a tail-call, so frame-unwinding
+   in setjmp doesn't clobber the state restored by longjmp.  */
+
+#include <sysdep.h>
+
+ENTRY (_setjmp)
+#ifdef PIC
+	mova	1f, r0
+	mov.l	1f, r1
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	3f, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 mov	#0, r0
+	.align	2
+3:
+	.long	C_SYMBOL_NAME(__sigsetjmp@GOT)
+#else
+	mov.l	1f, r1
+	jmp	@r1
+	 mov	#0, r0
+	.align	2
+1:
+	.long	C_SYMBOL_NAME(__sigsetjmp)
+#endif
+END (_setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/bsd-setjmp.S glibc-2.1.3/sysdeps/sh/sh3/bsd-setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/bsd-setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/bsd-setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,51 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  SH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+   We cannot do it in C because it must be a tail-call, so frame-unwinding
+   in setjmp doesn't clobber the state restored by longjmp.  */
+
+#include <sysdep.h>
+
+ENTRY (setjmp)
+#ifdef PIC
+	mova	1f, r0
+	mov.l	1f, r1
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	3f, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 mov	#1, r0
+	.align	2
+3:
+	.long	C_SYMBOL_NAME(__sigsetjmp@GOT)
+#else
+	mov.l	1f, r1
+	jmp	@r1
+	 mov	#1, r0
+	.align	2
+1:
+	.long	C_SYMBOL_NAME(__sigsetjmp)
+#endif
+END (setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/dl-machine.h glibc-2.1.3/sysdeps/sh/sh3/dl-machine.h
--- glibc-2.1.3-original/sysdeps/sh/sh3/dl-machine.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/dl-machine.h	Sun Mar 12 16:02:39 2000
@@ -0,0 +1,523 @@
+/* Machine-dependent ELF dynamic relocation inline functions.  SH-3 version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.	*/
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+/* Only dummy. This doesn't work. */
+
+#define ELF_MACHINE_NAME "SH"
+
+#include <sys/param.h>
+
+#include <assert.h>
+
+/* Return nonzero iff E_MACHINE is compatible with the running host.  */
+static inline int __attribute__ ((unused))
+elf_machine_matches_host (Elf32_Half e_machine)
+{
+  switch (e_machine)
+    {
+    case EM_SH:
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline Elf32_Addr __attribute__ ((unused))
+elf_machine_dynamic (void)
+{
+  register Elf32_Addr *got;
+  asm ("mov r12,%0" :"=r" (got));
+  return *got;
+}
+
+
+/* Return the run-time load address of the shared object.  */
+static inline Elf32_Addr __attribute__ ((unused))
+elf_machine_load_address (void)
+{
+  Elf32_Addr addr;
+  asm ("mov.l .L1,r0
+	mov.l .L3,r2
+	add r12,r2
+	mov.l @(r0,r12),r0
+	bra .L2
+	 sub r0,r2
+	.align 2
+	.L1: .long _dl_start@GOT
+	.L3: .long _dl_start@GOTOFF
+	.L2: mov r2,%0"
+       : "=r" (addr) : : "r0", "r1", "r2");
+  return addr;
+}
+
+
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int __attribute__ ((unused))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  Elf32_Addr *got;
+  extern void _dl_runtime_resolve (Elf32_Word);
+  extern void _dl_runtime_profile (Elf32_Word);
+
+  if (l->l_info[DT_JMPREL] && lazy)
+    {
+      /* The GOT entries for functions in the PLT have not yet been filled
+	 in.  Their initial contents will arrange when called to load an
+	 offset into the .rela.plt section and _GLOBAL_OFFSET_TABLE_[1],
+	 and then jump to _GLOBAL_OFFSET_TABLE[2].  */
+      got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      got[1] = (Elf32_Addr) l;	/* Identify this shared object.	 */
+
+      /* The got[2] entry contains the address of a function which gets
+	 called to get the address of a so far unresolved function and
+	 jump to it.  The profiling extension of the dynamic linker allows
+	 to intercept the calls to collect information.	 In this case we
+	 don't store the address in the GOT so that all future calls also
+	 end in this function.	*/
+      if (profile)
+	{
+	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
+	  /* Say that we really want profiling and the timers are started.  */
+	  _dl_profile_map = l;
+	}
+      else
+	/* This function will get called to fix up the GOT entry indicated by
+	   the offset on the stack, and then jump to the resolved address.  */
+	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
+    }
+  return lazy;
+}
+
+/* This code is used in dl-runtime.c to call the `fixup' function
+   and then redirect to the address it returns.	 */
+
+#define ELF_MACHINE_RUNTIME_FIXUP_ARGS int plt_type
+
+#ifdef PIC
+#define FUN_ADDR	"\
+	mov.l 1f,r2
+	mova 1f,r0
+        bra 2f
+	 add r0,r2		! Get GOT address in r2
+0:	.align 2
+1:	.long _GLOBAL_OFFSET_TABLE_
+2:	mov.l 3f,r0
+	add r2,r0"
+#define GOTJMP(x)	#x "@GOTOFF"
+#else
+#define FUN_ADDR	"\
+	mov.l 3f,r0"
+#define GOTJMP(x)	#x
+#endif
+
+#if defined (KERNEL_MATH_EMULATION)
+#define FGR_SAVE	"\
+	sts.l	fpscr, @-r15
+	mov	#8,r3
+	swap.w	r3, r3
+	lds	r3, fpscr
+	fmov.s	fr11, @-r15
+	fmov.s	fr10, @-r15
+	fmov.s	fr9, @-r15
+	fmov.s	fr8, @-r15
+	fmov.s	fr7, @-r15
+	fmov.s	fr6, @-r15
+	fmov.s	fr5, @-r15
+	fmov.s	fr4, @-r15"
+#define FGR_LOAD	"\
+	fmov.s	@r15+, fr4
+	fmov.s	@r15+, fr5
+	fmov.s	@r15+, fr6
+	fmov.s	@r15+, fr7
+	fmov.s	@r15+, fr8
+	fmov.s	@r15+, fr9
+	fmov.s	@r15+, fr10
+	fmov.s	@r15+, fr11
+	lds.l	@r15+, fpscr"
+#else
+#define FGR_SAVE	""
+#define FGR_LOAD	""
+#endif
+
+#ifndef PROF
+# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+	.text
+	.globl _dl_runtime_resolve
+	.type _dl_runtime_resolve, @function
+	.align 5
+_dl_runtime_resolve:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (fixup) "
+	.size _dl_runtime_resolve, .-_dl_runtime_resolve
+
+	.globl _dl_runtime_profile
+	.type _dl_runtime_profile, @function
+	.align 5
+_dl_runtime_profile:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	sts pr,r7		! return address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (profile_fixup) "
+	.size _dl_runtime_profile, .-_dl_runtime_profile
+	.previous
+");
+#else
+# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+	.text
+	.globl _dl_runtime_resolve
+	.globl _dl_runtime_profile
+	.type _dl_runtime_resolve, @function
+	.type _dl_runtime_profile, @function
+	.align 5
+_dl_runtime_resolve:
+_dl_runtime_profile:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	sts pr,r7		! return address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (fixup) "
+	.size _dl_runtime_resolve, .-_dl_runtime_resolve
+	.size _dl_runtime_profile, .-_dl_runtime_profile
+	.previous
+");
+#endif
+
+/* Mask identifying addresses reserved for the user program,
+   where the dynamic linker should not map anything.  */
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.	*/
+
+#define RTLD_START asm ("\
+.text\n\
+.globl _start\n\
+.globl _dl_start_user\n\
+_start:\n\
+	mov r15,r4\n\
+	mov.l .L_dl_start,r1\n\
+	mova .L_dl_start,r0\n\
+	add r1,r0\n\
+	jsr @r0\n\
+	 nop\n\
+_dl_start_user:\n\
+	! Save the user entry point address in r8.\n\
+	mov r0,r8\n\
+	! Point r12 at the GOT.\n\
+	mov.l 1f,r12\n\
+	mova 1f,r0\n\
+	bra 2f\n\
+	 add r0,r12\n\
+	.align 2\n\
+1:	.long _GLOBAL_OFFSET_TABLE_\n\
+2:	! Store the highest stack address\n\
+	mov.l .L_stack_end,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l r15,@r0\n\
+	! See if we were run as a command with the executable file\n\
+	! name as an extra leading argument.\n\
+	mov.l .L_dl_skip_args,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l @r0,r0\n\
+	! Get the original argument count.\n\
+	mov.l @r15,r2\n\
+	! Subtract _dl_skip_args from it.\n\
+	sub r0,r2\n\
+	! Adjust the stack pointer to skip _dl_skip_args words.\n\
+	shll2 r0\n\
+	add r0,r15\n\
+	! Store back the modified argument count.\n\
+	mov.l r2,@r15\n\
+	! Push the searchlist of the main object as argument in\n\
+	! _dl_init_next call below.\n\
+	mov.l .L_dl_main_searchlist,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l @r0,r9\n\
+0:	mov r9,r4\n\
+	! Call _dl_init_next to return the address of an initializer\n\
+	! function to run.\n\
+	mov.l .L_dl_init_next,r1\n\
+	mova .L_dl_init_next,r0\n\
+	add r1,r0\n\
+	jsr @r0\n\
+	 nop\n\
+	! Check for zero return, when out of initializers.\n\
+	tst r0,r0\n\
+	bt 1f\n\
+	! Call the shared object initializer function.\n\
+	jsr @r0\n\
+	 nop\n\
+	! Loop to call _dl_init_next for the next initializer.\n\
+	bra 0b\n\
+	 nop\n\
+1:	! Clear the startup flag.\n\
+	mov.l .L_dl_starting_up,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov #0,r2\n\
+	mov.l r2,@r0\n\
+	! Pass our finalizer function to the user in r4, as per ELF ABI.\n\
+	mov.l .L_dl_fini,r0\n\
+	mov.l @(r0,r12),r4\n\
+	! Jump to the user's entry point.\n\
+	jmp @r8\n\
+	 nop\n\
+	.align 2\n\
+.L_dl_start:\n\
+	.long _dl_start@PLT\n\
+.L_stack_end:\n\
+	.long __libc_stack_end@GOT\n\
+.L_dl_skip_args:\n\
+	.long _dl_skip_args@GOT\n\
+.L_dl_main_searchlist:\n\
+	.long _dl_main_searchlist@GOT\n\
+.L_dl_init_next:\n\
+	.long _dl_init_next@PLT\n\
+.L_dl_starting_up:\n\
+	.long _dl_starting_up@GOT\n\
+.L_dl_fini:\n\
+	.long _dl_fini@GOT\n\
+.previous\n\
+");
+
+/* Nonzero iff TYPE should not be allowed to resolve to one of
+   the main executable's symbols, as for a COPY reloc.	*/
+#define elf_machine_lookup_noexec_p(type) ((type) == R_SH_COPY)
+
+/* Nonzero iff TYPE describes relocation of a PLT entry, so
+   PLT entries should not be allowed to define the value.  */
+#define elf_machine_lookup_noplt_p(type) ((type) == R_SH_JMP_SLOT)
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_JMP_SLOT	R_SH_JMP_SLOT
+
+/* We define an initialization functions.  This is called very early in
+   _dl_sysdep_start.  */
+#define DL_PLATFORM_INIT dl_platform_init ()
+
+extern const char *_dl_platform;
+
+static inline void __attribute__ ((unused))
+dl_platform_init (void)
+{
+  if (_dl_platform != NULL && *_dl_platform == '\0')
+    /* Avoid an empty string which would disturb us.  */
+    _dl_platform = NULL;
+}
+
+static inline void
+elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr *reloc_addr, Elf32_Addr value)
+{
+  *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation.	*/
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
+#endif /* !dl_machine_h */
+
+#ifdef RESOLVE
+
+/* SH never uses Elf32_Rel relocations.	 */
+#define ELF_MACHINE_NO_REL 1
+
+extern char **_dl_argv;
+
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   MAP is the object containing the reloc.  */
+
+static inline void
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+		 const Elf32_Sym *sym, const struct r_found_version *version,
+		 Elf32_Addr *const reloc_addr)
+{
+  if (ELF32_R_TYPE (reloc->r_info) == R_SH_RELATIVE)
+    {
+#ifndef RTLD_BOOTSTRAP
+      if (map != &_dl_rtld_map) /* Already done in rtld itself.	 */
+#endif
+	*reloc_addr = map->l_addr + reloc->r_addend;
+    }
+  else if (ELF32_R_TYPE (reloc->r_info) != R_SH_NONE)
+    {
+      const Elf32_Sym *const refsym = sym;
+      Elf32_Addr value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info));
+      if (sym)
+	value += sym->st_value;
+      value += reloc->r_addend;
+
+      switch (ELF32_R_TYPE (reloc->r_info))
+	{
+	case R_SH_COPY:
+	  if (sym == NULL)
+	    /* This can happen in trace mode if an object could not be
+	       found.  */
+	    break;
+	  if (sym->st_size > refsym->st_size
+	      || (sym->st_size < refsym->st_size && _dl_verbose))
+	    {
+	      const char *strtab;
+
+	      strtab = (const char *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
+				": Symbol `", strtab + refsym->st_name,
+				"' has different size in shared object, "
+				"consider re-linking\n", NULL);
+	    }
+	  memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
+						   refsym->st_size));
+	  break;
+	case R_SH_GLOB_DAT:
+	case R_SH_JMP_SLOT:
+	  *reloc_addr = value;
+	  break;
+	case R_SH_DIR32:
+	  {
+#ifndef RTLD_BOOTSTRAP
+	   /* This is defined in rtld.c, but nowhere in the static
+	      libc.a; make the reference weak so static programs can
+	      still link.  This declaration cannot be done when
+	      compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
+	      rtld.c contains the common defn for _dl_rtld_map, which
+	      is incompatible with a weak decl in the same file.  */
+	    weak_extern (_dl_rtld_map);
+	    if (map == &_dl_rtld_map)
+	      /* Undo the relocation done here during bootstrapping.
+		 Now we will relocate it anew, possibly using a
+		 binding found in the user program or a loaded library
+		 rather than the dynamic linker's built-in definitions
+		 used while loading those libraries.  */
+	      value -= map->l_addr + refsym->st_value + reloc->r_addend;
+#endif
+	    *reloc_addr = value;
+	    break;
+	  }
+	case R_SH_REL32:
+	  *reloc_addr = (value - (Elf32_Addr) reloc_addr);
+	  break;
+	default:
+	  assert (! "unexpected dynamic reloc type");
+	  break;
+	}
+    }
+}
+
+static inline void
+elf_machine_lazy_rel (Elf32_Addr l_addr, const Elf32_Rela *reloc)
+{
+  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+  /* Check for unexpected PLT reloc type.  */
+  assert (ELF32_R_TYPE (reloc->r_info) == R_SH_JMP_SLOT);
+  *reloc_addr += l_addr; /* + reloc->r_addend; */
+}
+
+#endif /* RESOLVE */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/elf/crti.S glibc-2.1.3/sysdeps/sh/sh3/elf/crti.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/elf/crti.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/elf/crti.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,94 @@
+	.file	"initfini.c"
+gcc2_compiled.:
+	
+#include "defs.h"
+#define PIC
+	
+/*@HEADER_ENDS*/
+/*@_init_PROLOG_BEGINS*/
+	.section .init
+	.align 5
+	.global	_init
+	.type	_init,@function
+_init:
+	mov.l	r12,@-r15
+	mov.l	r14,@-r15
+	sts.l	pr,@-r15
+#ifdef PIC
+	mova	.L22,r0
+	mov.l	.L22,r12
+	add	r0,r12
+	mova	.L23,r0
+	mov.l	.L23,r1
+	add	r0,r1
+#else
+	mov.l	.L23,r1
+#endif
+	jsr	@r1
+	 mov	r15,r14
+#ifdef KERNEL_MATH_EMULATION
+#ifdef PIC
+	mova	.L24,r0
+	mov.l	.L24,r1
+	add	r0,r1
+#else
+	mov.l	.L24,r1
+#endif
+	mov	#8,r4
+	jsr	@r1
+	 swap.w	r4,r4
+#endif
+	bra	1f
+	 nop
+	.align 2
+#ifdef PIC
+.L22:
+	.long	_GLOBAL_OFFSET_TABLE_
+.L23:
+	.long	__gmon_start__@PLT
+#else
+.L23:
+	.long	__gmon_start__
+#endif
+#ifdef KERNEL_MATH_EMULATION
+.L24:
+#ifdef PIC
+	.long	__set_fpscr@PLT
+#else
+	.long	__set_fpscr
+#endif
+#endif
+1:
+	ALIGN
+	END_INIT
+
+	
+/*@_init_PROLOG_ENDS*/
+/*@_fini_PROLOG_BEGINS*/
+	.section .fini
+	.align 5
+	.global	_fini
+	.type	_fini,@function
+_fini:
+	mov.l	r12,@-$r15
+	mov.l	r14,@-r15
+	sts.l	pr,@-r15
+#ifdef PIC
+	mova	.L27,r0
+	mov.l	.L27,r12
+	add	r0,r12
+#endif
+	mov	r15,r14
+	ALIGN
+	END_FINI
+#ifdef PIC
+	bra	1f
+	 nop
+	.align	2
+.L27:
+	.long	_GLOBAL_OFFSET_TABLE_
+#endif
+1:
+/*@_fini_PROLOG_ENDS*/
+/*@TRAILER_BEGINS*/
+	.ident	"GCC: (GNU) 2.95.1 19990816 (release)"
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/elf/crtn.S glibc-2.1.3/sysdeps/sh/sh3/elf/crtn.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/elf/crtn.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/elf/crtn.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,40 @@
+	.file	"initfini.c"
+gcc2_compiled.:
+	
+#include "defs.h"
+#define PIC
+	
+/*@HEADER_ENDS*/
+/*@_init_EPILOG_BEGINS*/
+	.section .init
+	mov	r14,r15
+	lds.l	@r15+,pr
+	mov.l	@r15+,r14
+	rts	
+	mov.l	@r15+,r12
+	END_INIT
+	.section .text
+	.align 5
+	.weak	__gmon_start__
+	.type	__gmon_start__,@function
+__gmon_start__:
+	mov.l	r14,@-r15
+	mov	r15,r14
+	mov	r14,r15
+	rts	
+	mov.l	@r15+,r14
+	
+/*@_init_EPILOG_ENDS*/
+/*@_fini_EPILOG_BEGINS*/
+	.section .fini
+	mov	r14,r15
+	lds.l	@r15+,pr
+	mov.l	@r15+,r14
+	rts	
+	mov.l	@r15+,r12
+
+	END_FINI
+	
+/*@_fini_EPILOG_ENDS*/
+/*@TRAILER_BEGINS*/
+	.ident	"GCC: (GNU) 2.95.1 19990816 (release)"
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/elf/start.S glibc-2.1.3/sysdeps/sh/sh3/elf/start.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/elf/start.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/elf/start.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,90 @@
+/* Startup code for SH & ELF
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This is the canonical entry point, usually the first thing in the text
+   segment.
+
+	Note that the code in the .init section has already been run.
+	This includes _init and _libc_init
+
+
+	At this entry point, most registers' values are unspecified, except:
+
+   r4		Contains a function pointer to be registered with `atexit'.
+   		This is how the dynamic linker arranges to have DT_FINI
+		functions called for shared libraries that have been loaded
+		before this code runs.
+
+   sp		The stack contains the arguments and environment:
+   		0(sp)			argc
+		4(sp)			argv[0]
+		...
+		(4*argc)(sp)		NULL
+		(4*(argc+1))(sp)	envp[0]
+		...
+					NULL
+*/
+
+	.text
+	.globl _start
+_start:
+	/* Clear the frame pointer since this is the outermost frame.  */
+	mov #0, r14
+
+	/* Pop argc off the stack and save a pointer to argv */
+	mov.l @r15+,r5
+	mov r15, r6
+
+	/* Push the last arguments to main() onto the stack */
+	mov.l r4,@-r15
+	mov.l L_fini,r0
+	mov.l r0,@-r15
+
+	/* Set up the other arguments for main() that go in registers */
+	mov.l L_main,r4
+	mov.l L_init,r7
+
+	/* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */
+
+	/* Let the libc call main and exit with its return code.  */
+	mov.l L_libc_start_main,r1
+	jsr @r1
+	nop
+	/* should never get here....*/
+	mov.l L_abort,r1
+	jsr @r1
+	nop
+	.align	2
+L_main:
+	.long	main
+L_init:
+	.long	_init
+L_fini:
+	.long	_fini
+L_libc_start_main:
+	.long	__libc_start_main
+L_abort:
+	.long	abort
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/setjmp.S glibc-2.1.3/sysdeps/sh/sh3/setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh3/setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,67 @@
+/* setjmp for SH4.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _SETJMP_H
+#define _ASM
+#include <bits/setjmp.h>
+
+	/* Binary compatibility entry point.  */
+ENTRY (__setjmp)
+	mov	#0, r5
+ENTRY (__sigsetjmp)
+	/* Save registers */
+	add	#JB_SIZE, r4
+	stc.l	gbr, @-r4
+	sts.l	pr, @-r4
+	mov.l	r15, @-r4
+	mov.l	r14, @-r4
+	mov.l	r13, @-r4
+	mov.l	r12, @-r4
+	mov.l	r11, @-r4
+	mov.l	r10, @-r4
+	mov.l	r9, @-r4
+	mov.l	r8, @-r4
+
+	/* Make a tail call to __sigjmp_save; it takes the same args.  */
+#ifdef PIC
+	mov.l	1f, r1
+	mova	1f, r0
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	.L1, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 nop
+	.align	2
+.L1:
+	.long	C_SYMBOL_NAME(__sigjmp_save@GOT)
+#else
+	mov.l	.L1, r1
+	jmp	@r1
+	 nop
+	.align	2
+.L1:
+	.long	C_SYMBOL_NAME(__sigjmp_save)
+#endif
+END (__setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh3/sys/ucontext.h glibc-2.1.3/sysdeps/sh/sh3/sys/ucontext.h
--- glibc-2.1.3-original/sysdeps/sh/sh3/sys/ucontext.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh3/sys/ucontext.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,99 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Where is System V/SH ABI?  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H	1
+
+#include <features.h>
+#include <signal.h>
+
+typedef int greg_t;
+
+/* Number of general registers.  */
+#define NGREG	16
+
+/* Container for all general registers.  */
+typedef greg_t gregset_t[NGREG];
+
+/* Number of each register is the `gregset_t' array.  */
+enum
+{
+  R0 = 0,
+#define R0	R0
+  R1 = 1,
+#define R1	R1
+  R2 = 2,
+#define R2	R2
+  R3 = 3,
+#define R3	R3
+  R4 = 4,
+#define R4	R4
+  R5 = 5,
+#define R5	R5
+  R6 = 6,
+#define R6	R6
+  R7 = 7,
+#define R7	R7
+  R8 = 8,
+#define R8	R8
+  R9 = 9,
+#define R9	R9
+  R10 = 10,
+#define R10	R10
+  R11 = 11,
+#define R11	R11
+  R12 = 12,
+#define R12	R12
+  R13 = 13,
+#define R13	R13
+  R14 = 14,
+#define R14	R14
+  R15 = 15,
+#define R15	R15
+};
+
+typedef int freg_t;
+
+/* Number of FPU registers.  */
+#define NFREG	16
+
+/* Structure to describe FPU registers.  */
+typedef freg_t fpregset_t[NFREG];
+
+/* Context to describe whole processor state.  */
+typedef struct
+  {
+    gregset_t gregs;
+    fpregset_t fpregs;
+    fpregset_t xfpregs;
+  } mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_link;
+    __sigset_t uc_sigmask;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    long int uc_filler[5];
+  } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/__longjmp.S glibc-2.1.3/sysdeps/sh/sh4/__longjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/__longjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/__longjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,49 @@
+/* longjmp for SH.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _SETJMP_H
+#define _ASM
+#include <bits/setjmp.h>
+
+/* __longjmp(jmpbuf, val) */
+
+ENTRY (__longjmp)
+	mov.l	@r4+, r8
+	mov.l	@r4+, r9
+	mov.l	@r4+, r10
+	mov.l	@r4+, r11
+	mov.l	@r4+, r12
+	mov.l	@r4+, r13
+	mov.l	@r4+, r14
+	mov.l	@r4+, r15
+	mov	r5, r0		/* get the return value in place */
+	tst	r0, r0
+	bf.s	1f
+	 lds.l	@r4+, pr
+	mov	#1,r0		/* can't let setjmp() return zero! */
+1:
+	ldc.l	@r4+, gbr
+	lds.l	@r4+, fpscr
+	fmov.s	@r4+, fr12
+	fmov.s	@r4+, fr13
+	fmov.s	@r4+, fr14
+	rts
+	 fmov.s	@r4+, fr15
+END (__longjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/bits/endian.h glibc-2.1.3/sysdeps/sh/sh4/bits/endian.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/bits/endian.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/bits/endian.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,13 @@
+/* SH is bi-endian but with a big-endian FPU.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+#ifdef __LITTLE_ENDIAN__
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+#else
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BIG_ENDIAN
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/bits/huge_val.h glibc-2.1.3/sysdeps/sh/sh4/bits/huge_val.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/bits/huge_val.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/bits/huge_val.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,88 @@
+/* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   SH version.
+   Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+#endif
+
+#include <features.h>
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#ifdef	__GNUC__
+
+# define HUGE_VAL \
+  (__extension__							      \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
+    { __l: 0x000000007ff00000ULL }).__d)
+
+#else /* not GCC */
+
+# include <endian.h>
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VAL_bytes	{ 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VAL_bytes	{ 0, 0, 0xf0, 0x7f, 0, 0, 0, 0 }
+# endif
+
+static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
+# define HUGE_VAL	(__huge_val.__d)
+
+#endif	/* GCC.  */
+
+
+/* ISO C 9X extensions: (float) HUGE_VALF and (long double) HUGE_VALL.  */
+
+#ifdef __USE_ISOC9X
+
+# ifdef __GNUC__
+
+#  define HUGE_VALF \
+  (__extension__							      \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })    \
+    { __l: 0x7f800000UL }).__d)
+
+# else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#   define __HUGE_VALF_bytes	{ 0x7f, 0x80, 0, 0 }
+#  endif
+#  if __BYTE_ORDER == __LITTLE_ENDIAN
+#   define __HUGE_VALF_bytes	{ 0, 0, 0x80, 0x7f }
+#  endif
+
+static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
+#  define HUGE_VALF	(__huge_valf.__f)
+
+# endif	/* GCC.  */
+
+
+/* Generally there is no separate `long double' format and it is the
+   same as `double'.  */
+# define HUGE_VALL HUGE_VAL
+
+#endif /* __USE_ISOC9X.  */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/bits/setjmp.h glibc-2.1.3/sysdeps/sh/sh4/bits/setjmp.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/bits/setjmp.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/bits/setjmp.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,50 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Define the machine-dependent type `jmp_buf'.  SH version. */
+
+#ifndef _SETJMP_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+#ifndef _ASM
+typedef struct
+  {
+    /* Callee-saved registers r8 through r15.  */
+    int __regs[8];
+
+    /* Program counter.  */
+    __ptr_t __pc;
+
+    /* The global pointer.  */
+    __ptr_t __gbr;
+
+    /* Floating point status register.  */
+    int __fpscr;
+
+    /* Callee-saved floating point registers fr12 through fr15.  */
+    int __fpregs[4];
+  } __jmp_buf[1];
+#endif
+
+#define JB_SIZE		(4 * 15)
+
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+  ((__ptr_t) (address) < &(jmpbuf)[0].__regs[7])
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/bsd-_setjmp.S glibc-2.1.3/sysdeps/sh/sh4/bsd-_setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/bsd-_setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/bsd-_setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,50 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  SH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+   We cannot do it in C because it must be a tail-call, so frame-unwinding
+   in setjmp doesn't clobber the state restored by longjmp.  */
+
+#include <sysdep.h>
+
+ENTRY (_setjmp)
+#ifdef PIC
+	mova	1f, r0
+	mov.l	1f, r1
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	3f, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 mov	#0, r0
+3:
+	.long	C_SYMBOL_NAME(__sigsetjmp@GOT)
+#else
+	mov.l	1f, r1
+	jmp	@r1
+	 mov	#0, r0
+	.align	2
+1:
+	.long	C_SYMBOL_NAME(__sigsetjmp)
+#endif
+END (_setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/bsd-setjmp.S glibc-2.1.3/sysdeps/sh/sh4/bsd-setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/bsd-setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/bsd-setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,50 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  SH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.	*/
+
+/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+   We cannot do it in C because it must be a tail-call, so frame-unwinding
+   in setjmp doesn't clobber the state restored by longjmp.  */
+
+#include <sysdep.h>
+
+ENTRY (setjmp)
+#ifdef PIC
+	mova	1f, r0
+	mov.l	1f, r1
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	3f, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 mov	#1, r0
+3:
+	.long	C_SYMBOL_NAME(__sigsetjmp@GOT)
+#else
+	mov.l	1f, r1
+	jmp	@r1
+	 mov	#1, r0
+	.align	2
+1:
+	.long	C_SYMBOL_NAME(__sigsetjmp)
+#endif
+END (setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/dl-machine.h glibc-2.1.3/sysdeps/sh/sh4/dl-machine.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/dl-machine.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/dl-machine.h	Sun Mar 12 16:02:25 2000
@@ -0,0 +1,518 @@
+/* Machine-dependent ELF dynamic relocation inline functions.  SH-4 version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.	*/
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+/* Only dummy. This doesn't work. */
+
+#define ELF_MACHINE_NAME "SH"
+
+#include <sys/param.h>
+
+#include <assert.h>
+
+/* Return nonzero iff E_MACHINE is compatible with the running host.  */
+static inline int __attribute__ ((unused))
+elf_machine_matches_host (Elf32_Half e_machine)
+{
+  switch (e_machine)
+    {
+    case EM_SH:
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline Elf32_Addr __attribute__ ((unused))
+elf_machine_dynamic (void)
+{
+  register Elf32_Addr *got;
+  asm ("mov r12,%0" :"=r" (got));
+  return *got;
+}
+
+
+/* Return the run-time load address of the shared object.  */
+static inline Elf32_Addr __attribute__ ((unused))
+elf_machine_load_address (void)
+{
+  Elf32_Addr addr;
+  asm ("mov.l .L1,r0
+	mov.l .L3,r2
+	add r12,r2
+	mov.l @(r0,r12),r0
+	bra .L2
+	 sub r0,r2
+	.align 2
+	.L1: .long _dl_start@GOT
+	.L3: .long _dl_start@GOTOFF
+	.L2: mov r2,%0"
+       : "=r" (addr) : : "r0", "r1", "r2");
+  return addr;
+}
+
+
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int __attribute__ ((unused))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  Elf32_Addr *got;
+  extern void _dl_runtime_resolve (Elf32_Word);
+  extern void _dl_runtime_profile (Elf32_Word);
+
+  if (l->l_info[DT_JMPREL] && lazy)
+    {
+      /* The GOT entries for functions in the PLT have not yet been filled
+	 in.  Their initial contents will arrange when called to load an
+	 offset into the .rela.plt section and _GLOBAL_OFFSET_TABLE_[1],
+	 and then jump to _GLOBAL_OFFSET_TABLE[2].  */
+      got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      got[1] = (Elf32_Addr) l;	/* Identify this shared object.	 */
+
+      /* The got[2] entry contains the address of a function which gets
+	 called to get the address of a so far unresolved function and
+	 jump to it.  The profiling extension of the dynamic linker allows
+	 to intercept the calls to collect information.	 In this case we
+	 don't store the address in the GOT so that all future calls also
+	 end in this function.	*/
+      if (profile)
+	{
+	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
+	  /* Say that we really want profiling and the timers are started.  */
+	  _dl_profile_map = l;
+	}
+      else
+	/* This function will get called to fix up the GOT entry indicated by
+	   the offset on the stack, and then jump to the resolved address.  */
+	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
+    }
+  return lazy;
+}
+
+/* This code is used in dl-runtime.c to call the `fixup' function
+   and then redirect to the address it returns.	 */
+
+#define ELF_MACHINE_RUNTIME_FIXUP_ARGS int plt_type
+
+#ifdef PIC
+#define FUN_ADDR	"\
+	mov.l 1f,r2
+	mova 1f,r0
+        bra 2f
+	 add r0,r2		! Get GOT address in r2
+0:	.align 2
+1:	.long _GLOBAL_OFFSET_TABLE_
+2:	mov.l 3f,r0
+	add r2,r0"
+#define GOTJMP(x)	#x "@GOTOFF"
+#else
+#define FUN_ADDR	"\
+	mov.l 3f,r0"
+#define GOTJMP(x)	#x
+#endif
+
+#define FGR_SAVE	"\
+	sts.l	fpscr, @-r15
+	mov	#8,r3
+	swap.w	r3, r3
+	lds	r3, fpscr
+	fmov.s	fr11, @-r15
+	fmov.s	fr10, @-r15
+	fmov.s	fr9, @-r15
+	fmov.s	fr8, @-r15
+	fmov.s	fr7, @-r15
+	fmov.s	fr6, @-r15
+	fmov.s	fr5, @-r15
+	fmov.s	fr4, @-r15"
+#define FGR_LOAD	"\
+	fmov.s	@r15+, fr4
+	fmov.s	@r15+, fr5
+	fmov.s	@r15+, fr6
+	fmov.s	@r15+, fr7
+	fmov.s	@r15+, fr8
+	fmov.s	@r15+, fr9
+	fmov.s	@r15+, fr10
+	fmov.s	@r15+, fr11
+	lds.l	@r15+, fpscr"
+
+#ifndef PROF
+# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+	.text
+	.globl _dl_runtime_resolve
+	.type _dl_runtime_resolve, @function
+	.align 5
+_dl_runtime_resolve:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (fixup) "
+	.size _dl_runtime_resolve, .-_dl_runtime_resolve
+
+	.globl _dl_runtime_profile
+	.type _dl_runtime_profile, @function
+	.align 5
+_dl_runtime_profile:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	sts pr,r7		! return address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (profile_fixup) "
+	.size _dl_runtime_profile, .-_dl_runtime_profile
+	.previous
+");
+#else
+# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+	.text
+	.globl _dl_runtime_resolve
+	.globl _dl_runtime_profile
+	.type _dl_runtime_resolve, @function
+	.type _dl_runtime_profile, @function
+	.align 5
+_dl_runtime_resolve:
+_dl_runtime_profile:
+	mov.l r3,@-r15
+	mov.l r4,@-r15
+	mov.l r5,@-r15
+	mov.l r6,@-r15
+	mov.l r7,@-r15
+	mov.l r12,@-r15
+	movt r3			! Save T flag.
+	mov.l r3,@-r15
+	" FGR_SAVE "
+	sts.l pr,@-r15
+	mov r0,r4		! PLT type
+	mov r2,r5		! link map address
+	sts pr,r7		! return address
+	" FUN_ADDR "
+	jsr @r0			! Call resolver.
+	 mov r1,r6		! reloc offset
+	lds.l @r15+,pr		! Get register content back.
+	" FGR_LOAD "
+	mov.l @r15+,r3
+	shal r3			! Lode T flag.
+	mov.l @r15+,r12
+	mov.l @r15+,r7
+	mov.l @r15+,r6
+	mov.l @r15+,r5
+	mov.l @r15+,r4
+	jmp @r0			! Jump to function address.
+	 mov.l @r15+,r3
+	.align 2
+3:
+	.long " GOTJMP (fixup) "
+	.size _dl_runtime_resolve, .-_dl_runtime_resolve
+	.size _dl_runtime_profile, .-_dl_runtime_profile
+	.previous
+");
+#endif
+
+/* Mask identifying addresses reserved for the user program,
+   where the dynamic linker should not map anything.  */
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.	*/
+
+#define RTLD_START asm ("\
+.text\n\
+.globl _start\n\
+.globl _dl_start_user\n\
+_start:\n\
+	mov r15,r4\n\
+	mov.l .L_dl_start,r1\n\
+	mova .L_dl_start,r0\n\
+	add r1,r0\n\
+	jsr @r0\n\
+	 nop\n\
+_dl_start_user:\n\
+	! Save the user entry point address in r8.\n\
+	mov r0,r8\n\
+	! Point r12 at the GOT.\n\
+	mov.l 1f,r12\n\
+	mova 1f,r0\n\
+	bra 2f\n\
+	 add r0,r12\n\
+	.align 2\n\
+1:	.long _GLOBAL_OFFSET_TABLE_\n\
+2:	! Store the highest stack address\n\
+	mov.l .L_stack_end,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l r15,@r0\n\
+	! See if we were run as a command with the executable file\n\
+	! name as an extra leading argument.\n\
+	mov.l .L_dl_skip_args,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l @r0,r0\n\
+	! Get the original argument count.\n\
+	mov.l @r15,r2\n\
+	! Subtract _dl_skip_args from it.\n\
+	sub r0,r2\n\
+	! Adjust the stack pointer to skip _dl_skip_args words.\n\
+	shll2 r0\n\
+	add r0,r15\n\
+	! Store back the modified argument count.\n\
+	mov.l r2,@r15\n\
+	! Push the searchlist of the main object as argument in\n\
+	! _dl_init_next call below.\n\
+	mov.l .L_dl_main_searchlist,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov.l @r0,r9\n\
+0:	mov r9,r4\n\
+	! Call _dl_init_next to return the address of an initializer\n\
+	! function to run.\n\
+	mov.l .L_dl_init_next,r1\n\
+	mova .L_dl_init_next,r0\n\
+	add r1,r0\n\
+	jsr @r0\n\
+	 nop\n\
+	! Check for zero return, when out of initializers.\n\
+	tst r0,r0\n\
+	bt 1f\n\
+	! Call the shared object initializer function.\n\
+	jsr @r0\n\
+	 nop\n\
+	! Loop to call _dl_init_next for the next initializer.\n\
+	bra 0b\n\
+	 nop\n\
+1:	! Clear the startup flag.\n\
+	mov.l .L_dl_starting_up,r0\n\
+	mov.l @(r0,r12),r0\n\
+	mov #0,r2\n\
+	mov.l r2,@r0\n\
+	! Pass our finalizer function to the user in r4, as per ELF ABI.\n\
+	mov.l .L_dl_fini,r0\n\
+	mov.l @(r0,r12),r4\n\
+	! Jump to the user's entry point.\n\
+	jmp @r8\n\
+	 nop\n\
+	.align 2\n\
+.L_dl_start:\n\
+	.long _dl_start@PLT\n\
+.L_stack_end:\n\
+	.long __libc_stack_end@GOT\n\
+.L_dl_skip_args:\n\
+	.long _dl_skip_args@GOT\n\
+.L_dl_main_searchlist:\n\
+	.long _dl_main_searchlist@GOT\n\
+.L_dl_init_next:\n\
+	.long _dl_init_next@PLT\n\
+.L_dl_starting_up:\n\
+	.long _dl_starting_up@GOT\n\
+.L_dl_fini:\n\
+	.long _dl_fini@GOT\n\
+.previous\n\
+");
+
+/* Nonzero iff TYPE should not be allowed to resolve to one of
+   the main executable's symbols, as for a COPY reloc.	*/
+#define elf_machine_lookup_noexec_p(type) ((type) == R_SH_COPY)
+
+/* Nonzero iff TYPE describes relocation of a PLT entry, so
+   PLT entries should not be allowed to define the value.  */
+#define elf_machine_lookup_noplt_p(type) ((type) == R_SH_JMP_SLOT)
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_JMP_SLOT	R_SH_JMP_SLOT
+
+/* We define an initialization functions.  This is called very early in
+   _dl_sysdep_start.  */
+#define DL_PLATFORM_INIT dl_platform_init ()
+
+extern const char *_dl_platform;
+
+static inline void __attribute__ ((unused))
+dl_platform_init (void)
+{
+  if (_dl_platform != NULL && *_dl_platform == '\0')
+    /* Avoid an empty string which would disturb us.  */
+    _dl_platform = NULL;
+}
+
+static inline void
+elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr *reloc_addr, Elf32_Addr value)
+{
+  *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation.	*/
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr value)
+{
+  return value + reloc->r_addend;
+}
+
+#endif /* !dl_machine_h */
+
+#ifdef RESOLVE
+
+/* SH never uses Elf32_Rel relocations.	 */
+#define ELF_MACHINE_NO_REL 1
+
+extern char **_dl_argv;
+
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   MAP is the object containing the reloc.  */
+
+static inline void
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+		 const Elf32_Sym *sym, const struct r_found_version *version,
+		 Elf32_Addr *const reloc_addr)
+{
+  if (ELF32_R_TYPE (reloc->r_info) == R_SH_RELATIVE)
+    {
+#ifndef RTLD_BOOTSTRAP
+      if (map != &_dl_rtld_map) /* Already done in rtld itself.	 */
+#endif
+	*reloc_addr = map->l_addr + reloc->r_addend;
+    }
+  else if (ELF32_R_TYPE (reloc->r_info) != R_SH_NONE)
+    {
+      const Elf32_Sym *const refsym = sym;
+      Elf32_Addr value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info));
+      if (sym)
+	value += sym->st_value;
+      value += reloc->r_addend;
+
+      switch (ELF32_R_TYPE (reloc->r_info))
+	{
+	case R_SH_COPY:
+	  if (sym == NULL)
+	    /* This can happen in trace mode if an object could not be
+	       found.  */
+	    break;
+	  if (sym->st_size > refsym->st_size
+	      || (sym->st_size < refsym->st_size && _dl_verbose))
+	    {
+	      const char *strtab;
+
+	      strtab = (const char *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
+				": Symbol `", strtab + refsym->st_name,
+				"' has different size in shared object, "
+				"consider re-linking\n", NULL);
+	    }
+	  memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
+						   refsym->st_size));
+	  break;
+	case R_SH_GLOB_DAT:
+	case R_SH_JMP_SLOT:
+	  *reloc_addr = value;
+	  break;
+	case R_SH_DIR32:
+	  {
+#ifndef RTLD_BOOTSTRAP
+	   /* This is defined in rtld.c, but nowhere in the static
+	      libc.a; make the reference weak so static programs can
+	      still link.  This declaration cannot be done when
+	      compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
+	      rtld.c contains the common defn for _dl_rtld_map, which
+	      is incompatible with a weak decl in the same file.  */
+	    weak_extern (_dl_rtld_map);
+	    if (map == &_dl_rtld_map)
+	      /* Undo the relocation done here during bootstrapping.
+		 Now we will relocate it anew, possibly using a
+		 binding found in the user program or a loaded library
+		 rather than the dynamic linker's built-in definitions
+		 used while loading those libraries.  */
+	      value -= map->l_addr + refsym->st_value + reloc->r_addend;
+#endif
+	    *reloc_addr = value;
+	    break;
+	  }
+	case R_SH_REL32:
+	  *reloc_addr = (value - (Elf32_Addr) reloc_addr);
+	  break;
+	default:
+	  assert (! "unexpected dynamic reloc type");
+	  break;
+	}
+    }
+}
+
+static inline void
+elf_machine_lazy_rel (Elf32_Addr l_addr, const Elf32_Rela *reloc)
+{
+  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+  /* Check for unexpected PLT reloc type.  */
+  assert (ELF32_R_TYPE (reloc->r_info) == R_SH_JMP_SLOT);
+  *reloc_addr += l_addr; /* + reloc->r_addend; */
+}
+
+#endif /* RESOLVE */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/elf/crti.S glibc-2.1.3/sysdeps/sh/sh4/elf/crti.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/elf/crti.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/elf/crti.S	Wed May 24 07:44:54 2000
@@ -0,0 +1,74 @@
+	.file	"initfini.c"
+gcc2_compiled.:
+	
+#include "defs.h"
+#define PIC
+	
+/*@HEADER_ENDS*/
+/*@_init_PROLOG_BEGINS*/
+	.section .init
+	.align 5
+	.global	_init
+	.type	_init,@function
+_init:
+	mov.l	r12,@-r15
+	mov.l	r14,@-r15
+	sts.l	pr,@-r15
+#ifdef PIC
+	mova	.L22,r0
+	mov.l	.L22,r12
+	add	r0,r12
+	mova	.L23,r0
+	mov.l	.L23,r1
+	add	r0,r1
+#else
+	mov.l	.L23,r1
+#endif
+	jsr	@r1
+	 mov	r15,r14
+	bra	1f
+	 nop
+	.align 2
+#ifdef PIC
+.L22:
+	.long	_GLOBAL_OFFSET_TABLE_
+.L23:
+	.long	__gmon_start__@PLT
+#else
+.L23:
+	.long	__gmon_start__
+#endif
+1:
+	ALIGN
+	END_INIT
+
+	
+/*@_init_PROLOG_ENDS*/
+/*@_fini_PROLOG_BEGINS*/
+	.section .fini
+	.align 5
+	.global	_fini
+	.type	_fini,@function
+_fini:
+	mov.l	r12,@-$r15
+	mov.l	r14,@-r15
+	sts.l	pr,@-r15
+#ifdef PIC
+	mova	.L27,r0
+	mov.l	.L27,r12
+	add	r0,r12
+#endif
+	mov	r15,r14
+	ALIGN
+	END_FINI
+#ifdef PIC
+	bra	1f
+	 nop
+	.align	2
+.L27:
+	.long	_GLOBAL_OFFSET_TABLE_
+#endif
+1:
+/*@_fini_PROLOG_ENDS*/
+/*@TRAILER_BEGINS*/
+	.ident	"GCC: (GNU) 2.95.1 19990816 (release)"
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/elf/crtn.S glibc-2.1.3/sysdeps/sh/sh4/elf/crtn.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/elf/crtn.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/elf/crtn.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,40 @@
+	.file	"initfini.c"
+gcc2_compiled.:
+	
+#include "defs.h"
+#define PIC
+	
+/*@HEADER_ENDS*/
+/*@_init_EPILOG_BEGINS*/
+	.section .init
+	mov	r14,r15
+	lds.l	@r15+,pr
+	mov.l	@r15+,r14
+	rts	
+	mov.l	@r15+,r12
+	END_INIT
+	.section .text
+	.align 5
+	.weak	__gmon_start__
+	.type	__gmon_start__,@function
+__gmon_start__:
+	mov.l	r14,@-r15
+	mov	r15,r14
+	mov	r14,r15
+	rts	
+	mov.l	@r15+,r14
+	
+/*@_init_EPILOG_ENDS*/
+/*@_fini_EPILOG_BEGINS*/
+	.section .fini
+	mov	r14,r15
+	lds.l	@r15+,pr
+	mov.l	@r15+,r14
+	rts	
+	mov.l	@r15+,r12
+
+	END_FINI
+	
+/*@_fini_EPILOG_ENDS*/
+/*@TRAILER_BEGINS*/
+	.ident	"GCC: (GNU) 2.95.1 19990816 (release)"
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/elf/start.S glibc-2.1.3/sysdeps/sh/sh4/elf/start.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/elf/start.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/elf/start.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,90 @@
+/* Startup code for SH & ELF
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This is the canonical entry point, usually the first thing in the text
+   segment.
+
+	Note that the code in the .init section has already been run.
+	This includes _init and _libc_init
+
+
+	At this entry point, most registers' values are unspecified, except:
+
+   r4		Contains a function pointer to be registered with `atexit'.
+   		This is how the dynamic linker arranges to have DT_FINI
+		functions called for shared libraries that have been loaded
+		before this code runs.
+
+   sp		The stack contains the arguments and environment:
+   		0(sp)			argc
+		4(sp)			argv[0]
+		...
+		(4*argc)(sp)		NULL
+		(4*(argc+1))(sp)	envp[0]
+		...
+					NULL
+*/
+
+	.text
+	.globl _start
+_start:
+	/* Clear the frame pointer since this is the outermost frame.  */
+	mov #0, r14
+
+	/* Pop argc off the stack and save a pointer to argv */
+	mov.l @r15+,r5
+	mov r15, r6
+
+	/* Push the last arguments to main() onto the stack */
+	mov.l r4,@-r15
+	mov.l L_fini,r0
+	mov.l r0,@-r15
+
+	/* Set up the other arguments for main() that go in registers */
+	mov.l L_main,r4
+	mov.l L_init,r7
+
+	/* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */
+
+	/* Let the libc call main and exit with its return code.  */
+	mov.l L_libc_start_main,r1
+	jsr @r1
+	nop
+	/* should never get here....*/
+	mov.l L_abort,r1
+	jsr @r1
+	nop
+	.align	2
+L_main:
+	.long	main
+L_init:
+	.long	_init
+L_fini:
+	.long	_fini
+L_libc_start_main:
+	.long	__libc_start_main
+L_abort:
+	.long	abort
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/bits/fenv.h glibc-2.1.3/sysdeps/sh/sh4/fpu/bits/fenv.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/bits/fenv.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/bits/fenv.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,72 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+
+/* Define bits representing the exception.  We use the bit positions
+   of the appropriate bits in the FPU control word.  */
+enum
+  {
+    FE_INEXACT = 0x04,
+#define FE_INEXACT	FE_INEXACT
+    FE_UNDERFLOW = 0x08,
+#define FE_UNDERFLOW	FE_UNDERFLOW
+    FE_OVERFLOW = 0x10,
+#define FE_OVERFLOW	FE_OVERFLOW
+    FE_DIVBYZERO = 0x20,
+#define FE_DIVBYZERO	FE_DIVBYZERO
+    FE_INVALID = 0x40,
+#define FE_INVALID	FE_INVALID
+  };
+
+#define FE_ALL_EXCEPT \
+	(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+
+/* The SH FPU supports all of the four defined rounding modes.  We
+   use again the bit positions in the FPU control word as the values
+   for the appropriate macros.  */
+enum
+  {
+    FE_TONEAREST = 0x0,
+#define FE_TONEAREST	FE_TONEAREST
+    FE_TOWARDZERO = 0x1,
+#define FE_TOWARDZERO	FE_TOWARDZERO
+    FE_UPWARD = 0x2,
+#define FE_UPWARD	FE_UPWARD
+    FE_DOWNWARD = 0x3
+#define FE_DOWNWARD	FE_DOWNWARD
+  };
+
+
+/* Type representing exception flags.  */
+typedef unsigned short int fexcept_t;
+
+
+/* Type representing floating-point environment.  This function corresponds
+   to the layout of the block written by the `fstenv'.  */
+typedef struct
+  {
+    unsigned int __fpscr;
+  }
+fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((fenv_t *) -1)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fclrexcpt.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fclrexcpt.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fclrexcpt.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fclrexcpt.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,40 @@
+/* Clear given exceptions in current floating-point environment.
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+void
+feclearexcept (int excepts)
+{
+  int cw;
+
+  /* Mask out unsupported bits/exceptions.  */
+  excepts &= FE_ALL_EXCEPT;
+
+  /* Read the complete control word.  */
+  _FPU_GETCW (cw);
+
+  /* Clear exception bits.  */
+  cw &= ~excepts;
+  
+  /* Put the new data in effect.  */
+  _FPU_SETCW (cw);
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fegetenv.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fegetenv.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fegetenv.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fegetenv.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,29 @@
+/* Store current floating-point environment.
+   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+void
+fegetenv (fenv_t *envp)
+{
+  unsigned long int temp;
+  _FPU_GETCW(temp);
+  envp->__fpscr = temp;
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fegetround.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fegetround.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fegetround.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fegetround.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,33 @@
+/* Return current rounding direction.
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fegetround (void)
+{
+  int cw;
+
+  /* Get control word.  */
+  _FPU_GETCW (cw);
+
+  return cw & 0x3;
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/feholdexcpt.c glibc-2.1.3/sysdeps/sh/sh4/fpu/feholdexcpt.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/feholdexcpt.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/feholdexcpt.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,37 @@
+/* Store current floating-point environment and clear exceptions.
+   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+feholdexcept (fenv_t *envp)
+{
+  unsigned long int temp;
+
+  /* Store the environment.  */
+  _FPU_GETCW(temp);
+  envp->__fpscr = temp;
+
+  /* Now set all exceptions to non-stop.  */
+  temp &= ~FE_ALL_EXCEPT;
+  _FPU_SETCW(temp);
+
+  return 1;
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fesetenv.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fesetenv.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fesetenv.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fesetenv.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,33 @@
+/* Install given floating-point environment.
+   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+void
+fesetenv (const fenv_t *envp)
+{
+  if (envp == FE_DFL_ENV)
+      _FPU_SETCW(_FPU_DEFAULT);
+  else
+    {
+      unsigned long temp = envp->__fpscr;
+      _FPU_SETCW(temp);
+    }
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fesetround.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fesetround.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fesetround.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fesetround.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,43 @@
+/* Set current rounding direction.
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fesetround (int round)
+{
+  unsigned int cw;
+
+  if ((round & ~0x3) != 0)
+    /* ROUND is no valid rounding mode.  */
+    return 0;
+
+  /* Get current state.  */
+  _FPU_GETCW (cw);
+
+  /* Set rounding bits.  */
+  cw &= ~0x3;
+  cw |= round;
+  /* Set new state.  */
+  _FPU_SETCW (cw);
+
+  return 1;
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fpu_control.h glibc-2.1.3/sysdeps/sh/sh4/fpu/fpu_control.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fpu_control.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fpu_control.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,55 @@
+/* FPU control word definitions.  SH version.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _FPU_CONTROL_H
+#define _FPU_CONTROL_H
+
+/* masking of interrupts */
+#define _FPU_MASK_V     0x0800  /* Invalid operation */
+#define _FPU_MASK_Z     0x0400  /* Division by zero  */
+#define _FPU_MASK_O     0x0200  /* Overflow          */
+#define _FPU_MASK_U     0x0100  /* Underflow         */
+#define _FPU_MASK_I     0x0080  /* Inexact operation */
+
+/* rounding control */
+#define _FPU_RC_NEAREST 0x0     /* RECOMMENDED */
+#define _FPU_RC_ZERO    0x1
+
+#define _FPU_RESERVED 0xffc00000  /* These bits are reserved.  */
+
+/* The fdlibm code requires strict IEEE double precision arithmetic,
+   and no interrupts for exceptions, rounding to nearest.  */
+#define _FPU_DEFAULT  0x00080000 /* Default value.  */
+
+/* Type of the control word.  */
+typedef unsigned int fpu_control_t;
+
+/* Macros for accessing the hardware control word.  */
+#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw))
+
+#if defined __GNUC__
+#define _FPU_SETCW(cw) __set_fpscr ((cw))
+#else
+#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw))
+#endif
+
+/* Default control word set at startup.  */
+extern fpu_control_t __fpu_control;
+
+#endif /* _FPU_CONTROL_H */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fraiseexcpt.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fraiseexcpt.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fraiseexcpt.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fraiseexcpt.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,33 @@
+/* Raise given exceptions.
+   Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+#include <math.h>
+
+void
+feraiseexcept (int excepts)
+{
+  /* Raise exceptions represented by EXPECTS.  */
+  fexcept_t temp;
+  _FPU_GETCW(temp);
+  temp |= (excepts & FE_ALL_EXCEPT);
+  temp |= (excepts & FE_ALL_EXCEPT) << 5;
+  _FPU_SETCW(temp);
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fsetexcptflg.c glibc-2.1.3/sysdeps/sh/sh4/fpu/fsetexcptflg.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/fsetexcptflg.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/fsetexcptflg.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,38 @@
+/* Set floating-point environment exception handling.
+   Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <math.h>
+#include <fpu_control.h>
+
+void
+fesetexceptflag (const fexcept_t *flagp, int excepts)
+{
+  fexcept_t temp;
+
+  /* Get the current environment.  */
+  _FPU_GETCW(temp);
+
+  /* Set the desired exception mask.  */
+  temp &= ~(excepts & FE_ALL_EXCEPT);
+  temp |= (*flagp & excepts & FE_ALL_EXCEPT);
+
+  /* Save state back to the FPU.  */
+  _FPU_SETCW(temp);
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/fpu/ftestexcept.c glibc-2.1.3/sysdeps/sh/sh4/fpu/ftestexcept.c
--- glibc-2.1.3-original/sysdeps/sh/sh4/fpu/ftestexcept.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/fpu/ftestexcept.c	Sun Mar 12 21:13:05 2000
@@ -0,0 +1,32 @@
+/* Test exception in current environment.
+   Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fetestexcept (int excepts)
+{
+  fexcept_t temp;
+
+  /* Get current exceptions.  */
+  _FPU_GETCW(temp);
+
+  return temp & excepts & FE_ALL_EXCEPT;
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/setjmp.S glibc-2.1.3/sysdeps/sh/sh4/setjmp.S
--- glibc-2.1.3-original/sysdeps/sh/sh4/setjmp.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/setjmp.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,72 @@
+/* setjmp for SH4.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _SETJMP_H
+#define _ASM
+#include <bits/setjmp.h>
+
+	/* Binary compatibility entry point.  */
+ENTRY (__setjmp)
+	mov	#0, r5
+ENTRY (__sigsetjmp)
+	/* Save registers */
+	add	#JB_SIZE, r4
+	fmov.s	fr15, @-r4
+	fmov.s	fr14, @-r4
+	fmov.s	fr13, @-r4
+	fmov.s	fr12, @-r4
+	sts.l	fpscr, @-r4
+	stc.l	gbr, @-r4
+	sts.l	pr, @-r4
+	mov.l	r15, @-r4
+	mov.l	r14, @-r4
+	mov.l	r13, @-r4
+	mov.l	r12, @-r4
+	mov.l	r11, @-r4
+	mov.l	r10, @-r4
+	mov.l	r9, @-r4
+	mov.l	r8, @-r4
+
+	/* Make a tail call to __sigjmp_save; it takes the same args.  */
+#ifdef PIC
+	mov.l	1f, r1
+	mova	1f, r0
+	bra	2f
+	 add	r1, r0
+	.align	2
+1:
+	.long	_GLOBAL_OFFSET_TABLE_
+2:
+	mov.l	.L1, r1
+	mov.l	@(r0,r1), r1
+	jmp	@r1
+	 nop
+	.align	2
+.L1:
+	.long	C_SYMBOL_NAME(__sigjmp_save@GOT)
+#else
+	mov.l	.L1, r1
+	jmp	@r1
+	 nop
+	.align	2
+.L1:
+	.long	C_SYMBOL_NAME(__sigjmp_save)
+#endif
+END (__setjmp)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sh4/sys/ucontext.h glibc-2.1.3/sysdeps/sh/sh4/sys/ucontext.h
--- glibc-2.1.3-original/sysdeps/sh/sh4/sys/ucontext.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sh4/sys/ucontext.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,99 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Where is System V/SH ABI?  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H	1
+
+#include <features.h>
+#include <signal.h>
+
+typedef int greg_t;
+
+/* Number of general registers.  */
+#define NGREG	16
+
+/* Container for all general registers.  */
+typedef greg_t gregset_t[NGREG];
+
+/* Number of each register is the `gregset_t' array.  */
+enum
+{
+  R0 = 0,
+#define R0	R0
+  R1 = 1,
+#define R1	R1
+  R2 = 2,
+#define R2	R2
+  R3 = 3,
+#define R3	R3
+  R4 = 4,
+#define R4	R4
+  R5 = 5,
+#define R5	R5
+  R6 = 6,
+#define R6	R6
+  R7 = 7,
+#define R7	R7
+  R8 = 8,
+#define R8	R8
+  R9 = 9,
+#define R9	R9
+  R10 = 10,
+#define R10	R10
+  R11 = 11,
+#define R11	R11
+  R12 = 12,
+#define R12	R12
+  R13 = 13,
+#define R13	R13
+  R14 = 14,
+#define R14	R14
+  R15 = 15,
+#define R15	R15
+};
+
+typedef int freg_t;
+
+/* Number of FPU registers.  */
+#define NFREG	16
+
+/* Structure to describe FPU registers.  */
+typedef freg_t fpregset_t[NFREG];
+
+/* Context to describe whole processor state.  */
+typedef struct
+  {
+    gregset_t gregs;
+    fpregset_t fpregs;
+    fpregset_t xfpregs;
+  } mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_link;
+    __sigset_t uc_sigmask;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    long int uc_filler[5];
+  } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/strlen.S glibc-2.1.3/sysdeps/sh/strlen.S
--- glibc-2.1.3-original/sysdeps/sh/strlen.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/strlen.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,84 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#include <endian.h>
+
+/* size_t strlen (const char *s)  */
+
+ENTRY(strlen)
+	mov	r4, r0
+	and	#3, r0
+	tst	r0, r0
+	bt/s	1f
+	mov	#0, r2
+
+	add	#-1, r0
+	shll2	r0
+	shll	r0
+	braf	r0
+	nop
+
+	mov.b	@r4+, r1
+	tst	r1, r1
+	bt	8f
+	add	#1, r2	
+
+	mov.b	@r4+, r1
+	tst	r1, r1
+	bt	8f
+	add	#1, r2	
+
+	mov.b	@r4+, r1
+	tst	r1, r1
+	bt	8f
+	add	#1, r2	
+
+1:
+	mov	#0, r3
+2:
+	mov.l	@r4+, r1
+	cmp/str	r3, r1
+	bf/s	2b
+	add	#4, r2
+
+	add	#-4, r2
+#if __BYTE_ORDER == __BIG_ENDIAN
+	swap.b	r1, r1
+	swap.w	r1, r1
+	swap.b	r1, r1
+#endif
+	extu.b	r1, r0
+	tst	r0, r0
+	bt/s	8f
+	shlr8	r1
+	add	#1, r2
+	extu.b	r1, r0
+	tst	r0, r0
+	bt/s	8f
+	shlr8	r1
+	add	#1, r2
+	extu.b	r1, r0
+	tst	r0, r0
+	bt	8f
+	add	#1, r2
+8:
+	rts
+	mov	r2, r0
+END(strlen)
diff -u -r -N glibc-2.1.3-original/sysdeps/sh/sysdep.h glibc-2.1.3/sysdeps/sh/sysdep.h
--- glibc-2.1.3-original/sysdeps/sh/sysdep.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/sh/sysdep.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,76 @@
+/* Assembler macros for SH.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdeps/generic/sysdep.h>
+
+#ifdef	__ASSEMBLER__
+
+/* Syntactic details of assembler.  */
+
+#ifdef HAVE_ELF
+
+#define ALIGNARG(log2) log2
+/* For ELF we need the `.type' directive to make shared libs work right.  */
+#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg;
+#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+#ifdef PIC
+#define PLTJMP(_x)	_x##@PLT
+#else
+#define PLTJMP(_x)	_x
+#endif
+
+#else
+
+#define ALIGNARG(log2) log2
+#define ASM_TYPE_DIRECTIVE(name,type)	/* Nothing is specified.  */
+#define ASM_SIZE_DIRECTIVE(name)	/* Nothing is specified.  */
+
+#define PLTJMP(_x)	_x
+
+#endif
+
+/* Define an entry point visible from C.  */
+#define	ENTRY(name)							      \
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name);				      \
+  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function)			      \
+  .align ALIGNARG(5);							      \
+  C_LABEL(name)								      \
+  CALL_MCOUNT
+
+#undef	END
+#define END(name)							      \
+  ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name))
+
+/* If compiled for profiling, call `mcount' at the start of each function.  */
+#ifdef	PROF
+#define CALL_MCOUNT	/* NOTYET */
+#else
+#define CALL_MCOUNT		/* Do nothing.  */
+#endif
+
+#ifdef	NO_UNDERSCORES
+/* Since C identifiers are not normally prefixed with an underscore
+   on this system, the asm identifier `syscall_error' intrudes on the
+   C name space.  Make sure we use an innocuous name.  */
+#define	syscall_error	__syscall_error
+#define mcount		_mcount
+#endif
+
+#endif	/* __ASSEMBLER__ */
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sh/sysdep.S glibc-2.1.3/sysdeps/unix/sh/sysdep.S
--- glibc-2.1.3-original/sysdeps/unix/sh/sysdep.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sh/sysdep.S	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,102 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _ERRNO_H
+#include <bits/errno.h>
+
+ENTRY(__syscall_error)
+#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
+	/* We translate the system's EWOULDBLOCK error into EAGAIN.
+	   The GNU C library always defines EWOULDBLOCK==EAGAIN.
+	   EWOULDBLOCK_sys is the original number.  */
+	mov.l	.L1, r1
+	cmp/eq	r1, r0
+	bf	skip
+	nop
+	mov.l	.L2, r0
+skip:
+#endif
+	/* Store it in errno... */
+#ifndef PIC
+#ifndef _LIBC_REENTRANT
+	mov.l	.L3, r1
+	mov.l	r0, @r1
+#else
+	mov.l	.L3, r1
+	sts.l	pr, @-r15
+	jsr	@r1
+	 mov.l	r0, @-r15
+	mov.l	@r15+, r1
+	lds.l	@r15+, pr
+	mov.l	r1, @r0
+#endif
+#else
+	mov.l	r12, @-r15
+#ifndef _LIBC_REENTRANT
+	mov	r0, r2
+        mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mov.l	.L3, r0
+	mov.l	@(r0,r12), r1
+	mov.l	r2, @r1
+#else
+	mov.l	r0, @-r15
+	sts.l	pr, @-r15
+        mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mov.l	.L3, r1
+	mova	.L3, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	mov.l	@r15+, r1
+	mov.l	r1, @r0
+#endif
+	mov.l	@r15+, r12
+#endif
+	/* And just kick back a -1.  */
+	rts
+	 mov	#-1, r0
+
+	.align	2
+#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
+.L1:	.long	EWOULDBLOCK_sys
+.L2:	.long	EAGAIN
+#endif
+#ifndef PIC
+#ifndef _LIBC_REENTRANT
+.L3:	.long	C_SYMBOL_NAME(errno)
+#else
+.L3:	.long	C_SYMBOL_NAME(__errno_location)
+#endif
+#else
+0:
+	.long	_GLOBAL_OFFSET_TABLE_
+#ifndef _LIBC_REENTRANT
+.L3:	.long	C_SYMBOL_NAME(errno@GOT)
+#else
+.L3:	.long	C_SYMBOL_NAME(__errno_location@PLT)
+#endif
+#endif
+END(__syscall_error)
+
+weak_alias (__syscall_error, syscall_error)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sh/sysdep.h glibc-2.1.3/sysdeps/unix/sh/sysdep.h
--- glibc-2.1.3-original/sysdeps/unix/sh/sysdep.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sh/sysdep.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,29 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdeps/unix/sysdep.h>
+#include <sysdeps/sh/sysdep.h>
+
+#ifdef __ASSEMBLER__
+
+#define ret	rts ; nop
+
+/* The sh move insn is s, d.  */
+#define MOVE(x,y)	mov x , y
+
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Dist glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Dist
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Dist	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Dist	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,12 @@
+clone.S
+init-first.h
+ioperm.c
+pipe.S
+setresuid.c
+setresgid.c
+setfsuid.c
+setfsgid.c
+sigrestorer.S
+bits/shsigctx.h
+sys/io.h
+sys/user.h
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Makefile glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Makefile
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Makefile	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Makefile	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,13 @@
+ifeq ($(subdir),io)
+sysdep_routines += pipe
+endif
+
+ifeq ($(subdir),misc)
+sysdep_routines += setfsgid setfsuid setresgid setresuid ioperm
+endif
+
+ifeq ($(subdir),signal)
+sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait	\
+		   rt_sigqueueinfo rt_sigaction rt_sigpending \
+		   sigrestorer
+endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Versions glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Versions
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/Versions	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/Versions	Sun Mar 12 04:20:49 2000
@@ -0,0 +1,4 @@
+libc {
+  GLIBC_2.1 {
+  }
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/bits/mman.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/bits/mman.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/bits/mman.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/bits/mman.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,75 @@
+/* Definitions for POSIX memory map interface.  Linux/SH version.
+   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never include this file directly.  Use <sys/mman.h> instead"
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ	0x1		/* Page can be read.  */
+#define PROT_WRITE	0x2		/* Page can be written.  */
+#define PROT_EXEC	0x4		/* Page can be executed.  */
+#define PROT_NONE	0x0		/* Page can not be accessed.  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED	0x01		/* Share changes.  */
+#define MAP_PRIVATE	0x02		/* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE	0
+# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
+# define MAP_ANON	MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN	0x0100		/* Stack-like segment.  */
+# define MAP_DENYWRITE	0x0800		/* ETXTBSY */
+# define MAP_EXECUTABLE	0x1000		/* Mark it as an executable.  */
+# define MAP_LOCKED	0x2000		/* Lock the mapping.  */
+# define MAP_NORESERVE	0x4000		/* Don't check for reservations.  */
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC	1		/* Sync memory asynchronously.  */
+#define MS_SYNC		4		/* Synchronous memory sync.  */
+#define MS_INVALIDATE	2		/* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
+#define MCL_FUTURE	2		/* Lock all additions to address
+					   space.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE	1
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/brk.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/brk.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/brk.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/brk.c	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,48 @@
+/* brk system call for Linux/SH.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases.  */
+void *__curbrk = 0;
+
+int
+__brk (void *addr)
+{
+  void *newbrk;
+  register long __r3 __asm__ ("$r3") = (long) SYS_ify (brk);
+  register long __r4 __asm__ ("$r4") = (long) addr;
+
+  asm ("trapa #0x11\n"	/* do the system call */
+       : "=z" (newbrk)
+       : "r" (__r3), "r" (__r4));
+
+  __curbrk = newbrk;
+
+  if (newbrk < addr)
+    {
+      __set_errno (ENOMEM);
+      return -1;
+    }
+
+  return 0;
+}
+weak_alias (__brk, brk)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/clone.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/clone.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/clone.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/clone.S	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,133 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+
+        .text
+ENTRY(__clone)
+	/* sanity check arguments.  */
+	tst	r4, r4
+	bf/s	1f
+	 tst	r5, r5
+	bf/s	1f
+	 mov.l	.L1, r1
+#ifdef PIC
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+        mov.l	.LG, r12
+	mova	.LG, r0
+	add	r0, r12
+	mova	.L1, r0
+	add	r0, r1
+	jsr	@r1
+	 mov	#-EINVAL, r4
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+#else
+	jmp	@r1
+	 mov	#-EINVAL, r4
+#endif
+	.align	2
+.L1:
+	.long	PLTJMP(C_SYMBOL_NAME(__syscall_error))
+1:
+	/* insert the args onto the new stack */
+	mov.l	r7, @-r5
+	/* save the function pointer as the 0th element */
+	mov.l	r4, @-r5
+
+	/* do the system call */
+	mov	$r6, $r4
+	mov	#+SYS_ify(clone), $r3
+	trapa	#0x12
+	mov     $r0, $r1
+	mov	#-12, $r2
+	shad	$r2, $r1
+	not	r1, r1			// r1=0 means r0 = -1 to -4095
+	tst	r1, r1			// i.e. error in linux
+	bf	2f
+	mov.l	.L2, r1
+#ifdef PIC
+	mov	r0, r4
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+        mov.l	.LG, r12
+	mova	.LG, r0
+	add	r0, r12
+	mova	.L2, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+#else
+	jmp	@r1
+	 mov	r0, r4
+#endif
+	.align	2
+.L2:
+	.long	PLTJMP(C_SYMBOL_NAME(__syscall_error))
+
+2:
+	tst	r0, r0
+	bt	3f
+	rts
+	 nop
+3:
+	/* thread starts */
+	mov.l	@r15, r1
+	jsr	@r1
+	 mov.l	@(4,r15), r4
+
+	/* we are done, passing the return value through r0  */
+	mov.l	.L3, r1
+#ifdef PIC
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+	mov	r0, r4
+	mova	.LG, r0
+	mov.l	.LG, r12
+	add	r0, r12
+	mova	.L3, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+#else
+	jmp	@r1
+	 mov	r0, r4
+#endif
+	.align	2
+.LG:
+	.long	_GLOBAL_OFFSET_TABLE_
+.L3:
+	.long	PLTJMP(C_SYMBOL_NAME(_exit))
+PSEUDO_END (__clone)
+
+weak_alias (__clone, clone)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/errlist.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/errlist.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/errlist.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/errlist.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,55 @@
+/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sizes.h>
+#include <errlist.h>
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+
+# define SYS_ERRLIST __new_sys_errlist
+# define SYS_NERR __new_sys_nerr
+
+asm (".data; .globl __old_sys_errlist;  __old_sys_errlist:");
+#endif
+
+#include <sysdeps/gnu/errlist.c>
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".type __old_sys_errlist,%object;.size __old_sys_errlist,"
+     OLD_ERRLIST_SIZE_STR "*" PTR_SIZE_STR);
+
+extern const char *const *__old_sys_errlist;
+
+const int __old_sys_nerr = OLD_ERRLIST_SIZE;
+
+strong_alias (__old_sys_nerr, _old_sys_nerr);
+weak_alias (__old_sys_nerr, _old_sys_nerr)
+symbol_version (__old_sys_nerr, _sys_nerr, GLIBC_2.0);
+symbol_version (_old_sys_nerr, sys_nerr, GLIBC_2.0);
+weak_alias (__old_sys_errlist, _old_sys_errlist);
+symbol_version (__old_sys_errlist, _sys_errlist, GLIBC_2.0);
+symbol_version (_old_sys_errlist, sys_errlist, GLIBC_2.0);
+
+weak_alias (__new_sys_nerr, _new_sys_nerr)
+default_symbol_version (__new_sys_nerr, _sys_nerr, GLIBC_2.1);
+default_symbol_version (_new_sys_nerr, sys_nerr, GLIBC_2.1);
+weak_alias (__new_sys_errlist, _new_sys_errlist)
+default_symbol_version (__new_sys_errlist, _sys_errlist, GLIBC_2.1);
+default_symbol_version (_new_sys_errlist, sys_errlist, GLIBC_2.1);
+
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/getgroups.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/getgroups.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/getgroups.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/getgroups.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/getgroups.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/init-first.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/init-first.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/init-first.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/init-first.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,52 @@
+/* Prepare arguments for library initialization function.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.	*/
+
+/* The job of this fragment it to find argc and friends for INIT.
+   This is done in one of two ways: either in the stack context
+   of program start, or having dlopen pass them in.  */
+
+#define SYSDEP_CALL_INIT(NAME, INIT)		\
+void NAME (void *arg, void *arg1, void *arg2, void *arg3, void *argp)	\
+{		\
+  int argc;	\
+  char** argv;	\
+  char** envp;	\
+  /* The next variable is only here to work around a bug in gcc <= 2.7.2.2.   \
+     If the address would be taken inside the expression the optimizer	      \
+     would try to be too smart and throws it away.  Grrr.  */		      \
+  int *dummy_addr = &_dl_starting_up;					      \
+									      \
+  __libc_multiple_libcs = dummy_addr && !_dl_starting_up;		      \
+						\
+  if (!__libc_multiple_libcs)			\
+    {						\
+      /* In SH, argp is the first argument on stack.  */	\
+      argc = *(int*) (&argp);			\
+      argv = (char **) &argp + 1;		\
+      envp = &argv[argc+1];			\
+    }						\
+  else						\
+    {						\
+      argc = (int) arg;				\
+      argv = (char**) arg1;			\
+      envp = (char**) arg2;			\
+    }						\
+						\
+  INIT (argc, argv, envp);			\
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pipe.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pipe.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pipe.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pipe.S	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,63 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+ENTRY (__libc_pipe)
+	mov	#+__NR_pipe, $r3
+	trapa	#0x10
+	mov     r0, r3
+	mov	#-12, r2
+	shad	r2, r3
+	not	r3, r3			// r1=0 means r0 = -1 to -4095
+	tst	r3, r3			// i.e. error in linux
+	bf	1f
+	mov.l	.L2, r1
+#ifdef PIC
+	mov	r0, r4
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+        mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mova	.L2, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+	.align 2
+0:
+	.long	_GLOBAL_OFFSET_TABLE_
+#else
+	jmp	@r1
+	 mov	r0, r4
+#endif
+1:
+	mov.l	r0, @r4
+	mov.l	r1, @(4, r4)
+	rts
+	 mov	#0, r0
+	.align	2
+.L2:
+	.long	PLTJMP(C_SYMBOL_NAME(__syscall_error))
+PSEUDO_END (__libc_pipe)
+
+weak_alias (__libc_pipe, __pipe)
+weak_alias (__libc_pipe, pipe)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pread.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pread.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pread.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pread.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/pread.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pread64.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pread64.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pread64.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pread64.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/pread64.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/profil-counter.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/profil-counter.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/profil-counter.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/profil-counter.h	Sun Mar 12 04:09:09 2000
@@ -0,0 +1,28 @@
+/* Low-level statistical profiling support function.  Linux/SH version.
+   Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <signal.h>
+
+void
+profil_counter (int signo, int _a2, int _a3, int _a4, struct sigcontext sc)
+{
+  void *pc;
+  pc = (void *) sc.sc_pc;
+  profil_count (pc);
+}
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pwrite.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pwrite.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pwrite.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pwrite.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/pwrite.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pwrite64.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pwrite64.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/pwrite64.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/pwrite64.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/pwrite64.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setegid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setegid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setegid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setegid.c	Sun Mar 12 04:09:09 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setegid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/seteuid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/seteuid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/seteuid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/seteuid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setfsgid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setfsgid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setfsgid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setfsgid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setfsuid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setfsuid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setfsuid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setfsuid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setgid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setgid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setgid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setgid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setgroups.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setgroups.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setgroups.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setgroups.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setregid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setregid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setregid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setregid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setresgid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setresgid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setresgid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setresgid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresgid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setresuid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setresuid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setresuid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setresuid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresuid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setreuid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setreuid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setreuid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setreuid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setuid.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setuid.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/setuid.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/setuid.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setuid.c>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,151 @@
+/* Dump registers.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/uio.h>
+#include <stdio-common/_itoa.h>
+
+/* We will print the register dump in this format:
+
+  R0: XXXXXXXX   R1: XXXXXXXX   R2: XXXXXXXX   R3: XXXXXXXX
+  R4: XXXXXXXX   R5: XXXXXXXX   R6: XXXXXXXX   R7: XXXXXXXX
+  R8: XXXXXXXX   R9: XXXXXXXX  R10: XXXXXXXX  R11: XXXXXXXX
+ R12: XXXXXXXX  R13: XXXXXXXX  R14: XXXXXXXX  R15: XXXXXXXX
+
+MACL: XXXXXXXX MACH: XXXXXXXX
+
+  PC: XXXXXXXX   PR: XXXXXXXX  GBR: XXXXXXXX   SR: XXXXXXXX
+
+ FR0: XXXXXXXX  FR1: XXXXXXXX  FR2: XXXXXXXX  FR3: XXXXXXXX 
+ FR4: XXXXXXXX  FR5: XXXXXXXX  FR6: XXXXXXXX  FR7: XXXXXXXX 
+ FR8: XXXXXXXX  FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX 
+FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX 
+
+ XR0: XXXXXXXX  XR1: XXXXXXXX  XR2: XXXXXXXX  XR3: XXXXXXXX 
+ XR4: XXXXXXXX  XR5: XXXXXXXX  XR6: XXXXXXXX  XR7: XXXXXXXX 
+ XR8: XXXXXXXX  XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX 
+XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX 
+
+FPSCR: XXXXXXXX FPUL: XXXXXXXX
+
+ */
+
+static void
+hexvalue (unsigned long int value, char *buf, size_t len)
+{
+  char *cp = _itoa_word (value, buf + len, 16, 0);
+  while (cp > buf)
+    *--cp = '0';
+}
+
+static void
+register_dump (int fd, struct sigcontext *ctx)
+{
+  char regs[22][8];
+  struct iovec iov[112];
+  size_t nr = 0;
+
+#define ADD_STRING(str) \
+  iov[nr].iov_base = (char *) str;					      \
+  iov[nr].iov_len = strlen (str);					      \
+  ++nr
+#define ADD_MEM(str, len) \
+  iov[nr].iov_base = str;						      \
+  iov[nr].iov_len = len;						      \
+  ++nr
+
+  /* Generate strings of register contents.  */
+  hexvalue (ctx->sc_regs[0], regs[0], 8);
+  hexvalue (ctx->sc_regs[1], regs[1], 8);
+  hexvalue (ctx->sc_regs[2], regs[2], 8);
+  hexvalue (ctx->sc_regs[3], regs[3], 8);
+  hexvalue (ctx->sc_regs[4], regs[4], 8);
+  hexvalue (ctx->sc_regs[5], regs[5], 8);
+  hexvalue (ctx->sc_regs[6], regs[6], 8);
+  hexvalue (ctx->sc_regs[7], regs[7], 8);
+  hexvalue (ctx->sc_regs[8], regs[8], 8);
+  hexvalue (ctx->sc_regs[9], regs[9], 8);
+  hexvalue (ctx->sc_regs[10], regs[10], 8);
+  hexvalue (ctx->sc_regs[11], regs[11], 8);
+  hexvalue (ctx->sc_regs[12], regs[12], 8);
+  hexvalue (ctx->sc_regs[13], regs[13], 8);
+  hexvalue (ctx->sc_regs[14], regs[14], 8);
+  hexvalue (ctx->sc_regs[15], regs[15], 8);
+  hexvalue (ctx->sc_macl, regs[16], 8);
+  hexvalue (ctx->sc_mach, regs[17], 8);
+  hexvalue (ctx->sc_pc, regs[18], 8);
+  hexvalue (ctx->sc_pr, regs[19], 8);
+  hexvalue (ctx->sc_gbr, regs[20], 8);
+  hexvalue (ctx->sc_sr, regs[21], 8);
+
+  /* Generate the output.  */
+  ADD_STRING ("Register dump:\n\n  R0: ");
+  ADD_MEM (regs[0], 8);
+  ADD_STRING ("   R1: ");
+  ADD_MEM (regs[1], 8);
+  ADD_STRING ("   R2: ");
+  ADD_MEM (regs[2], 8);
+  ADD_STRING ("   R3: ");
+  ADD_MEM (regs[3], 8);
+  ADD_STRING ("\n  R4: ");
+  ADD_MEM (regs[4], 8);
+  ADD_STRING ("   R5: ");
+  ADD_MEM (regs[5], 8);
+  ADD_STRING ("   R6: ");
+  ADD_MEM (regs[6], 8);
+  ADD_STRING ("   R7: ");
+  ADD_MEM (regs[7], 8);
+  ADD_STRING ("\n  R8: ");
+  ADD_MEM (regs[8], 8);
+  ADD_STRING ("   R9: ");
+  ADD_MEM (regs[9], 8);
+  ADD_STRING ("  R10: ");
+  ADD_MEM (regs[10], 8);
+  ADD_STRING ("  R11: ");
+  ADD_MEM (regs[11], 8);
+  ADD_STRING ("\n R12: ");
+  ADD_MEM (regs[12], 8);
+  ADD_STRING ("  R13: ");
+  ADD_MEM (regs[13], 8);
+  ADD_STRING ("  R14: ");
+  ADD_MEM (regs[14], 8);
+  ADD_STRING ("  R15: ");
+  ADD_MEM (regs[15], 8);
+
+  ADD_STRING ("\n\nMACL: ");
+  ADD_MEM (regs[16], 8);
+  ADD_STRING (" MACH: ");
+  ADD_MEM (regs[17], 8);
+
+  ADD_STRING ("\n\n  PC: ");
+  ADD_MEM (regs[18], 8);
+  ADD_STRING ("   PR: ");
+  ADD_MEM (regs[19], 8);
+  ADD_STRING ("  GBR: ");
+  ADD_MEM (regs[20], 8);
+  ADD_STRING ("   SR: ");
+  ADD_MEM (regs[21], 8);
+
+  ADD_STRING ("\n");
+
+  /* Write the stuff out.  */
+  writev (fd, iov, nr);
+}
+
+
+#define REGISTER_DUMP register_dump (fd, &ctx)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,262 @@
+/* Dump registers.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/uio.h>
+#include <stdio-common/_itoa.h>
+
+/* We will print the register dump in this format:
+
+  R0: XXXXXXXX   R1: XXXXXXXX   R2: XXXXXXXX   R3: XXXXXXXX
+  R4: XXXXXXXX   R5: XXXXXXXX   R6: XXXXXXXX   R7: XXXXXXXX
+  R8: XXXXXXXX   R9: XXXXXXXX  R10: XXXXXXXX  R11: XXXXXXXX
+ R12: XXXXXXXX  R13: XXXXXXXX  R14: XXXXXXXX  R15: XXXXXXXX
+
+MACL: XXXXXXXX MACH: XXXXXXXX
+
+  PC: XXXXXXXX   PR: XXXXXXXX  GBR: XXXXXXXX   SR: XXXXXXXX
+
+ FR0: XXXXXXXX  FR1: XXXXXXXX  FR2: XXXXXXXX  FR3: XXXXXXXX 
+ FR4: XXXXXXXX  FR5: XXXXXXXX  FR6: XXXXXXXX  FR7: XXXXXXXX 
+ FR8: XXXXXXXX  FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX 
+FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX 
+
+ XR0: XXXXXXXX  XR1: XXXXXXXX  XR2: XXXXXXXX  XR3: XXXXXXXX 
+ XR4: XXXXXXXX  XR5: XXXXXXXX  XR6: XXXXXXXX  XR7: XXXXXXXX 
+ XR8: XXXXXXXX  XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX 
+XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX 
+
+FPSCR: XXXXXXXX FPUL: XXXXXXXX
+
+ */
+
+static void
+hexvalue (unsigned long int value, char *buf, size_t len)
+{
+  char *cp = _itoa_word (value, buf + len, 16, 0);
+  while (cp > buf)
+    *--cp = '0';
+}
+
+static void
+register_dump (int fd, struct sigcontext *ctx)
+{
+  char regs[22][8];
+  char fpregs[34][8];
+  struct iovec iov[112];
+  size_t nr = 0;
+
+#define ADD_STRING(str) \
+  iov[nr].iov_base = (char *) str;					      \
+  iov[nr].iov_len = strlen (str);					      \
+  ++nr
+#define ADD_MEM(str, len) \
+  iov[nr].iov_base = str;						      \
+  iov[nr].iov_len = len;						      \
+  ++nr
+
+  /* Generate strings of register contents.  */
+  hexvalue (ctx->sc_regs[0], regs[0], 8);
+  hexvalue (ctx->sc_regs[1], regs[1], 8);
+  hexvalue (ctx->sc_regs[2], regs[2], 8);
+  hexvalue (ctx->sc_regs[3], regs[3], 8);
+  hexvalue (ctx->sc_regs[4], regs[4], 8);
+  hexvalue (ctx->sc_regs[5], regs[5], 8);
+  hexvalue (ctx->sc_regs[6], regs[6], 8);
+  hexvalue (ctx->sc_regs[7], regs[7], 8);
+  hexvalue (ctx->sc_regs[8], regs[8], 8);
+  hexvalue (ctx->sc_regs[9], regs[9], 8);
+  hexvalue (ctx->sc_regs[10], regs[10], 8);
+  hexvalue (ctx->sc_regs[11], regs[11], 8);
+  hexvalue (ctx->sc_regs[12], regs[12], 8);
+  hexvalue (ctx->sc_regs[13], regs[13], 8);
+  hexvalue (ctx->sc_regs[14], regs[14], 8);
+  hexvalue (ctx->sc_regs[15], regs[15], 8);
+  hexvalue (ctx->sc_macl, regs[16], 8);
+  hexvalue (ctx->sc_mach, regs[17], 8);
+  hexvalue (ctx->sc_pc, regs[18], 8);
+  hexvalue (ctx->sc_pr, regs[19], 8);
+  hexvalue (ctx->sc_gbr, regs[20], 8);
+  hexvalue (ctx->sc_sr, regs[21], 8);
+
+  /* Generate the output.  */
+  ADD_STRING ("Register dump:\n\n  R0: ");
+  ADD_MEM (regs[0], 8);
+  ADD_STRING ("   R1: ");
+  ADD_MEM (regs[1], 8);
+  ADD_STRING ("   R2: ");
+  ADD_MEM (regs[2], 8);
+  ADD_STRING ("   R3: ");
+  ADD_MEM (regs[3], 8);
+  ADD_STRING ("\n  R4: ");
+  ADD_MEM (regs[4], 8);
+  ADD_STRING ("   R5: ");
+  ADD_MEM (regs[5], 8);
+  ADD_STRING ("   R6: ");
+  ADD_MEM (regs[6], 8);
+  ADD_STRING ("   R7: ");
+  ADD_MEM (regs[7], 8);
+  ADD_STRING ("\n  R8: ");
+  ADD_MEM (regs[8], 8);
+  ADD_STRING ("   R9: ");
+  ADD_MEM (regs[9], 8);
+  ADD_STRING ("  R10: ");
+  ADD_MEM (regs[10], 8);
+  ADD_STRING ("  R11: ");
+  ADD_MEM (regs[11], 8);
+  ADD_STRING ("\n R12: ");
+  ADD_MEM (regs[12], 8);
+  ADD_STRING ("  R13: ");
+  ADD_MEM (regs[13], 8);
+  ADD_STRING ("  R14: ");
+  ADD_MEM (regs[14], 8);
+  ADD_STRING ("  R15: ");
+  ADD_MEM (regs[15], 8);
+
+  ADD_STRING ("\n\nMACL: ");
+  ADD_MEM (regs[16], 8);
+  ADD_STRING (" MACH: ");
+  ADD_MEM (regs[17], 8);
+
+  ADD_STRING ("\n\n  PC: ");
+  ADD_MEM (regs[18], 8);
+  ADD_STRING ("   PR: ");
+  ADD_MEM (regs[19], 8);
+  ADD_STRING ("  GBR: ");
+  ADD_MEM (regs[20], 8);
+  ADD_STRING ("   SR: ");
+  ADD_MEM (regs[21], 8);
+
+  ADD_STRING ("\n");
+
+  if (ctx->sc_ownedfp != NULL)
+    {
+      hexvalue (ctx->sc_fpregs[0], fpregs[0], 8);
+      hexvalue (ctx->sc_fpregs[1], fpregs[1], 8);
+      hexvalue (ctx->sc_fpregs[2], fpregs[2], 8);
+      hexvalue (ctx->sc_fpregs[3], fpregs[3], 8);
+      hexvalue (ctx->sc_fpregs[4], fpregs[4], 8);
+      hexvalue (ctx->sc_fpregs[5], fpregs[5], 8);
+      hexvalue (ctx->sc_fpregs[6], fpregs[6], 8);
+      hexvalue (ctx->sc_fpregs[7], fpregs[7], 8);
+      hexvalue (ctx->sc_fpregs[8], fpregs[8], 8);
+      hexvalue (ctx->sc_fpregs[9], fpregs[9], 8);
+      hexvalue (ctx->sc_fpregs[10], fpregs[10], 8);
+      hexvalue (ctx->sc_fpregs[11], fpregs[11], 8);
+      hexvalue (ctx->sc_fpregs[12], fpregs[12], 8);
+      hexvalue (ctx->sc_fpregs[13], fpregs[13], 8);
+      hexvalue (ctx->sc_fpregs[14], fpregs[14], 8);
+      hexvalue (ctx->sc_fpregs[15], fpregs[15], 8);
+      hexvalue (ctx->sc_xfpregs[0], fpregs[16], 8);
+      hexvalue (ctx->sc_xfpregs[1], fpregs[17], 8);
+      hexvalue (ctx->sc_xfpregs[2], fpregs[18], 8);
+      hexvalue (ctx->sc_xfpregs[3], fpregs[19], 8);
+      hexvalue (ctx->sc_xfpregs[4], fpregs[20], 8);
+      hexvalue (ctx->sc_xfpregs[5], fpregs[21], 8);
+      hexvalue (ctx->sc_xfpregs[6], fpregs[22], 8);
+      hexvalue (ctx->sc_xfpregs[7], fpregs[23], 8);
+      hexvalue (ctx->sc_xfpregs[8], fpregs[24], 8);
+      hexvalue (ctx->sc_xfpregs[9], fpregs[25], 8);
+      hexvalue (ctx->sc_xfpregs[10], fpregs[26], 8);
+      hexvalue (ctx->sc_xfpregs[11], fpregs[27], 8);
+      hexvalue (ctx->sc_xfpregs[12], fpregs[28], 8);
+      hexvalue (ctx->sc_xfpregs[13], fpregs[29], 8);
+      hexvalue (ctx->sc_xfpregs[14], fpregs[30], 8);
+      hexvalue (ctx->sc_xfpregs[15], fpregs[31], 8);
+      hexvalue (ctx->sc_fpscr, fpregs[32], 8);
+      hexvalue (ctx->sc_fpul, fpregs[33], 8);
+
+      ADD_STRING ("\n\n FR0: ");
+      ADD_MEM (fpregs[0], 8);
+      ADD_STRING ("  FR1: ");
+      ADD_MEM (fpregs[1], 8);
+      ADD_STRING ("  FR2: ");
+      ADD_MEM (fpregs[2], 8);
+      ADD_STRING ("  FR3: ");
+      ADD_MEM (fpregs[3], 8);
+      ADD_STRING ("\n FR4: ");
+      ADD_MEM (fpregs[4], 8);
+      ADD_STRING ("  FR5: ");
+      ADD_MEM (fpregs[5], 8);
+      ADD_STRING ("  FR6: ");
+      ADD_MEM (fpregs[6], 8);
+      ADD_STRING ("  FR7: ");
+      ADD_MEM (fpregs[7], 8);
+      ADD_STRING ("\n FR8: ");
+      ADD_MEM (fpregs[8], 8);
+      ADD_STRING ("  FR9: ");
+      ADD_MEM (fpregs[9], 8);
+      ADD_STRING (" FR10: ");
+      ADD_MEM (fpregs[10], 8);
+      ADD_STRING (" FR11: ");
+      ADD_MEM (fpregs[11], 8);
+      ADD_STRING ("\nFR12: ");
+      ADD_MEM (fpregs[12], 8);
+      ADD_STRING (" FR13: ");
+      ADD_MEM (fpregs[13], 8);
+      ADD_STRING (" FR14: ");
+      ADD_MEM (fpregs[14], 8);
+      ADD_STRING (" FR15: ");
+      ADD_MEM (fpregs[15], 8);
+      ADD_STRING ("\n\n XR0: ");
+      ADD_MEM (fpregs[16], 8);
+      ADD_STRING ("  XR1: ");
+      ADD_MEM (fpregs[17], 8);
+      ADD_STRING ("  XR2: ");
+      ADD_MEM (fpregs[18], 8);
+      ADD_STRING ("  XR3: ");
+      ADD_MEM (fpregs[19], 8);
+      ADD_STRING ("\n XR4: ");
+      ADD_MEM (fpregs[20], 8);
+      ADD_STRING ("  XR5: ");
+      ADD_MEM (fpregs[21], 8);
+      ADD_STRING ("  XR6: ");
+      ADD_MEM (fpregs[22], 8);
+      ADD_STRING ("  XR7: ");
+      ADD_MEM (fpregs[23], 8);
+      ADD_STRING ("\n XR8: ");
+      ADD_MEM (fpregs[24], 8);
+      ADD_STRING ("  XR9: ");
+      ADD_MEM (fpregs[25], 8);
+      ADD_STRING (" XR10: ");
+      ADD_MEM (fpregs[26], 8);
+      ADD_STRING (" XR11: ");
+      ADD_MEM (fpregs[27], 8);
+      ADD_STRING ("\nXR12: ");
+      ADD_MEM (fpregs[28], 8);
+      ADD_STRING (" XR13: ");
+      ADD_MEM (fpregs[29], 8);
+      ADD_STRING (" XR14: ");
+      ADD_MEM (fpregs[30], 8);
+      ADD_STRING (" XR15: ");
+      ADD_MEM (fpregs[31], 8);
+
+      ADD_STRING ("\n\nFPSCR: ");
+      ADD_MEM (fpregs[32], 8);
+      ADD_STRING (" FPUL: ");
+      ADD_MEM (fpregs[33], 8);
+
+      ADD_STRING ("\n");
+    }
+
+  /* Write the stuff out.  */
+  writev (fd, iov, nr);
+}
+
+
+#define REGISTER_DUMP register_dump (fd, &ctx)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigaction.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigaction.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigaction.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigaction.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,150 @@
+/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+/* The difference here is that the sigaction structure used in the
+   kernel is not the same as we use in the libc.  Therefore we must
+   translate it here.  */
+#include <kernel_sigaction.h>
+
+extern int __syscall_sigaction (int, const struct old_kernel_sigaction *,
+				struct old_kernel_sigaction *);
+extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
+				   struct kernel_sigaction *, size_t);
+
+/* The variable is shared between all wrappers around signal handling
+   functions which have RT equivalents.  */
+int __libc_missing_rt_sigs;
+
+#define SA_RESTORER	0x04000000
+
+extern void __default_sa_restorer(void);
+extern void __default_rt_sa_restorer(void);
+
+/* When RT signals are in use we need to use a different return stub.  */
+#ifdef __NR_rt_sigreturn
+#define choose_restorer(flags)					\
+  (flags & SA_SIGINFO) ? __default_rt_sa_restorer		\
+  : __default_sa_restorer
+#else
+#define choose_restorer(flags)					\
+  __default_sa_restorer
+#endif
+
+/* If ACT is not NULL, change the action for SIG to *ACT.
+   If OACT is not NULL, put the old action for SIG in *OACT.  */
+int
+__sigaction (sig, act, oact)
+     int sig;
+     const struct sigaction *act;
+     struct sigaction *oact;
+{
+  struct old_kernel_sigaction k_sigact, k_osigact;
+  int result;
+
+#ifdef __NR_rt_sigaction
+  /* First try the RT signals.  */
+  if (!__libc_missing_rt_sigs)
+    {
+      struct kernel_sigaction kact, koact;
+      int saved_errno = errno;
+
+      if (act)
+	{
+	  kact.k_sa_handler = act->sa_handler;
+	  memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
+	  kact.sa_flags = act->sa_flags;
+# ifdef HAVE_SA_RESTORER
+	  /* If the user specified SA_ONSTACK this means she is trying to
+	     use the old-style stack switching.  Unfortunately this
+	     requires the sa_restorer field so we cannot install our own
+	     handler.  (In fact the user is likely to be out of luck anyway
+	     since the kernel currently only supports stack switching via
+	     the X/Open sigaltstack interface, but we allow for the
+	     possibility that this might change in the future.)  */
+	  if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK))
+	    kact.sa_restorer = act->sa_restorer;
+	  else
+	    {
+	      kact.sa_restorer = choose_restorer (kact.sa_flags);
+	      kact.sa_flags |= SA_RESTORER;
+	    }
+# endif
+	}
+
+      /* XXX The size argument hopefully will have to be changed to the
+	 real size of the user-level sigset_t.  */
+      result = INLINE_SYSCALL (rt_sigaction, 4, sig, act ? &kact : NULL,
+			       oact ? &koact : NULL, _NSIG / 8);
+
+      if (result >= 0 || errno != ENOSYS)
+	{
+	  if (oact && result >= 0)
+	    {
+	      oact->sa_handler = koact.k_sa_handler;
+	      memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
+	      oact->sa_flags = koact.sa_flags;
+# ifdef HAVE_SA_RESTORER
+	      oact->sa_restorer = koact.sa_restorer;
+# endif
+	    }
+	  return result;
+	}
+
+      __set_errno (saved_errno);
+      __libc_missing_rt_sigs = 1;
+    }
+#endif
+
+  if (act)
+    {
+      k_sigact.k_sa_handler = act->sa_handler;
+      k_sigact.sa_mask = act->sa_mask.__val[0];
+      k_sigact.sa_flags = act->sa_flags;
+#ifdef HAVE_SA_RESTORER
+      /* See the comments above for why we test SA_ONSTACK.  */
+      if (k_sigact.sa_flags & (SA_RESTORER | SA_ONSTACK))
+	k_sigact.sa_restorer = act->sa_restorer;
+      else
+	{
+	  k_sigact.sa_restorer = choose_restorer (k_sigact.sa_flags);
+	  k_sigact.sa_flags |= SA_RESTORER;
+	}
+#endif
+    }
+  result = INLINE_SYSCALL (sigaction, 3, sig, act ? &k_sigact : NULL,
+			   oact ? &k_osigact : NULL);
+  if (oact && result >= 0)
+    {
+      oact->sa_handler = k_osigact.k_sa_handler;
+      oact->sa_mask.__val[0] = k_osigact.sa_mask;
+      oact->sa_flags = k_osigact.sa_flags;
+#ifdef HAVE_SA_RESTORER
+      oact->sa_restorer = k_osigact.sa_restorer;
+#endif
+    }
+  return result;
+}
+
+weak_alias (__sigaction, sigaction)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,25 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Philip Blundell <philb@gnu.org>, 1999.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#define SIGCONTEXT int _a2, int _a3, int _a4, struct sigcontext
+
+#define SIGCONTEXT_EXTRA_ARGS _a2, _a3, _a4,
+#define GET_PC(ctx)	((void *) ctx.sc_pc)
+#define GET_FRAME(ctx)	((void *) ctx.sc_regs[14])
+#define GET_STACK(ctx)	((void *) ctx.sc_regs[15])
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/siglist.c glibc-2.1.3/sysdeps/unix/sysv/linux/sh/siglist.c
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/siglist.c	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/siglist.c	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,76 @@
+/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <stddef.h>
+#include <signal.h>
+#include <sizes.h>
+#include <libintl.h>
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+# define SYS_SIGLIST	__new_sys_siglist
+# define SYS_SIGABBREV	__new_sys_sigabbrev
+#else
+# define SYS_SIGLIST	_sys_siglist
+# define SYS_SIGABBREV	_sys_sigabbrev
+#endif
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".data; .globl __old_sys_siglist;  __old_sys_siglist:");
+#endif
+
+const char *const SYS_SIGLIST[NSIG] =
+{
+#define init_sig(sig, abbrev, desc)   [sig] desc,
+#include "siglist.h"
+#undef init_sig
+};
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".type __old_sys_siglist,%object;.size __old_sys_siglist,"
+        OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
+
+asm (".data; .globl __old_sys_sigabbrev;  __old_sys_sigabbrev:");
+#endif
+
+const char *const SYS_SIGABBREV[NSIG] =
+{
+#define init_sig(sig, abbrev, desc)   [sig] abbrev,
+#include "siglist.h"
+#undef init_sig
+};
+
+#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+asm (".type __old_sys_sigabbrev,%object;.size __old_sys_sigabbrev,"
+        OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
+
+extern const char *const *__old_sys_siglist;
+extern const char *const *__old_sys_sigabbrev;
+
+strong_alias (__old_sys_siglist, _old_sys_siglist)
+symbol_version (__old_sys_siglist, _sys_siglist, GLIBC_2.0);
+symbol_version (_old_sys_siglist, sys_siglist, GLIBC_2.0);
+symbol_version (__old_sys_sigabbrev, sys_sigabbrev, GLIBC_2.0);
+
+strong_alias (__new_sys_siglist, _new_sys_siglist)
+default_symbol_version (__new_sys_siglist, _sys_siglist, GLIBC_2.1);
+default_symbol_version (_new_sys_siglist, sys_siglist, GLIBC_2.1);
+default_symbol_version (__new_sys_sigabbrev, sys_sigabbrev, GLIBC_2.1);
+#else
+weak_alias (_sys_siglist, sys_siglist)
+weak_alias (_sys_sigabbrev, sys_sigabbrev)
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigrestorer.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigrestorer.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sigrestorer.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sigrestorer.S	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,42 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* If no SA_RESTORER function was specified by the application we use
+   one of these.  This avoids the need for the kernel to synthesise a return
+   instruction on the stack, which would involve expensive cache flushes. */
+
+ENTRY(__default_sa_restorer)
+	mov.w	2f, $r3
+	trapa	#0x10
+1:	bra	1b
+	 nop
+2:
+	.word	SYS_ify(sigreturn)
+
+#ifdef __NR_rt_sigreturn
+
+ENTRY(__default_rt_sa_restorer)
+	mov.w	2f, $r3
+	trapa	#0x10
+1:	bra	1b
+	 nop
+2:
+	.word	SYS_ify(rt_sigreturn)
+#endif
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/socket.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/socket.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/socket.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/socket.S	Tue May 16 01:17:23 2000
@@ -0,0 +1,116 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#include <socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+	.text
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.  */
+
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+#define PUSHARGS_1	mov.l r4,@-r15
+#define PUSHARGS_2	mov.l r5,@-r15; PUSHARGS_1
+#define PUSHARGS_3	mov.l r6,@-r15; PUSHARGS_2
+#define PUSHARGS_4	mov.l r7,@-r15; PUSHARGS_3
+#define PUSHARGS_5	PUSHARGS_4	/* Caller has already pushed arg 5 */
+#define PUSHARGS_6	PUSHARGS_4	/* Caller has already pushed arg 5,6 */
+
+#define POPARGS_1	add #4,r15
+#define POPARGS_2	add #8,r15
+#define POPARGS_3	add #12,r15
+#define POPARGS_4	add #16,r15
+#define POPARGS_5	add #16,r15
+#define POPARGS_6	add #16,r15 
+
+#ifndef NARGS
+#define NARGS 3			/* If we were called with no wrapper, this is really socket() */
+#endif
+
+.globl __socket
+ENTRY (__socket)
+	/* This will not work in the case of a socket call being interrupted
+	   by a signal.  If the signal handler uses any stack the arguments
+	   to socket will be trashed.  The results of a restart of any
+	   socket call are then unpredictable. */
+
+	/* Push args onto the stack.  */
+	P(PUSHARGS_,NARGS)
+
+        /* Do the system call trap.  */
+	mov #+P(SOCKOP_,socket), r4
+	mov r15, r5
+	mov.l .L1, $r3
+	trapa #0x12
+
+	/* Pop args off the stack */
+	P(POPARGS_,NARGS)
+
+	mov     r0, r1
+	mov	#-12, r2
+	shad	r2, r1
+	not	r1, r1			// r1=0 means r0 = -1 to -4095
+	tst	r1, r1			// i.e. error in linux
+	bf	1f
+
+	mov.l .L2, r1
+#ifdef PIC
+	mov	r0, r4
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+        mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mova	.L2, r0
+	add	r0, r1
+	jsr @r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+	.align 2
+0:
+	.long	_GLOBAL_OFFSET_TABLE_
+#else
+	jmp @r1
+	 nop
+#endif
+1:
+	/* Successful; return the syscall's value.  */
+	rts
+	 nop
+	.align 2
+.L1:
+	.long	SYS_ify(socketcall)
+.L2:
+	.long	PLTJMP(C_SYMBOL_NAME(__syscall_error))
+
+PSEUDO_END (__socket)
+
+weak_alias (__socket, socket)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sys/io.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sys/io.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sys/io.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sys/io.h	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,48 @@
+/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef	_SYS_IO_H
+
+#define	_SYS_IO_H	1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* If TURN_ON is TRUE, request for permission to do direct i/o on the
+   port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
+   permission off for that range.  This call requires root privileges.  */
+extern int ioperm __P ((unsigned long int __from, unsigned long int __num,
+			int __turn_on));
+
+/* Set the I/O privilege level to LEVEL.  If LEVEL is nonzero,
+   permission to access any I/O port is granted.  This call requires
+   root privileges. */
+extern int iopl __P ((int __level));
+
+/* The functions that actually perform reads and writes.  */
+extern unsigned char inb (unsigned long port);
+extern unsigned short inw (unsigned long port);
+extern unsigned long inl (unsigned long port);
+
+extern void outb (unsigned char value, unsigned long port);
+extern void outw (unsigned short value, unsigned long port);
+extern void outl (unsigned long value, unsigned long port);
+
+__END_DECLS
+
+#endif /* _SYS_IO_H */
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sys/user.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sys/user.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sys/user.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sys/user.h	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,30 @@
+/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H	1
+
+#include <features.h>
+
+/* <sys/ptrace.h> and <linux/ptrace.h> both define the PTRACE_* macros.
+   This leads to compilation problems with programs which include both
+   user.h and ptrace.h (eg: GDB).  Do not include <linux/ptrace.h> here. */
+#include <asm/ptrace.h>
+#include <asm/user.h>
+
+#endif  /* sys/user.h */
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/syscalls.list glibc-2.1.3/sysdeps/unix/sysv/linux/sh/syscalls.list
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/syscalls.list	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/syscalls.list	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,52 @@
+# File name	Caller	Syscall name	# args	Strong name	Weak names
+
+s_ioctl		ioctl	ioctl		3	__syscall_ioctl
+s_ipc		msgget	ipc		5	__syscall_ipc
+s_llseek	llseek _llseek		5	__syscall__llseek
+s_chown		chown	chown		3	__syscall_chown
+s_execve	execve execve		3	__syscall_execve
+rt_sigaction	-	rt_sigaction	4	__syscall_rt_sigaction
+rt_sigpending	-	rt_sigpending	2	__syscall_rt_sigpending
+rt_sigprocmask	-	rt_sigprocmask	4	__syscall_rt_sigprocmask
+rt_sigqueueinfo	-	rt_sigqueueinfo	3	__syscall_rt_sigqueueinfo
+rt_sigsuspend	-	rt_sigsuspend	2	__syscall_rt_sigsuspend
+rt_sigtimedwait	-	rt_sigtimedwait	4	__syscall_rt_sigtimedwait
+s_getcwd	getcwd getcwd		2	__syscall_getcwd
+s_getdents	getdents getdents	3	__syscall_getdents
+s_getgroups	getgroups getgroups	2	__syscall_getgroups
+s_getpriority	getpriority getpriority	2	__syscall_getpriority
+getresgid	-	getresgid	3	getresgid
+getresuid	-	getresuid	3	getresuid
+s_poll		poll poll		3	__syscall_poll
+s_pread64	pread64	pread		5	__syscall_pread
+s_ptrace	ptrace	ptrace		4	__syscall_ptrace
+s_pwrite64	pwrite64 pwrite		5	__syscall_pwrite
+s_reboot	reboot	reboot		3	__syscall_reboot
+s_sigaction	sigaction sigaction	3	__syscall_sigaction
+s_sigpending	sigpending sigpending	1	__syscall_sigpending
+s_sigprocmask	sigprocmask sigprocmask	3	__syscall_sigprocmask
+s_sigsuspend	sigsuspend sigsuspend	3	__syscall_sigsuspend
+s_setfsgid	setfsgid setfsgid	1	__syscall_setfsgid
+s_setfsuid	setfsuid setfsuid	1	__syscall_setfsuid
+s_setgid	setgid	setgid		1	__syscall_setgid
+s_setgroups	setgroups setgroups	2	__syscall_setgroups
+s_setregid	setregid setregid	2	__syscall_setregid
+s_setresgid	setresgid setresgid	3	__syscall_setresgid
+s_setresuid	setresuid setresuid	3	__syscall_setresuid
+s_setreuid	setreuid setreuid	2	__syscall_setreuid
+s_setuid	setuid	setuid		1	__syscall_setuid
+s_sysctl	sysctl	_sysctl		1	__syscall__sysctl
+s_ugetrlimit	getrlimit ugetrlimit	2	__syscall_ugetrlimit
+s_ustat		ustat	ustat		2	__syscall_ustat
+sys_fstat	fxstat fstat		2	__syscall_fstat
+sys_lstat	lxstat lstat		2	__syscall_lstat
+sys_mknod	xmknod	mknod		3	__syscall_mknod
+sys_readv	readv	readv		3	__syscall_readv
+sys_stat	xstat stat		2	__syscall_stat
+sys_writev	writev	writev		3	__syscall_writev
+syscall		-	syscall		5	syscall
+s_fstat64	fxstat64 fstat64	2	__syscall_fstat64
+s_ftruncate64	ftruncate64 ftruncate64	3	__syscall_ftruncate64
+s_lstat64	lxstat64 lstat64	2	__syscall_lstat64
+s_truncate64	truncate64 truncate64	3	__syscall_truncate64
+s_stat64	xstat64 stat64		2	__syscall_stat64
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sysdep.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sysdep.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sysdep.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sysdep.S	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,43 @@
+/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* We define errno here, to be consistent with Linux/i386.  */
+
+	.section .bss
+	.globl C_SYMBOL_NAME(errno)
+	.type C_SYMBOL_NAME(errno), @object
+	.size C_SYMBOL_NAME(errno), 4
+C_SYMBOL_NAME(errno):
+	.space	4
+weak_alias (errno, _errno)
+	.text
+
+/* The syscall stubs jump here when they detect an error.
+   The code for Linux is almost identical to the canonical Unix
+   code, except that the error number in R0 is negated.  */
+
+#undef CALL_MCOUNT
+#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0.  */
+
+ENTRY (__syscall_error)
+	neg r4, r0
+
+#define __syscall_error __syscall_error_1
+#include <sysdeps/unix/sh/sysdep.S>
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sysdep.h glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sysdep.h
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/sysdep.h	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/sysdep.h	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,143 @@
+/* Copyright (C) 1992, 93, 95-99, 2000 Free Software Foundation,
+   Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
+   Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _LINUX_SH_SYSDEP_H
+#define _LINUX_SH_SYSDEP_H 1
+
+/* There is some commonality.  */
+#include <sysdeps/unix/sh/sysdep.h>
+
+/* For Linux we can use the system call table in the header file
+	/usr/include/asm/unistd.h
+   of the kernel.  But these symbols do not follow the SYS_* syntax
+   so we have to redefine the `SYS_ify' macro here.  */
+#undef SYS_ify
+#define SYS_ify(syscall_name)	(__NR_##syscall_name)
+
+
+#ifdef __ASSEMBLER__
+
+/* Linux uses a negative return value to indicate syscall errors,
+   unlike most Unices, which use the condition codes' carry flag.
+
+   Since version 2.1 the return value of a system call might be
+   negative even if the call succeeded.  E.g., the `lseek' system call
+   might return a large offset.  Therefore we must not anymore test
+   for < 0, but test for a real error by making sure the value in R0
+   is a real error number.  Linus said he will make sure the no syscall
+   returns a value in -1 .. -4095 as a valid result so we can savely
+   test with -4095.  */
+
+#define _IMM12 #-12
+#undef	PSEUDO
+#ifdef PIC
+#define	PSEUDO(name, syscall_name, args) \
+ .text; \
+ ENTRY (name); \
+    DO_CALL (args, syscall_name); \
+    mov r0,r1; \
+    mov _IMM12,r2; \
+    shad r2,r1; \
+    not r1,r1; \
+    tst r1,r1; \
+    bf 1f; \
+    mov r0,r4; \
+    mov.l r12,@-r15; \
+    sts.l pr,@-r15; \
+    mov.l 0f,r12; \
+    mova 0f,r0; \
+    add r0,r12; \
+    mov.l 2f,r1; \
+    mova 2f,r0; \
+    add r0,r1; \
+    jsr @r1; \
+     nop; \
+    lds.l @r15+,pr; \
+    rts; \
+     mov.l @r15+,r12; \
+    .align 2; \
+ 2: .long PLTJMP(C_SYMBOL_NAME(__syscall_error)); \
+ 0: .long _GLOBAL_OFFSET_TABLE_; \
+ 1:
+#else
+#define	PSEUDO(name, syscall_name, args) \
+ .text; \
+ ENTRY (name); \
+    DO_CALL (args, syscall_name); \
+    mov r0,r1; \
+    mov _IMM12,r2; \
+    shad r2,r1; \
+    not r1,r1; \
+    tst r1,r1; \
+    bf 1f; \
+    mov.l 2f,r1; \
+    jmp @r1; \
+     mov r0, r4; \
+    .align 2; \
+ 2: .long PLTJMP(C_SYMBOL_NAME(__syscall_error)); \
+ 1:
+#endif
+
+#undef	PSEUDO_END
+#define	PSEUDO_END(name) \
+  SYSCALL_ERROR_HANDLER \
+  END (name)
+
+#define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
+
+#define SYSCALL_ARGS0	
+#define SYSCALL_ARGS1
+#define SYSCALL_ARGS2
+#define SYSCALL_ARGS3
+#define SYSCALL_ARGS4
+#define SYSCALL_ARGS5	mov.l @$r15, $r0
+#define SYSCALL_ARGS6	SYSCALL_ARGS5; mov.l @(4,$r15), $r1
+#define SYSCALL_ARGS7	SYSCALL_ARGS6; mov.l @(8,$r15), $r2
+
+#define SYSCALL_INST0	trapa #0x10
+#define SYSCALL_INST1	trapa #0x11
+#define SYSCALL_INST2	trapa #0x12
+#define SYSCALL_INST3	trapa #0x13
+#define SYSCALL_INST4	trapa #0x14
+#define SYSCALL_INST5	trapa #0x15
+#define SYSCALL_INST6	trapa #0x16
+#define SYSCALL_INST7	trapa #0x17
+
+#undef	DO_CALL
+#define DO_CALL(args, syscall_name) \
+    SYSCALL_ARGS##args;	\
+    mov.l 1f, $r3; \
+    SYSCALL_INST##args;	\
+    bra 2f; \
+     nop; \
+    .align 2; \
+ 1: .long SYS_ify(syscall_name); \
+ 2:
+
+#else /* not __ASSEMBLER__ */
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...) \
+  __syscall_##name(args)
+
+#endif	/* __ASSEMBLER__ */
+
+#endif /* linux/sh/sysdep.h */
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/vfork.S glibc-2.1.3/sysdeps/unix/sysv/linux/sh/vfork.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/sh/vfork.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/sh/vfork.S	Thu Apr 27 21:26:38 2000
@@ -0,0 +1,112 @@
+/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+
+#ifdef __NR_vfork
+	mov	#+__NR_vfork, $r3
+	trapa	#0x10
+	mov     r0, r1
+	mov	#-12, r2
+	shad	r2, r1
+	not	r1, r1			// r1=0 means r0 = -1 to -4095
+	tst	r1, r1			// i.e. error in linux
+	bf	1f
+	mov.w	.L1, r1
+	cmp/eq	r1, r0
+	bt	2f
+	mov.l	.L2, r1
+#ifdef PIC
+	mov	r0, r4
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+	mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mova	.L2, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+	.align	2
+0:
+	.long	_GLOBAL_OFFSET_TABLE_
+#else
+	jmp	@r1
+	 mov	r0, r4
+#endif
+.L1:
+	.word	-ENOSYS
+1:
+	rts
+	 nop
+2:
+#endif
+
+	/* If we don't have vfork, fork is close enough.  */
+	mov	#+__NR_fork, $r3
+	trapa	#0x10
+	mov     r0, r1
+	mov	#-12, r2
+	shad	r2, r1
+	not	r1, r1			// r1=0 means r0 = -1 to -4095
+	tst	r1, r1			// i.e. error in linux
+	bf	1f
+	mov.l	.L2, r1
+#ifdef PIC
+	mov	r0, r4
+	mov.l	r12, @-r15
+	sts.l	pr, @-r15
+        mov.l	0f, r12
+	mova	0f, r0
+	add	r0, r12
+	mova	.L2, r0
+	add	r0, r1
+	jsr	@r1
+	 nop
+	lds.l	@r15+, pr
+	rts
+	 mov.l	@r15+, r12
+	.align	2
+0:
+	.long	_GLOBAL_OFFSET_TABLE_
+#else
+	jmp	@r1
+	 mov	r0, r4
+#endif
+	.align	2
+.L2:
+	.long	PLTJMP(C_SYMBOL_NAME(__syscall_error))
+1:
+	rts
+	 nop
+	
+PSEUDO_END (__vfork)
+
+weak_alias (__vfork, vfork)
diff -u -r -N glibc-2.1.3-original/sysdeps/unix/sysv/linux/syscall.S glibc-2.1.3/sysdeps/unix/sysv/linux/syscall.S
--- glibc-2.1.3-original/sysdeps/unix/sysv/linux/syscall.S	Thu Jan  1 09:00:00 1970
+++ glibc-2.1.3/sysdeps/unix/sysv/linux/syscall.S	Sun Mar 12 04:09:10 2000
@@ -0,0 +1,33 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software;  you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation;  either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY;  without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library;  see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* Please consult the file sysdeps/unix/sysv/linux/sh/sysdep.h for
+   more information about the value -4095 used below.*/
+
+	.text
+ENTRY(__syscall)
+
+	/* XXX should be implemented !! */
+	rts			/* Return to caller.  */
+	nop
+
+PSEUDO_END (__syscall)
+
+weak_alias (__syscall, clone)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]