# HG changeset patch # User cslag # Date 1448583109 -3600 # Node ID f533c5ad1b6ed3bcf2c534a3cf4e2eb7b2efc598 # Parent 6e7b1b7ad9d37fb37606e12f03d329008d7c3d38 - added some exception handling to thunk test, to catch w^x tests, etc. diff -r 6e7b1b7ad9d3 -r f533c5ad1b6e test/thunk/test_thunk.c --- 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 #include +#include +#include + +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 @@ -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();