Browse Source

Rework sparc architecture support so it will compile
and run. Seems to be working...
-Erik

Eric Andersen 22 years ago
parent
commit
f980a783a3

+ 5 - 5
libc/sysdeps/linux/sparc/Makefile

@@ -25,8 +25,8 @@ TOPDIR=../../../../
 include $(TOPDIR)Rules.mak
 ASFLAGS=$(CFLAGS)
 
-CRT0=crt0.c
-CRT0_OBJ=$(patsubst %.c,%.o, $(CRT0))
+CRT0_SRC = crt0.c
+CRT0_OBJ = crt0.o crt1.o
 
 SSRC=__longjmp.S fork.S vfork.S clone.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
 	urem.S udiv.S umul.S sdiv.S rem.S
@@ -45,10 +45,10 @@ $(LIBC): ar-target
 
 ar-target: $(OBJS) $(CRT0_OBJ)
 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
-	cp $(CRT0_OBJ) $(TOPDIR)lib/$(CRT0_OBJ)
+	cp $(CRT0_OBJ) $(TOPDIR)lib/
 
-$(CRT0_OBJ): %.o : %.c
-	$(CC) $(CFLAGS) -c $< -o $@
+$(CRT0_OBJ): $(CRT0_SRC)
+	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
 	$(STRIPTOOL) -x -R .note -R .comment $*.o
 
 $(SOBJS): %.o : %.S

+ 1 - 1
libc/sysdeps/linux/sparc/__longjmp.S

@@ -16,7 +16,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 #define _ASM 1
 #define _SETJMP_H

+ 187 - 6
libc/sysdeps/linux/sparc/bits/syscalls.h

@@ -4,16 +4,197 @@
 # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
 #endif
 
-#include <features.h>
-
-/* Do something very evil for now.  Until we create our own syscall
- * macros, short circuit bits/sysnum.h  and use asm/unistd.h instead */
-#include <asm/unistd.h>
-
 /* This includes the `__NR_<name>' syscall numbers taken from the Linux kernel
  * header files.  It also defines the traditional `SYS_<name>' macros for older
  * programs.  */
 #include <bits/sysnum.h>
 
+#ifndef __set_errno
+# define __set_errno(val) (*__errno_location ()) = (val)
+#endif
+
+/*
+   macros taken from glibc-2.3/sysdeps/unix/sysv/linux/sparc/sysdep.h
+   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
+*/
+
+#ifndef __ASSEMBLER__
+
+#undef _syscall0
+#define _syscall0(type,name) \
+type name(void) \
+{ \
+return (type) (INLINE_SYSCALL(name, 0)); \
+}
+
+#undef _syscall1
+#define _syscall1(type,name,type1,arg1) \
+type name(type1 arg1) \
+{ \
+return (type) (INLINE_SYSCALL(name, 1, arg1)); \
+}
+
+#undef _syscall2
+#define _syscall2(type,name,type1,arg1,type2,arg2) \
+type name(type1 arg1,type2 arg2) \
+{ \
+return (type) (INLINE_SYSCALL(name, 2, arg1, arg2)); \
+}
+
+#undef _syscall3
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+type name(type1 arg1,type2 arg2,type3 arg3) \
+{ \
+return (type) (INLINE_SYSCALL(name, 3, arg1, arg2, arg3)); \
+}
+
+#undef _syscall4
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
+{ \
+return (type) (INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4)); \
+} 
+
+#undef _syscall5
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
+	  type5,arg5) \
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
+{ \
+return (type) (INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5)); \
+}
+
+#undef _syscall6
+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
+	  type5,arg5,type6,arg6) \
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6) \
+{ \
+return (type) (INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6)); \
+}
+
+#undef _syscall7
+#define _syscall7(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
+	  type5,arg5,type6,arg6,type7,arg7) \
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6,type7 arg7) \
+{ \
+return (type) (INLINE_SYSCALL(name, 7, arg1, arg2, arg3, arg4, arg5, arg6, arg7)); \
+}
+
+#define __SYSCALL_STRING						\
+	"ta	0x10;"							\
+	"bcs	2f;"							\
+	" nop;"								\
+	"1:"								\
+	".subsection 2;"						\
+	"2:"								\
+	"save	%%sp, -192, %%sp;"					\
+	"call	__errno_location;"					\
+	" nop;"								\
+	"st	%%i0,[%%o0];"						\
+	"ba	1b;"							\
+	" restore %%g0, -1, %%o0;"					\
+	".previous;"
+
+#define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g7",		\
+	"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",			\
+	"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",		\
+	"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",		\
+	"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",		\
+	"cc", "memory"
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...) _INLINE_SYSCALL##nr(name, args)
+
+#define _INLINE_SYSCALL0(name,dummy...)					\
+({									\
+	register long __o0 __asm__ ("o0");				\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1) :					\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL1(name,arg1)						\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0) :			\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL2(name,arg1,arg2)					\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __o1 __asm__ ("o1") = (long)(arg2);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1) :		\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL3(name,arg1,arg2,arg3)					\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __o1 __asm__ ("o1") = (long)(arg2);		\
+	register long __o2 __asm__ ("o2") = (long)(arg3);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2) :					\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL4(name,arg1,arg2,arg3,arg4)				\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __o1 __asm__ ("o1") = (long)(arg2);		\
+	register long __o2 __asm__ ("o2") = (long)(arg3);		\
+	register long __o3 __asm__ ("o3") = (long)(arg4);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3) :			\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL5(name,arg1,arg2,arg3,arg4,arg5)			\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __o1 __asm__ ("o1") = (long)(arg2);		\
+	register long __o2 __asm__ ("o2") = (long)(arg3);		\
+	register long __o3 __asm__ ("o3") = (long)(arg4);		\
+	register long __o4 __asm__ ("o4") = (long)(arg5);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#define _INLINE_SYSCALL6(name,arg1,arg2,arg3,arg4,arg5,arg6)			\
+({									\
+	register long __o0 __asm__ ("o0") = (long)(arg1);		\
+	register long __o1 __asm__ ("o1") = (long)(arg2);		\
+	register long __o2 __asm__ ("o2") = (long)(arg3);		\
+	register long __o3 __asm__ ("o3") = (long)(arg4);		\
+	register long __o4 __asm__ ("o4") = (long)(arg5);		\
+	register long __o5 __asm__ ("o5") = (long)(arg6);		\
+	register long __g1 __asm__ ("g1") = __NR_##name;		\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3), "r" (__o4),		\
+			  "r" (__o5) :					\
+			  __SYSCALL_CLOBBERS);				\
+	__o0;								\
+})
+
+#endif /* __ASSEMBLER__ */
 #endif /* _BITS_SYSCALLS_H */
 

+ 26 - 25
libc/sysdeps/linux/sparc/fork.S

@@ -1,5 +1,6 @@
-/* Copyright (C) 1991, 92, 94, 95, 97, 99 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
+   Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -16,31 +17,31 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <sysdep.h>
+/* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */
+
+#include <sys/syscall.h>
 
 .text;  
-.global    fork;
-.align 4;      
-fork: ;
-.type   fork  ,@function; ;      
-
-	mov	2, %g1 ; 
-	ta	0x10;
-	bcc,a 9000f;
-	nop;
-	save    %sp,-96,%sp;
-	call __errno_location;
-	nop;    
-	st	%i0,[%o0];
-	jmpl    %i7+8,%g0;
-	restore %g0,-1,%o0; ;
-	9000:;
-
-	/* %o1 is now 0 for the parent and 1 for the child.  Decrement it to
-	   make it -1 (all bits set) for the parent, and 0 (no bits set)
-	   for the child.  Then AND it with %o0, so the parent gets
-	   %o0&-1==pid, and the child gets %o0&0==0.  */
-	sub %o1, 1, %o1
+.global	fork;
+.align 4;
+.type	fork,@function;
+
+fork:
+	mov __NR_fork, %g1
+	ta	0x10
+	bcc,a	9000f
+	nop
+	save    %sp,-96,%sp
+	call __errno_location
+	nop
+	st	%i0,[%o0]
+	jmpl	%i7+8,%g0
+	restore	%g0,-1,%o0
+
+9000:
+	sub	%o1, 1, %o1
 	retl
-	and %o0, %o1, %o0
+	and	%o0, %o1, %o0
+
+.size fork,.-fork;
 

+ 2 - 2
libc/sysdeps/linux/sparc/rem.S

@@ -37,7 +37,7 @@
 
 
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 
 .global   .rem;
@@ -364,4 +364,4 @@
 	retl
 	mov %o3, %o0
 
-END(.rem)
+.size .rem,.-.rem;

+ 2 - 2
libc/sysdeps/linux/sparc/sdiv.S

@@ -37,7 +37,7 @@
 
 
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 .global   .div;
 .align 4;
@@ -363,4 +363,4 @@
 	retl
 	mov %o2, %o0
 
-END(.div)
+.size .div,.-.div;

+ 30 - 7
libc/sysdeps/linux/sparc/setjmp.S

@@ -16,22 +16,43 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 #define _ASM 1
 #define _SETJMP_H
 #include <bits/setjmp.h>
+#define ST_FLUSH_WINDOWS 3
 
-ENTRY(_setjmp)
+.global   _setjmp;
+.align 4;
+.type  _setjmp ,@function; 
+
+_setjmp: 
 	b	1f
 	 set	0, %o1
-END(_setjmp)
+.size _setjmp,.-_setjmp;
+
+
+
+
+
+
+.global   setjmp;
+.align 4;
+.type  setjmp ,@function; 
 
-ENTRY(setjmp)
+setjmp: 
 	set	1, %o1
-END(setjmp)
+.size setjmp,.-setjmp;
 
-ENTRY (__sigsetjmp)
+
+
+
+.global   __sigsetjmp;
+.align 4;
+.type  __sigsetjmp ,@function; 
+
+__sigsetjmp: 
 1:
 	/* Save our PC, SP and FP.  Save the signal mask if requested with
 	   a tail-call for simplicity; it always returns zero.  */
@@ -44,7 +65,9 @@ ENTRY (__sigsetjmp)
 	mov	%o7, %g1
 	call	__sigjmp_save
 	 mov	%g1, %o7
-END(__sigsetjmp)
+.size __sigsetjmp,.-__sigsetjmp;
+
+
 
 .weak   _setjmp    
 .weak   setjmp  

+ 0 - 146
libc/sysdeps/linux/sparc/sysdep.h

@@ -1,146 +0,0 @@
-/* Copyright (C) 1991, 1992 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <sys/syscall.h>
-
-/* Not that using a `PASTE' macro loses.  */
-#ifdef	__STDC__
-
-#ifdef __ELF__
-
-#define SYSCALL_WEAK_ALIAS(alias,orig) \
-	.weak alias; \
-	alias=__libc_##orig
-
-/*
-#ifdef _POSIX_THREADS
-*/
-
-#if 1
-
-#ifdef PTHREAD_KERNEL
-
-/* Use the regular ELF conventions about underscores, and provide the
-   weak symbol, as required */
-#define	SYSCALL__(name,args)	PSEUDO (__machdep_sys_##name, name, args) \
-.weak machdep_sys_##name; \
-  machdep_sys_##name = __machdep_sys_##name; \
-.type __machdep_sys_##name,@function; \
-.type machdep_sys_##name,@function; \
-.L__machdep_sys_##name##end: .size __machdep_sys_##name,.L__machdep_sys_##name##end - __machdep_sys_##name
-
-#define	SYSCALL(name,args)	PSEUDO (__machdep_sys_##name, name, args) \
-.weak machdep_sys_##name; \
-  machdep_sys_##name = __machdep_sys_##name; \
-.type __machdep_sys_##name,@function; \
-.type machdep_sys_##name,@function; \
-.L__machdep_sys_##name##end: .size __machdep_sys_##name,.L__machdep_sys_##name##end - __machdep_sys_##name
-
-#else /* PTHREAD_KERNEL */
-
-/* Use the regular ELF conventions about underscores, and provide the
-   weak symbol, as required */
-#define	SYSCALL__(name,args)	PSEUDO (__libc_##name, name, args) \
-.weak __##name; \
-.weak name;  \
-  __##name = __libc_##name; \
-  name = __libc_##name; \
-.type __libc_##name,@function; \
-.type name,@function; \
-.type __##name,@function; \
-.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
-
-#define	SYSCALL(name,args)	PSEUDO (__libc_##name, name, args) \
-.weak name; \
-  name = __libc_##name; \
-.type __libc_##name,@function; \
-.type name,@function; \
-.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
-
-#endif /* PTHREAD_KERNEL */
-
-#else /* _POSIX_THREADS */
-
-/* Use the regular ELF conventions about underscores, and provide the
-   weak symbol, as required */
-#define	SYSCALL__(name,args)	PSEUDO (__libc_##name, name, args) \
-.weak name;  \
-  __##name = __libc_##name; \
-  name = __libc_##name; \
-.type __libc_##name,@function; \
-.type name,@function; \
-.type __##name,@function; \
-.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
-
-#define	SYSCALL(name,args)	PSEUDO (__libc_##name, name, args) \
-  name = __libc_##name; \
-.type __libc_##name,@function; \
-.type name,@function; \
-.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
-
-#endif /* _POSIX_THREADS */
-
-#else /* __ELF__ */
-
-#define SYSCALL_WEAK_ALIAS(alias,orig)
-
-/* Regular a.out definition */
-#define	SYSCALL__(name,args)	PSEUDO (__##name, name, args)
-#define	SYSCALL(name,args)	PSEUDO (name, name, args)
-
-#endif /* __ELF__ */
-
-#else  /* __STDC__ */
-
-#define	SYSCALL__(name,args)	PSEUDO (__/**/name, name, args)
-#define	SYSCALL(name,args)	PSEUDO (name, name, args)
-
-#endif /* __STDC__ */
-
-/* Machine-dependent sysdep.h files are expected to define the macro
-   PSEUDO (function_name, syscall_name) to emit assembly code to define the
-   C-callable function FUNCTION_NAME to do system call SYSCALL_NAME.
-   r0 and r1 are the system call outputs.  movl should be defined as
-   an instruction such that "movl r1, r0" works.  ret should be defined
-   as the return instruction.  */
-
-
-#if !defined(HAVE_GNU_LD) && !defined (__ELF__)
-#define	 ___errno	_errno
-#endif
-
-#define	HAVE_SYSCALLS
-
-#define ENTRY(name)
-	.global name;
-	.align 4;
-
-#define END(name)
-	.size name,.-name;
-
-#define PSEUDO(name, syscall_name, args)			\
-	.text;							\
-	ENTRY(name);						\
-	ta 0x10;						\
-	bcc,a 9000f;						\
-	nop;							\
-9000:;
-
-#define PSEUDO_END(name)			\
-	.size name,.-name;
-

+ 2 - 2
libc/sysdeps/linux/sparc/udiv.S

@@ -37,7 +37,7 @@
 
 
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 .global   .udiv;
 .align 4;
@@ -345,4 +345,4 @@
 	retl
 	mov %o2, %o0
 
-END(.udiv)
+.size .udiv,.-.udiv;

+ 1 - 1
libc/sysdeps/linux/sparc/umul.S

@@ -14,7 +14,7 @@
  *	bnz	overflow	(or tnz)
  */
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 
 .global   .umul;

+ 2 - 2
libc/sysdeps/linux/sparc/urem.S

@@ -37,7 +37,7 @@
 
 
 
-#include <sysdep.h>
+#include <sys/syscall.h>
 
 
 .global   .urem;
@@ -347,4 +347,4 @@
 	retl
 	mov %o3, %o0
 
-END(.urem)
+.size  .urem , . -.urem

+ 35 - 13
libc/sysdeps/linux/sparc/vfork.S

@@ -3,28 +3,50 @@
    Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 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.
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 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.
+   Lesser 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.  */
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 /* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */
 
-#include "sysdep.h"
+#include <sys/syscall.h>
 
-PSEUDO (__vfork, vfork, 0)
+#ifndef __NR_vfork
+/* uClinux-2.0 only has fork which is really vfork */
+#define __NR_vfork __NR_fork
+#endif
+
+.text;  
+.global	vfork;
+.align 4;
+.type	vfork,@function;
+
+vfork:
+	mov __NR_vfork, %g1
+	ta	0x10
+	bcc,a	9000f
+	nop
+	save    %sp,-96,%sp
+	call __errno_location
+	nop
+	st	%i0,[%o0]
+	jmpl	%i7+8,%g0
+	restore	%g0,-1,%o0
+
+9000:
 	sub	%o1, 1, %o1
 	retl
-	 and	%o0, %o1, %o0
+	and	%o0, %o1, %o0
+
+.size vfork,.-vfork;
 
-.size __vfork,.-__vfork
-.weak vfork; vfork = __vfork;

+ 0 - 0
libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h → libpthread/linuxthreads/sysdeps/sparc/pt-machine.h


+ 0 - 0
libpthread/linuxthreads/sysdeps/sparc/sparc32/sigcontextinfo.h → libpthread/linuxthreads/sysdeps/sparc/sigcontextinfo.h


+ 0 - 77
libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h

@@ -1,77 +0,0 @@
-/* Machine-dependent pthreads configuration and inline functions.
-   Sparc v9 version.
-   Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson <rth@tamu.edu>.
-
-   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__("ldstub %1,%0"
-	: "=r"(ret), "=m"(*spinlock) : "m"(*spinlock));
-
-  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__ ("%sp");
-
-
-/* Registers %g6 and %g7 are reserved by the ABI for "system use".  It
-   happens that Solaris uses %g6 for the thread pointer -- we do the same.  */
-struct _pthread_descr_struct;
-register struct _pthread_descr_struct *__thread_self __asm__("%g6");
-
-/* Return the thread descriptor for the current thread.  */
-#define THREAD_SELF  __thread_self
-
-/* Initialize the thread-unique value.  */
-#define INIT_THREAD_SELF(descr, nr)  (__thread_self = (descr))
-
-
-/* Compare-and-swap for semaphores. */
-
-#define HAS_COMPARE_AND_SWAP
-PT_EI int
-__compare_and_swap (long int *p, long int oldval, long int newval)
-{
-  long int readval;
-
-  __asm__ __volatile__ ("casx	[%4], %2, %0"
-			: "=r"(readval), "=m"(*p)
-			: "r"(oldval), "m"(*p), "r"(p), "0"(newval));
-
-  return readval == oldval;
-}
-
-/* Access to data in the thread descriptor is easy.  */
-#define THREAD_GETMEM(descr, member) __thread_self->member
-#define THREAD_GETMEM_NC(descr, member) __thread_self->member
-#define THREAD_SETMEM(descr, member, value) __thread_self->member = (value)
-#define THREAD_SETMEM_NC(descr, member, value) __thread_self->member = (value)

+ 0 - 32
libpthread/linuxthreads/sysdeps/sparc/sparc64/sigcontextinfo.h

@@ -1,32 +0,0 @@
-/* Copyright (C) 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef STACK_BIAS
-#define STACK_BIAS 2047
-#endif
-#define SIGCONTEXT struct sigcontext *
-#define SIGCONTEXT_EXTRA_ARGS
-#define GET_PC(__ctx)	((void *) ((__ctx)->sigc_regs.tpc))
-#define ADVANCE_STACK_FRAME(__next) \
-	((void *) (((unsigned long *) (((unsigned long int) (__next))     \
-					   + STACK_BIAS))+14))
-#define GET_STACK(__ctx)	((void *) ((__ctx)->sigc_regs.u_regs[14]))
-#define GET_FRAME(__ctx)	ADVANCE_STACK_FRAME (GET_STACK (__ctx))
-#define CALL_SIGHANDLER(handler, signo, ctx) \
-  (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))