On ARM ELF systems, check that the kernel aligns the stack pointer to an

8-byte boundary (as mandated by ATPCS B-01) when delivering a signal.
This commit is contained in:
bjh21 2001-08-06 22:29:57 +00:00
parent 3c508a8790
commit 3b01aba77a
5 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,7 @@
# $NetBSD: Makefile,v 1.1 2001/08/06 22:29:57 bjh21 Exp $
.if ${OBJECT_FMT} == "ELF"
SUBDIR+= sigstackalign
.endif
.include <bsd.subdir.mk>

View File

@ -0,0 +1,4 @@
# $NetBSD: Makefile.inc,v 1.1 2001/08/06 22:29:58 bjh21 Exp $
#
# do not install regression test programs
proginstall::

View File

@ -0,0 +1,10 @@
# $NetBSD: Makefile,v 1.1 2001/08/06 22:29:59 bjh21 Exp $
PROG= sigstackalign
SRCS= sigstackalign.c stackptr.S
MKMAN= no
regress: ${PROG}
./${PROG}
.include <bsd.prog.mk>

View File

@ -0,0 +1,54 @@
/* $NetBSD: sigstackalign.c,v 1.1 2001/08/06 22:29:59 bjh21 Exp $ */
#include <sys/types.h>
__RCSID("$NetBSD: sigstackalign.c,v 1.1 2001/08/06 22:29:59 bjh21 Exp $");
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#define RANGE 16
#define STACKALIGN 8
#define BLOCKSIZE (MINSIGSTKSZ + RANGE)
extern void getstackptr(int);
void *stackptr;
int
main(int argc, char **argv)
{
char *stackblock;
int i, ret;
struct sigaction sa;
stack_t ss;
ret = 0;
sa.sa_handler = getstackptr;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_ONSTACK;
if (sigaction(SIGUSR1, &sa, NULL) != 0)
err(1, "sigaction");
stackblock = malloc(BLOCKSIZE);
for (i = 0; i < RANGE; i++) {
ss.ss_sp = stackblock;
ss.ss_size = MINSIGSTKSZ + i;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) != 0)
err(1, "sigaltstack");
kill(getpid(), SIGUSR1);
if ((u_int)stackptr % STACKALIGN != 0) {
fprintf(stderr, "Bad stack pointer %p\n", stackptr);
ret = 1;
}
#if 0
printf("i = %d, stackptr = %p\n", i, stackptr);
#endif
}
return ret;
}

View File

@ -0,0 +1,13 @@
/* $NetBSD: stackptr.S,v 1.1 2001/08/06 22:29:59 bjh21 Exp $ */
#include <machine/asm.h>
RCSID("$NetBSD: stackptr.S,v 1.1 2001/08/06 22:29:59 bjh21 Exp $")
ENTRY(getstackptr)
ldr r0, Lstackptr
str r13, [r0]
mov pc, r14
Lstackptr:
.word _C_LABEL(stackptr)