diff options
| -rw-r--r-- | libc/sysdeps/linux/sparc/Makefile | 10 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/__longjmp.S | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/bits/syscalls.h | 193 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/fork.S | 51 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/rem.S | 4 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/sdiv.S | 4 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/setjmp.S | 37 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/sysdep.h | 146 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/udiv.S | 4 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/umul.S | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/urem.S | 4 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sparc/vfork.S | 48 | ||||
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/sparc/pt-machine.h (renamed from libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h) | 0 | ||||
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/sparc/sigcontextinfo.h (renamed from libpthread/linuxthreads/sysdeps/sparc/sparc32/sigcontextinfo.h) | 0 | ||||
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h | 77 | ||||
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/sparc/sparc64/sigcontextinfo.h | 32 | 
16 files changed, 293 insertions, 321 deletions
diff --git a/libc/sysdeps/linux/sparc/Makefile b/libc/sysdeps/linux/sparc/Makefile index bce1752dc..aecb3bd16 100644 --- a/libc/sysdeps/linux/sparc/Makefile +++ b/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 diff --git a/libc/sysdeps/linux/sparc/__longjmp.S b/libc/sysdeps/linux/sparc/__longjmp.S index 2d568d381..d6e04bd1e 100644 --- a/libc/sysdeps/linux/sparc/__longjmp.S +++ b/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 diff --git a/libc/sysdeps/linux/sparc/bits/syscalls.h b/libc/sysdeps/linux/sparc/bits/syscalls.h index 62541b873..ddd8e5f6b 100644 --- a/libc/sysdeps/linux/sparc/bits/syscalls.h +++ b/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 */ diff --git a/libc/sysdeps/linux/sparc/fork.S b/libc/sysdeps/linux/sparc/fork.S index 6bab58c81..c66856bef 100644 --- a/libc/sysdeps/linux/sparc/fork.S +++ b/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; diff --git a/libc/sysdeps/linux/sparc/rem.S b/libc/sysdeps/linux/sparc/rem.S index 52bf167a4..3da857e99 100644 --- a/libc/sysdeps/linux/sparc/rem.S +++ b/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; diff --git a/libc/sysdeps/linux/sparc/sdiv.S b/libc/sysdeps/linux/sparc/sdiv.S index 678a19413..8fdb7daf8 100644 --- a/libc/sysdeps/linux/sparc/sdiv.S +++ b/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; diff --git a/libc/sysdeps/linux/sparc/setjmp.S b/libc/sysdeps/linux/sparc/setjmp.S index 30051418c..e01e73b04 100644 --- a/libc/sysdeps/linux/sparc/setjmp.S +++ b/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   diff --git a/libc/sysdeps/linux/sparc/sysdep.h b/libc/sysdeps/linux/sparc/sysdep.h deleted file mode 100644 index 1553ff06d..000000000 --- a/libc/sysdeps/linux/sparc/sysdep.h +++ /dev/null @@ -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; - diff --git a/libc/sysdeps/linux/sparc/udiv.S b/libc/sysdeps/linux/sparc/udiv.S index e6f143118..85eeb40fc 100644 --- a/libc/sysdeps/linux/sparc/udiv.S +++ b/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; diff --git a/libc/sysdeps/linux/sparc/umul.S b/libc/sysdeps/linux/sparc/umul.S index d26ae4382..4f38d78eb 100644 --- a/libc/sysdeps/linux/sparc/umul.S +++ b/libc/sysdeps/linux/sparc/umul.S @@ -14,7 +14,7 @@   *	bnz	overflow	(or tnz)   */ -#include <sysdep.h> +#include <sys/syscall.h>  .global   .umul; diff --git a/libc/sysdeps/linux/sparc/urem.S b/libc/sysdeps/linux/sparc/urem.S index 2e236b151..890532141 100644 --- a/libc/sysdeps/linux/sparc/urem.S +++ b/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 diff --git a/libc/sysdeps/linux/sparc/vfork.S b/libc/sysdeps/linux/sparc/vfork.S index 2aef09ab1..0df960d65 100644 --- a/libc/sysdeps/linux/sparc/vfork.S +++ b/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; diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h index 69af8579a..69af8579a 100644 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h +++ b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sigcontextinfo.h b/libpthread/linuxthreads/sysdeps/sparc/sigcontextinfo.h index 2c2770d07..2c2770d07 100644 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sigcontextinfo.h +++ b/libpthread/linuxthreads/sysdeps/sparc/sigcontextinfo.h diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h deleted file mode 100644 index 5560003fc..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h +++ /dev/null @@ -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) diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/sigcontextinfo.h b/libpthread/linuxthreads/sysdeps/sparc/sparc64/sigcontextinfo.h deleted file mode 100644 index 47e0d27f8..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/sigcontextinfo.h +++ /dev/null @@ -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))  | 
