diff --git a/regress/sys/arch/arm/Makefile b/regress/sys/arch/arm/Makefile new file mode 100644 index 000000000000..3810f2e9c94f --- /dev/null +++ b/regress/sys/arch/arm/Makefile @@ -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 diff --git a/regress/sys/arch/arm/Makefile.inc b/regress/sys/arch/arm/Makefile.inc new file mode 100644 index 000000000000..fdc68ef0e099 --- /dev/null +++ b/regress/sys/arch/arm/Makefile.inc @@ -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:: diff --git a/regress/sys/arch/arm/sigstackalign/Makefile b/regress/sys/arch/arm/sigstackalign/Makefile new file mode 100644 index 000000000000..a778a5f1963c --- /dev/null +++ b/regress/sys/arch/arm/sigstackalign/Makefile @@ -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 \ No newline at end of file diff --git a/regress/sys/arch/arm/sigstackalign/sigstackalign.c b/regress/sys/arch/arm/sigstackalign/sigstackalign.c new file mode 100644 index 000000000000..53ffda510bad --- /dev/null +++ b/regress/sys/arch/arm/sigstackalign/sigstackalign.c @@ -0,0 +1,54 @@ +/* $NetBSD: sigstackalign.c,v 1.1 2001/08/06 22:29:59 bjh21 Exp $ */ + +#include + +__RCSID("$NetBSD: sigstackalign.c,v 1.1 2001/08/06 22:29:59 bjh21 Exp $"); + +#include +#include +#include + +#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; +} + diff --git a/regress/sys/arch/arm/sigstackalign/stackptr.S b/regress/sys/arch/arm/sigstackalign/stackptr.S new file mode 100644 index 000000000000..b29fff144249 --- /dev/null +++ b/regress/sys/arch/arm/sigstackalign/stackptr.S @@ -0,0 +1,13 @@ +/* $NetBSD: stackptr.S,v 1.1 2001/08/06 22:29:59 bjh21 Exp $ */ + +#include + +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) \ No newline at end of file