Florian Krohm 8d6e98bdfd Rewrite badjump and badjump2 such that the error occurs now on the
same line for all architectures.
Promote the s390x exp file to be the golden one because it has the
correct result. Add exp-kfail files for those platforms where the testcases
fail (x86).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12097
2011-10-04 20:14:59 +00:00

55 lines
1.2 KiB
C

#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;
#if !defined(__APPLE__)
sigsegv_new.sa_restorer = NULL;
#endif
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
#if defined(__powerpc64__)
unsigned long int fn[3];
fn[0] = 0;
fn[1] = 0;
fn[2] = 0;
#else
void (*fn)(void) = 0;
#endif
((void(*)(void)) fn) ();
fprintf(stderr, "Got here??\n");
} else {
fprintf(stderr, "Signal caught, as expected\n");
}
return 0;
}