#include <stdio.h> | |
#include <stdlib.h> | |
#include <signal.h> | |
static void handler(int sig, siginfo_t *info, void *v) | |
{ | |
printf("info: sig=%d code=%d addr=0x%lx\n", | |
info->si_signo, info->si_code, (unsigned long)info->si_addr); | |
exit(0); | |
} | |
int main() | |
{ | |
struct sigaction sa; | |
int val; | |
sa.sa_sigaction = handler; | |
sigfillset(&sa.sa_mask); | |
sa.sa_flags = SA_SIGINFO; | |
sigaction(SIGSEGV, &sa, NULL); | |
asm volatile("mov %1, %%fs; mov %%fs:0, %0" : "=r" (val) : "r"(4)); | |
printf("val=%d\n", val); | |
return 0; | |
} |