diff --git a/lib/libc/arch/sparc64/gen/__sigsetjmp14.S b/lib/libc/arch/sparc64/gen/__sigsetjmp14.S index b4e4047af2dd..9adb5f0ce2c9 100644 --- a/lib/libc/arch/sparc64/gen/__sigsetjmp14.S +++ b/lib/libc/arch/sparc64/gen/__sigsetjmp14.S @@ -1,4 +1,4 @@ -/* $NetBSD: __sigsetjmp14.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */ +/* $NetBSD: __sigsetjmp14.S,v 1.5 2002/05/07 01:34:21 eeh Exp $ */ /* * Copyright (c) 1995 Paul Kranenburg * All rights reserved. @@ -33,45 +33,76 @@ #include "SYS.h" #ifdef PIC +#ifdef BIGPIC + +ENTRY(__sigsetjmp14) + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + st %o1,[%o0+0x48] ! jmpbuf[JBLEN] + sethi %hi(_C_LABEL(__setjmp14)), %o2 + sethi %hi(_C_LABEL(_setjmp)), %o3 + or %o2, %lo(_C_LABEL(__setjmp14)), %o2 + or %o3, %lo(_C_LABEL(_setjmp)), %o3 + brnz %o1, 1f + ldx [%g1+%o3], %o3 ! if (%o1 != 0) goto _setjmp; + ldx [%g1+%o2], %o3 ! else goto __setjmp; +1: + jmp %o3 + nop + +ENTRY(__siglongjmp14) + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + ld [%o0+0x48], %o2 ! jmpbuf[JBLEN] + sethi %hi(_C_LABEL(__longjmp14)), %o3 + sethi %hi(_C_LABEL(_longjmp)), %o4 + or %o3, %lo(_C_LABEL(__longjmp14)), %o3 + or %o4, %lo(_C_LABEL(_longjmp)), %o4 + brnz,a %o2, 1f + ldx [%g1+%o4], %o4 ! if (%o2 != 0) goto _longjmp; + ldx [%g1+%o3], %o4 ! else goto __longjmp; +1: + jmp %o4 + nop + unimp 0 +#else ENTRY(__sigsetjmp14) - PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE - cmp %o1,0 - st %o1,[%o0+0x48] ! jmpbuf[JBLEN] - bne,a 1f - ldx [%g1+_C_LABEL(__setjmp14)], %g1 ! if (%o1 != 0) goto _setjmp; - ldx [%g1+_C_LABEL(_setjmp)], %g1 ! else goto __setjmp; + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + cmp %o1,0 + st %o1,[%o0+0x48] ! jmpbuf[JBLEN] + bne,a 1f + ldx [%g1+_C_LABEL(__setjmp14)], %g1 ! if (%o1 != 0) goto _setjmp; + ldx [%g1+_C_LABEL(_setjmp)], %g1 ! else goto __setjmp; 1: jmp %g1 nop ENTRY(__siglongjmp14) - PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE - ld [%o0+0x48],%o2 ! jmpbuf[JBLEN] - cmp %o2,0 - bne,a 1f - ldx [%g1+_C_LABEL(__longjmp14)], %g1 ! if (%g2 != 0) goto _longjmp; - ldx [%g1+_C_LABEL(_longjmp)], %g1 ! else goto __longjmp; + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + ld [%o0+0x48],%o2 ! jmpbuf[JBLEN] + cmp %o2,0 + bne,a 1f + ldx [%g1+_C_LABEL(__longjmp14)], %g1 ! if (%g1 != 0) goto _longjmp; + ldx [%g1+_C_LABEL(_longjmp)], %g1 ! else goto __longjmp; 1: jmp %g1 nop unimp 0 - +#endif /* BIGPIC */ #else /* PIC */ ENTRY(__sigsetjmp14) - cmp %o1,0 - be _C_LABEL(_setjmp) - st %o1,[%o0+0x48] ! jmpbuf[JBLEN] - ba,a _C_LABEL(__setjmp14) + cmp %o1,0 + be _C_LABEL(_setjmp) + st %o1,[%o0+0x48] ! jmpbuf[JBLEN] + ba,a _C_LABEL(__setjmp14) unimp 0 ENTRY(__siglongjmp14) - ld [%o0+0x48],%g1 - cmp %g1,0 - be _C_LABEL(_longjmp) + ld [%o0+0x48],%g1 + cmp %g1,0 + be _C_LABEL(_longjmp) nop - ba,a _C_LABEL(__longjmp14) + ba,a _C_LABEL(__longjmp14) unimp 0 #endif /* PIC */ diff --git a/lib/libc/arch/sparc64/gen/sigsetjmp.S b/lib/libc/arch/sparc64/gen/sigsetjmp.S index 4a2fc47c47eb..dbe293cd210f 100644 --- a/lib/libc/arch/sparc64/gen/sigsetjmp.S +++ b/lib/libc/arch/sparc64/gen/sigsetjmp.S @@ -1,4 +1,4 @@ -/* $NetBSD: sigsetjmp.S,v 1.5 2000/08/28 00:45:59 eeh Exp $ */ +/* $NetBSD: sigsetjmp.S,v 1.6 2002/05/07 01:34:21 eeh Exp $ */ /* * Copyright (c) 1995 Paul Kranenburg * All rights reserved. @@ -33,7 +33,8 @@ #include "SYS.h" #ifdef PIC - +#ifdef BIGPIC + ENTRY(sigsetjmp) PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE set _C_LABEL(setjmp), %o2 ! if (%o1 != 0) goto _setjmp; @@ -55,6 +56,32 @@ ENTRY(siglongjmp) nop unimp 0 +#else + +ENTRY(sigsetjmp) + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + cmp %o1, 0 + bne,a 1f + ldx [%g1 + _C_LABEL(setjmp)], %g1 ! if (%o1 != 0) goto _setjmp; + ldx [%g1 + _C_LABEL(_setjmp)], %g1 ! else goto __setjmp; +1: + jmp %g1 + st %o1,[%o0+0x48] ! jmpbuf[JBLEN] + + +ENTRY(siglongjmp) + PIC_PROLOGUE(%g1,%o2) ! %g1 = _GLOBAL_OFFSET_TABLE + cmp %o2, 0 + ld [%o0 + 0x48],%o2 ! jmpbuf[JBLEN] + bne,a 1f + ldx [%g1 + _C_LABEL(longjmp)], %g1 ! if (%o2 != 0) goto _longjmp; + ldx [%g1 + _C_LABEL(_longjmp)], %g1 ! else goto __longjmp; +1: + jmp %g1 + nop + unimp 0 + +#endif /* BIGPIC */ #else /* PIC */ ENTRY(sigsetjmp) diff --git a/lib/libc/arch/sparc64/sys/__clone.S b/lib/libc/arch/sparc64/sys/__clone.S index 0982f485918a..4884b7519eeb 100644 --- a/lib/libc/arch/sparc64/sys/__clone.S +++ b/lib/libc/arch/sparc64/sys/__clone.S @@ -1,4 +1,4 @@ -/* $NetBSD: __clone.S,v 1.1 2001/07/23 07:35:44 thorpej Exp $ */ +/* $NetBSD: __clone.S,v 1.2 2002/05/07 01:34:22 eeh Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -81,7 +81,7 @@ ENTRY(__clone) call %l0 ! Call the clone's entry point. nop - CALL(_C_LABEL(_exit)) + JUMP(_exit) /* NOTREACHED */ 2: ret diff --git a/lib/libc/arch/sparc64/sys/brk.S b/lib/libc/arch/sparc64/sys/brk.S index 69c7ab489085..748893694a8c 100644 --- a/lib/libc/arch/sparc64/sys/brk.S +++ b/lib/libc/arch/sparc64/sys/brk.S @@ -1,4 +1,4 @@ -/* $NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $ */ +/* $NetBSD: brk.S,v 1.10 2002/05/07 01:34:22 eeh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -44,7 +44,7 @@ #if 0 .asciz "@(#)brk.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $") + RCSID("$NetBSD: brk.S,v 1.10 2002/05/07 01:34:22 eeh Exp $") #endif #endif /* SYSLIBC_SCCS and not lint */ @@ -66,6 +66,7 @@ _C_LABEL(__minbrk): ENTRY(_brk) #ifdef PIC +#ifdef BIGPIC PIC_PROLOGUE(%o5,%o4) set _C_LABEL(__minbrk), %o4 ldx [%o5 + %o4], %o4 @@ -82,6 +83,22 @@ ENTRY(_brk) 1: retl /* success, return 0 & record new break */ stx %o2, [%o4] +#else + PIC_PROLOGUE(%o5,%o4) + ldx [%o5 + _C_LABEL(__minbrk)], %o4 + ldx [%o4], %o1 /* %o1 = minbrk */ + cmp %o1, %o0 /* if (minbrk > %o0) */ + movg %xcc, %o1, %o0 /* %o0 = minbrk */ + mov %o0, %o2 /* save argument to syscall */ + mov SYS_break, %g1 + t ST_SYSCALL + bcc,a,pt %icc, 1f + ldx [%o5 + _C_LABEL(__curbrk)], %o4 + ERROR() +1: + retl /* success, return 0 & record new break */ + stx %o2, [%o4] +#endif #else sethi %hi(_C_LABEL(__minbrk)), %o1 /* %o1 = minbrk */ ldx [%o1 + %lo(_C_LABEL(__minbrk))], %o1 diff --git a/lib/libc/arch/sparc64/sys/cerror.S b/lib/libc/arch/sparc64/sys/cerror.S index 7b59e189d2af..137b7d960f39 100644 --- a/lib/libc/arch/sparc64/sys/cerror.S +++ b/lib/libc/arch/sparc64/sys/cerror.S @@ -1,4 +1,4 @@ -/* $NetBSD: cerror.S,v 1.4 2000/07/26 00:53:50 eeh Exp $ */ +/* $NetBSD: cerror.S,v 1.5 2002/05/07 01:34:22 eeh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -44,7 +44,7 @@ #if 0 .asciz "@(#)cerror.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: cerror.S,v 1.4 2000/07/26 00:53:50 eeh Exp $") + RCSID("$NetBSD: cerror.S,v 1.5 2002/05/07 01:34:22 eeh Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -62,6 +62,16 @@ FUNC(__cerror) #else .globl _C_LABEL(errno) #ifdef PIC +#ifdef BIGPIC +FUNC(__cerror) + PIC_PROLOGUE(%g1, %o3) + set _C_LABEL(errno),%o1 + ldx [%g1 + %o1], %g1 + st %o0, [%g1] + mov -1, %o0 + retl + mov -1, %o1 +#else FUNC(__cerror) PIC_PROLOGUE(%g1, %o3) ldx [%g1 + _C_LABEL(errno)], %g1 @@ -69,6 +79,7 @@ FUNC(__cerror) mov -1, %o0 retl mov -1, %o1 +#endif #else FUNC(__cerror) sethi %hi(_C_LABEL(errno)), %g1 diff --git a/lib/libc/arch/sparc64/sys/sbrk.S b/lib/libc/arch/sparc64/sys/sbrk.S index 670c84a4c336..c36ca9c5042d 100644 --- a/lib/libc/arch/sparc64/sys/sbrk.S +++ b/lib/libc/arch/sparc64/sys/sbrk.S @@ -1,4 +1,4 @@ -/* $NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $ */ +/* $NetBSD: sbrk.S,v 1.8 2002/05/07 01:34:22 eeh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -44,7 +44,7 @@ #if 0 .asciz "@(#)sbrk.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $") + RCSID("$NetBSD: sbrk.S,v 1.8 2002/05/07 01:34:22 eeh Exp $") #endif #endif /* SYSLIBC_SCCS and not lint */ @@ -65,6 +65,7 @@ _C_LABEL(__curbrk): ENTRY(_sbrk) #ifdef PIC +#ifdef BIGPIC PIC_PROLOGUE(%o5,%o4) set _C_LABEL(__curbrk), %o3 ldx [%o5 + %o3], %o2 @@ -79,6 +80,21 @@ ENTRY(_sbrk) 1: retl /* and update curbrk */ stx %o4, [%o2] +#else + PIC_PROLOGUE(%o5,%o4) + ldx [%o5 + _C_LABEL(__curbrk)], %o2 + ldx [%o2], %o3 /* %o3 = old break */ + add %o3, %o0, %o4 /* %o4 = new break */ + mov %o4, %o0 /* copy for syscall */ + mov SYS_break, %g1 + t ST_SYSCALL /* break(new_break) */ + bcc,a 1f /* if success, */ + mov %o3, %o0 /* set return value */ + ERROR() +1: + retl /* and update curbrk */ + stx %o4, [%o2] +#endif #else sethi %hi(_C_LABEL(__curbrk)), %o2 ldx [%o2 + %lo(_C_LABEL(__curbrk))], %o3 /* %o3 = old break */ diff --git a/lib/libc/arch/sparc64/sys/setlogin.S b/lib/libc/arch/sparc64/sys/setlogin.S index 3ad5b48439d5..afcaa518e971 100644 --- a/lib/libc/arch/sparc64/sys/setlogin.S +++ b/lib/libc/arch/sparc64/sys/setlogin.S @@ -1,4 +1,4 @@ -/* $NetBSD: setlogin.S,v 1.3 2000/07/21 03:14:15 eeh Exp $ */ +/* $NetBSD: setlogin.S,v 1.4 2002/05/07 01:34:22 eeh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -44,7 +44,7 @@ #if 0 .asciz "@(#)setlogin.s 8.1 (Berkeley) 6/4/93" #else - RCSID("$NetBSD: setlogin.S,v 1.3 2000/07/21 03:14:15 eeh Exp $") + RCSID("$NetBSD: setlogin.S,v 1.4 2002/05/07 01:34:22 eeh Exp $") #endif #endif /* SYSLIBC_SCCS and not lint */ @@ -54,11 +54,18 @@ SYSCALL(setlogin) #ifdef PIC +#ifdef BIGPIC PIC_PROLOGUE(%o1,%o2) set _C_LABEL(__logname_valid), %o2 ldx [%o1 + %o2], %o1 retl st %g0, [%o1] +#else + PIC_PROLOGUE(%o1,%o2) + ldx [%o1 + _C_LABEL(__logname_valid)], %o1 + retl + st %g0, [%o1] +#endif #else /* Dunno what model we're using so we need to use full addresses */ sethi %hh(_C_LABEL(__logname_valid)), %o1