qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] vl.c: Implement SIGILL signal handler for trigg


From: Michal Novotny
Subject: Re: [Qemu-devel] [PATCH] vl.c: Implement SIGILL signal handler for triggering SIGSEGV
Date: Fri, 06 Sep 2013 15:24:13 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7

On 09/06/2013 12:50 AM, Anthony Liguori wrote:
> On Thu, Sep 5, 2013 at 7:20 AM, Michal Novotny <address@hidden> 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 <address@hidden>
>> ---
>>  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

The idea was to trigger SIGSEGV (working at least at test conditions) to
find out current qemu state. Of course, using gdb is also an option.

Please ignore this patch, it was rather one purpose patch used in testing...

Thanks,
Michal
>
>> +}
>> +
>> +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
>>

-- 
Michal Novotny <address@hidden>, RHCE, Red Hat
Virtualization | libvirt-php bindings | php-virt-control.org




reply via email to

[Prev in Thread] Current Thread [Next in Thread]