#include #include #include /* c.f. Debian Bug#157374 */ #include void sigsegv_handler(int signal, siginfo_t *info, void *context) { fprintf(stderr, "si_addr: %p (should probably be 0x0 [aka \"(nil)\"]\n",info->si_addr); fprintf(stderr, "%r1 : 0x%08x (should probably be 0xdeadbeef)\n", ((struct sigcontext *) &(((ucontext_t *) context)->uc_mcontext))->sc_gr[1]); exit(0); } int main () { int *foo; struct sigaction sa; sa.sa_sigaction = sigsegv_handler; sa.sa_flags = SA_SIGINFO | SA_RESTART; sigaction(SIGSEGV, &sa, NULL); asm("ldil L%0xdeadbeef,%r1"); asm("ldo R%0xdeadbeef(%r1),%r1"); foo = NULL; *foo = 3; }