Mercurial > pub > dyncall > dyncall
changeset 32:f533c5ad1b6e
- added some exception handling to thunk test, to catch w^x tests, etc.
author | cslag |
---|---|
date | Fri, 27 Nov 2015 01:11:49 +0100 |
parents | 6e7b1b7ad9d3 |
children | 8449fa6dabc7 |
files | test/thunk/test_thunk.c |
diffstat | 1 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/test/thunk/test_thunk.c Fri Nov 27 00:04:24 2015 +0100 +++ b/test/thunk/test_thunk.c Fri Nov 27 01:11:49 2015 +0100 @@ -38,6 +38,16 @@ #include <assert.h> #include <errno.h> +#include <signal.h> +#include <setjmp.h> + +jmp_buf jbuf; + + +void segv_handler(int sig) +{ + longjmp(jbuf, 1); +} void my_entry(const char* text) { @@ -52,7 +62,10 @@ printfun* fp; dcbInitThunk(&t, &my_entry); fp = (printfun*)&t; - fp("stack"); + if(setjmp(jbuf) != 0) + printf("sigsegv\n"); + else + fp("stack"); } #include <stdlib.h> @@ -67,7 +80,10 @@ } dcbInitThunk(p, &my_entry); fp = (printfun*)p; - fp("heap"); + if(setjmp(jbuf) != 0) + printf("sigsegv\n"); + else + fp("heap"); free(p); } @@ -82,7 +98,10 @@ } dcbInitThunk(p, &my_entry); fp = (printfun*)p; - fp("wx"); + if(setjmp(jbuf) != 0) + printf("sigsegv\n"); + else + fp("wx"); dcFreeWX((void*)p, sizeof(DCThunk)); } @@ -90,6 +109,8 @@ { dcTest_initPlatform(); + signal(SIGSEGV, segv_handler); + printf("Allocating ...\n"); printf("... W^X memory: "); test_wx();