]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
This commit was manufactured by cvs2svn to create branch
authorno author <no_author@no_author>
Wed, 13 Oct 2004 09:58:53 +0000 (09:58 +0000)
committerno author <no_author@no_author>
Wed, 13 Oct 2004 09:58:53 +0000 (09:58 +0000)
'VALGRIND_2_2_0_BRANCH'.

git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_2_2_0_BRANCH@2744

memcheck/tests/badjump2.c [new file with mode: 0644]
memcheck/tests/badjump2.stderr.exp [new file with mode: 0644]
memcheck/tests/badjump2.vgtest [new file with mode: 0644]

diff --git a/memcheck/tests/badjump2.c b/memcheck/tests/badjump2.c
new file mode 100644 (file)
index 0000000..361966b
--- /dev/null
@@ -0,0 +1,45 @@
+#include <assert.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+// Regression test for bug 91162:  if a client had a SEGV signal handler,
+// and jumped to a bogus address, Valgrind would abort.  With the fix,
+// the following test runs to completion correctly.
+
+static jmp_buf myjmpbuf;
+
+static
+void SIGSEGV_handler(int signum)
+{
+   __builtin_longjmp(myjmpbuf, 1);
+}
+
+int main(void)
+{
+   struct sigaction sigsegv_new, sigsegv_saved;
+   int res;
+
+   /* Install own SIGSEGV handler */
+   sigsegv_new.sa_handler  = SIGSEGV_handler;
+   sigsegv_new.sa_flags    = 0;
+   sigsegv_new.sa_restorer = NULL;
+   res = sigemptyset( &sigsegv_new.sa_mask );
+   assert(res == 0);
+
+   res = sigaction( SIGSEGV, &sigsegv_new, &sigsegv_saved );
+   assert(res == 0);
+
+   if (__builtin_setjmp(myjmpbuf) == 0) {
+      // Jump to zero; will cause seg fault
+      void (*fn)(void) = 0;
+      fn();
+      fprintf(stderr, "Got here??\n");
+   } else  {
+      fprintf(stderr, "Signal caught, as expected\n");
+   }
+
+   return 0;
+}
+
diff --git a/memcheck/tests/badjump2.stderr.exp b/memcheck/tests/badjump2.stderr.exp
new file mode 100644 (file)
index 0000000..04db2d9
--- /dev/null
@@ -0,0 +1,6 @@
+Jump to the invalid address stated on the next line
+   at 0x........: ???
+   by 0x........: __libc_start_main (...libc...)
+   by 0x........: ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+Signal caught, as expected
diff --git a/memcheck/tests/badjump2.vgtest b/memcheck/tests/badjump2.vgtest
new file mode 100644 (file)
index 0000000..4256086
--- /dev/null
@@ -0,0 +1,2 @@
+prog: badjump2
+vgopts: -q