Module Name: src Committed By: thorpej Date: Tue Jul 6 12:38:40 UTC 2021
Modified Files: src/lib/libc/arch/alpha/gen: __setjmp14.S _lwp.c makecontext.c swapcontext.S src/lib/libm/arch/alpha: lrint.S Log Message: Ensure that the stack is always 16-byte aligned by rounding sizes as needed. All changes from rin@ except swapcontext.S, which is from me (added symbolic constants to make the code clearer). To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/lib/libc/arch/alpha/gen/__setjmp14.S cvs rdiff -u -r1.7 -r1.8 src/lib/libc/arch/alpha/gen/_lwp.c cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/alpha/gen/makecontext.c cvs rdiff -u -r1.4 -r1.5 src/lib/libc/arch/alpha/gen/swapcontext.S cvs rdiff -u -r1.3 -r1.4 src/lib/libm/arch/alpha/lrint.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/arch/alpha/gen/__setjmp14.S diff -u src/lib/libc/arch/alpha/gen/__setjmp14.S:1.8 src/lib/libc/arch/alpha/gen/__setjmp14.S:1.9 --- src/lib/libc/arch/alpha/gen/__setjmp14.S:1.8 Wed Oct 21 01:24:05 2020 +++ src/lib/libc/arch/alpha/gen/__setjmp14.S Tue Jul 6 12:38:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: __setjmp14.S,v 1.8 2020/10/21 01:24:05 thorpej Exp $ */ +/* $NetBSD: __setjmp14.S,v 1.9 2021/07/06 12:38:40 thorpej Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -68,12 +68,12 @@ LEAF(__setjmp14, 1) lda a2, SC_MASK(s0) /* point to mask in sc */ CALL(__sigprocmask14) - lda sp, -24(sp) /* sizeof struct sigaltstack */ + lda sp, -32(sp) /* roundup(sizeof(struct sigaltstack), 16) */ mov zero, a0 mov sp, a1 CALL(__sigaltstack14) ldl t0, 16(sp) /* offset of ss_flags */ - lda sp, 24(sp) /* sizeof struct sigaltstack */ + lda sp, 32(sp) /* pop the sigaltstack */ ldq ra, (SC_REGS+_REG_RA*8)(s0) /* restore return address */ blt v0, botch /* check for error */ and t0, 0x1, t0 /* get SA_ONSTACK flag */ Index: src/lib/libc/arch/alpha/gen/_lwp.c diff -u src/lib/libc/arch/alpha/gen/_lwp.c:1.7 src/lib/libc/arch/alpha/gen/_lwp.c:1.8 --- src/lib/libc/arch/alpha/gen/_lwp.c:1.7 Wed Sep 12 14:13:43 2012 +++ src/lib/libc/arch/alpha/gen/_lwp.c Tue Jul 6 12:38:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: _lwp.c,v 1.7 2012/09/12 14:13:43 manu Exp $ */ +/* $NetBSD: _lwp.c,v 1.8 2021/07/06 12:38:40 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: _lwp.c,v 1.7 2012/09/12 14:13:43 manu Exp $"); +__RCSID("$NetBSD: _lwp.c,v 1.8 2021/07/06 12:38:40 thorpej Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -58,7 +58,7 @@ _lwp_makecontext(ucontext_t *u, void (*s gr[_REG_T12] = (unsigned long) start; gr[_REG_RA] = (unsigned long) _lwp_exit; gr[_REG_A0] = (unsigned long) arg; - gr[_REG_SP] = ((unsigned long) (stack_base + stack_size)) & ~0x7; + gr[_REG_SP] = ((unsigned long) (stack_base + stack_size)) & ~0xfUL; gr[_REG_S6] = 0; gr[_REG_UNIQUE] = (unsigned long)private; Index: src/lib/libc/arch/alpha/gen/makecontext.c diff -u src/lib/libc/arch/alpha/gen/makecontext.c:1.6 src/lib/libc/arch/alpha/gen/makecontext.c:1.7 --- src/lib/libc/arch/alpha/gen/makecontext.c:1.6 Tue Sep 20 08:42:29 2011 +++ src/lib/libc/arch/alpha/gen/makecontext.c Tue Jul 6 12:38:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: makecontext.c,v 1.6 2011/09/20 08:42:29 joerg Exp $ */ +/* $NetBSD: makecontext.c,v 1.7 2021/07/06 12:38:40 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: makecontext.c,v 1.6 2011/09/20 08:42:29 joerg Exp $"); +__RCSID("$NetBSD: makecontext.c,v 1.7 2021/07/06 12:38:40 thorpej Exp $"); #endif #include <stddef.h> @@ -51,12 +51,14 @@ makecontext(ucontext_t *ucp, void (*func unsigned long *sp; va_list ap; - /* Compute and align stack pointer. */ + /* Compute stack pointer. */ sp = (unsigned long *) - (((uintptr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ~0x7); + ((uintptr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); /* Allocate necessary stack space for arguments exceeding a0-5. */ if (argc > 6) sp -= (argc - 6); + /* Align stack pointer. */ + sp = (unsigned long *)((uintptr_t)sp & ~0xfUL); gr[_REG_SP] = (__greg_t)sp; /* Arrange for return via the trampoline code. */ gr[_REG_RA] = (__greg_t)__resumecontext; Index: src/lib/libc/arch/alpha/gen/swapcontext.S diff -u src/lib/libc/arch/alpha/gen/swapcontext.S:1.4 src/lib/libc/arch/alpha/gen/swapcontext.S:1.5 --- src/lib/libc/arch/alpha/gen/swapcontext.S:1.4 Wed Oct 21 01:24:05 2020 +++ src/lib/libc/arch/alpha/gen/swapcontext.S Tue Jul 6 12:38:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: swapcontext.S,v 1.4 2020/10/21 01:24:05 thorpej Exp $ */ +/* $NetBSD: swapcontext.S,v 1.5 2021/07/06 12:38:40 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -32,25 +32,30 @@ #include "SYS.h" #include "assym.h" -NESTED(swapcontext, 2, 24, ra, IM_RA|IM_A0|IM_A1, 0) +#define FRAME_SIZE 32 +#define FRAME_RA (32-16) +#define FRAME_OUCP (32-24) +#define FRAME_UCP (32-32) + +NESTED(swapcontext, 2, FRAME_SIZE, ra, IM_RA|IM_A0|IM_A1, 0) LDGP(pv) - lda sp, -24(sp) - stq ra, (24- 8)(sp) /* must save ra, oucp, ucp */ - stq a0, (24-16)(sp) - stq a1, (24-24)(sp) + lda sp, -FRAME_SIZE(sp) + stq ra, FRAME_RA(sp) /* must save ra, oucp, ucp */ + stq a0, FRAME_OUCP(sp) + stq a1, FRAME_UCP(sp) CALL(_getcontext) /* getcontext(oucp) */ - ldq t0, (24-16)(sp) + ldq t0, FRAME_OUCP(sp) bne v0, Lerr - ldq t1, (24- 8)(sp) + ldq t1, FRAME_RA(sp) stq t1, (UC_GREGS + _REG_RA*8)(t0) /* Adjust saved RA */ stq t1, (UC_GREGS + _REG_PC*8)(t0) /* Adjust saved PC */ - lda t1, 24(sp) + lda t1, FRAME_SIZE(sp) stq t1, (UC_GREGS + _REG_SP*8)(t0) /* Adjust saved SP */ - ldq a0, (24-24)(sp) + ldq a0, FRAME_UCP(sp) CALL(setcontext) /* setcontext(ucp) */ Lerr: - ldq ra, (24- 8)(sp) - lda sp, 24(sp) + ldq ra, FRAME_RA(sp) + lda sp, FRAME_SIZE(sp) RET END(swapcontext) Index: src/lib/libm/arch/alpha/lrint.S diff -u src/lib/libm/arch/alpha/lrint.S:1.3 src/lib/libm/arch/alpha/lrint.S:1.4 --- src/lib/libm/arch/alpha/lrint.S:1.3 Wed Oct 13 15:18:31 2004 +++ src/lib/libm/arch/alpha/lrint.S Tue Jul 6 12:38:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lrint.S,v 1.3 2004/10/13 15:18:31 drochner Exp $ */ +/* $NetBSD: lrint.S,v 1.4 2021/07/06 12:38:40 thorpej Exp $ */ /* * Written by Matthias Drochner <droch...@netbsd.org>. @@ -12,10 +12,10 @@ LEAF(lrint, 1) #if 0 ftoit ft0,v0 #else - lda sp,-8(sp) + lda sp,-16(sp) stt ft0,0(sp) ldq v0,0(sp) - lda sp,8(sp) + lda sp,16(sp) #endif ret END(lrint)