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();