mirror of https://github.com/xemu-project/xemu.git
38 lines
722 B
C
38 lines
722 B
C
/*
|
|
* Common user code for specification exception testing.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#include <assert.h>
|
|
#include <signal.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
extern void test(void);
|
|
extern long expected_old_psw[2];
|
|
|
|
static void handle_sigill(int sig, siginfo_t *info, void *ucontext)
|
|
{
|
|
if ((long)info->si_addr != expected_old_psw[1]) {
|
|
_exit(EXIT_FAILURE);
|
|
}
|
|
_exit(EXIT_SUCCESS);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
struct sigaction act;
|
|
int err;
|
|
|
|
memset(&act, 0, sizeof(act));
|
|
act.sa_sigaction = handle_sigill;
|
|
act.sa_flags = SA_SIGINFO;
|
|
err = sigaction(SIGILL, &act, NULL);
|
|
assert(err == 0);
|
|
|
|
test();
|
|
|
|
return EXIT_FAILURE;
|
|
}
|