On Thu, Sep 5, 2013 at 7:20 AM, Michal Novotny <minov...@redhat.com> wrote: > This is the patch to introduce SIGILL handler to be able to trigger > SIGSEGV signal in qemu. This has been written to help debugging > state when qemu crashes by SIGSEGV as a simple reproducer to > emulate such situation in case of need. > > Signed-off-by: Michal Novotny <minov...@redhat.com> > --- > vl.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/vl.c b/vl.c > index 7e04641..3966271 100644 > --- a/vl.c > +++ b/vl.c > @@ -2897,6 +2897,26 @@ static int object_create(QemuOpts *opts, void *opaque) > return 0; > } > > +#ifdef CONFIG_POSIX > +static void signal_handler(int signal) > +{ > + int *p = NULL; > + > + *p = 0xDEADBEEF;
I won't repeat the questions from Paolo and Lazlo (I share their confusion) but will simply add that you cannot rely on NULL address accessing causing a SEGV. Even with all the use of volatile in the world, there's no guarantee this is going to crash. Regards, Anthony Liguori > +} > + > +static void setup_signal_handlers(void) > +{ > + struct sigaction action; > + > + memset(&action, 0, sizeof(action)); > + sigfillset(&action.sa_mask); > + action.sa_handler = signal_handler; > + action.sa_flags = 0; > + sigaction(SIGILL, &action, NULL); > +} > +#endif > + > int main(int argc, char **argv, char **envp) > { > int i; > @@ -2945,6 +2965,10 @@ int main(int argc, char **argv, char **envp) > #endif > } > > +#ifdef CONFIG_POSIX > + setup_signal_handlers(); > +#endif > + > module_call_init(MODULE_INIT_QOM); > > qemu_add_opts(&qemu_drive_opts); > -- > 1.7.11.7 >