Patchwork Crash on Windows XP startup

login
register
mail settings
Submitter Gerhard Wiesinger
Date Nov. 8, 2012, 6:53 p.m.
Message ID <509BFF98.7040502@wiesinger.com>
Download mbox | patch
Permalink /patch/197869/
State New
Headers show

Comments

Gerhard Wiesinger - Nov. 8, 2012, 6:53 p.m.
Hello,

I bisected down a Windows XP startup crash to the following commit:

0b57e287138728f72d88b06e69b970c5d745c44a is the first bad commit
commit 0b57e287138728f72d88b06e69b970c5d745c44a
Author: David Gibson <david@gibson.dropbear.id.au>
Date:   Mon Sep 10 12:30:57 2012 +1000

Reproduceable on qemu HEAD and by commenting out the refactored patch 
into a function.

How to proceed?

Ciao,
Gerhard
Catalin Patulea - Nov. 9, 2012, 6:42 p.m.
SIGSEGV is in target code:

(gdb) bt
#0  0x00000000402fd349 in code_gen_buffer ()
#1  0x000000000056113b in cpu_x86_exec (env=0x19489f0)
    at /usr/local/google/home/catalinp/src/qemu/cpu-exec.c:599
#2  0x00000000005625f9 in tcg_cpu_exec (env=0x19489f0)
    at /usr/local/google/home/catalinp/src/qemu/cpus.c:1115
#3  tcg_exec_all () at /usr/local/google/home/catalinp/src/qemu/cpus.c:1148
#4  qemu_tcg_cpu_thread_fn (arg=<optimized out>)
    at /usr/local/google/home/catalinp/src/qemu/cpus.c:841
#5  0x00007ffff6315e9a in start_thread (arg=0x7fffee690700) at
pthread_create.c:308
#6  0x00007ffff6042cbd in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

The patch (disabling the invalidate_and_set_dirty) does fix it for me as well.

On Thu, Nov 8, 2012 at 1:53 PM, Gerhard Wiesinger <lists@wiesinger.com> wrote:
> Hello,
>
> I bisected down a Windows XP startup crash to the following commit:
>
> 0b57e287138728f72d88b06e69b970c5d745c44a is the first bad commit
> commit 0b57e287138728f72d88b06e69b970c5d745c44a
> Author: David Gibson <david@gibson.dropbear.id.au>
> Date:   Mon Sep 10 12:30:57 2012 +1000
>
> Reproduceable on qemu HEAD and by commenting out the refactored patch into a
> function.
>
> How to proceed?
>
> Ciao,
> Gerhard
>
> diff --git a/exec.c b/exec.c
> index af94f9c..a937882 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -3501,7 +3501,7 @@ void cpu_physical_memory_write_rom(hwaddr addr,
>              /* ROM/RAM case */
>              ptr = qemu_get_ram_ptr(addr1);
>              memcpy(ptr, buf, l);
> -            invalidate_and_set_dirty(addr1, l);
> +            //invalidate_and_set_dirty(addr1, l);
>              qemu_put_ram_ptr(ptr);
>          }
>          len -= l;
>
>
Catalin Patulea - Nov. 9, 2012, 6:59 p.m.
I can post the target code and the code generated by TCG - not sure
how helpful that would be. There also seems to be a diff between what
is logged by "-d out_asm" and what I see in gdb with disass, and the
segv occurs in one of the diff blocks.

On Fri, Nov 9, 2012 at 1:42 PM, Catalin Patulea <catalinp@google.com> wrote:
> SIGSEGV is in target code:
>
> (gdb) bt
> #0  0x00000000402fd349 in code_gen_buffer ()
> #1  0x000000000056113b in cpu_x86_exec (env=0x19489f0)
>     at /usr/local/google/home/catalinp/src/qemu/cpu-exec.c:599
> #2  0x00000000005625f9 in tcg_cpu_exec (env=0x19489f0)
>     at /usr/local/google/home/catalinp/src/qemu/cpus.c:1115
> #3  tcg_exec_all () at /usr/local/google/home/catalinp/src/qemu/cpus.c:1148
> #4  qemu_tcg_cpu_thread_fn (arg=<optimized out>)
>     at /usr/local/google/home/catalinp/src/qemu/cpus.c:841
> #5  0x00007ffff6315e9a in start_thread (arg=0x7fffee690700) at
> pthread_create.c:308
> #6  0x00007ffff6042cbd in clone () at
> ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
> #7  0x0000000000000000 in ?? ()
>
> The patch (disabling the invalidate_and_set_dirty) does fix it for me as well.
>
> On Thu, Nov 8, 2012 at 1:53 PM, Gerhard Wiesinger <lists@wiesinger.com> wrote:
>> Hello,
>>
>> I bisected down a Windows XP startup crash to the following commit:
>>
>> 0b57e287138728f72d88b06e69b970c5d745c44a is the first bad commit
>> commit 0b57e287138728f72d88b06e69b970c5d745c44a
>> Author: David Gibson <david@gibson.dropbear.id.au>
>> Date:   Mon Sep 10 12:30:57 2012 +1000
>>
>> Reproduceable on qemu HEAD and by commenting out the refactored patch into a
>> function.
>>
>> How to proceed?
>>
>> Ciao,
>> Gerhard
>>
>> diff --git a/exec.c b/exec.c
>> index af94f9c..a937882 100644
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -3501,7 +3501,7 @@ void cpu_physical_memory_write_rom(hwaddr addr,
>>              /* ROM/RAM case */
>>              ptr = qemu_get_ram_ptr(addr1);
>>              memcpy(ptr, buf, l);
>> -            invalidate_and_set_dirty(addr1, l);
>> +            //invalidate_and_set_dirty(addr1, l);
>>              qemu_put_ram_ptr(ptr);
>>          }
>>          len -= l;
>>
>>

Patch

diff --git a/exec.c b/exec.c
index af94f9c..a937882 100644
--- a/exec.c
+++ b/exec.c
@@ -3501,7 +3501,7 @@  void cpu_physical_memory_write_rom(hwaddr addr,
              /* ROM/RAM case */
              ptr = qemu_get_ram_ptr(addr1);
              memcpy(ptr, buf, l);
-            invalidate_and_set_dirty(addr1, l);
+            //invalidate_and_set_dirty(addr1, l);
              qemu_put_ram_ptr(ptr);
          }
          len -= l;