[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] system_reset command cause assert failed
From: |
Roy Tam |
Subject: |
Re: [Qemu-devel] system_reset command cause assert failed |
Date: |
Wed, 3 Feb 2010 10:09:07 +0800 |
2010/2/2 Luiz Capitulino <address@hidden>:
> On Tue, 2 Feb 2010 09:35:16 +0800
> Roy Tam <address@hidden> wrote:
>
>> 2010/2/2 Luiz Capitulino <address@hidden>:
>> > On Tue, 2 Feb 2010 00:26:53 +0800
>> > Roy Tam <address@hidden> wrote:
>> >
>> >> 2010/2/2 Luiz Capitulino <address@hidden>:
>> >>
>> >> > Hm, I'm puzzled. Is this failing on malloc()? At least qemu_malloc()
>> >> > is the last qemu's function I see in the logs.
>> >> >
>> >> > From now on I only see msvcrt functions...
>> >> >
>> >> > Maybe, you can type run on gdb, run system_reset on the
>> >> > Monitor and then switch back to gdb and type bt?
>> >> >
>> >> source-less debugging seems better...
>> >
>> > As far as I can understand something bad happens while the parser
>> > is processing the first "'" character of the qobject_from_jsonf()
>> > call in monitor.c:4524.
>> >
>> > Strange. Can you try 'info pci', 'info block' and 'info version'?
>> > Do they work?
>> >
>> > Maybe this is a refcount problem?
>> >
>> > Anthony, could you take a look too please?
>> >
>>
>> rebuild with -gstabs -O1, you can see double free here:
>
> Ok, so we have a double free and
>
Clarify that after digging into sources further, it is not double
free, but parse_json not be executed by json_lexer_feed_char as I put
asm("int3") in parse_json but there's no SIGTRAP be raised. (for
system_reset and system_powerdown)
>> #0 qobject_to_qdict (obj=0x0) at qobject.h:108
>> #1 0x004127ae in pci_device_print (mon=0x494c460, device=0x49696c0)
>> at /home/roy/qemu/hw/pci.c:1165
>
> a segfault.
for this, parse_json was executed by json_lexer_feed_char.
a workaround patch is here, but why null qobj has pushed into qlist?
diff --git a/hw/pci.c b/hw/pci.c
index 023f7b6..84e7b35 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -1161,8 +1161,11 @@ static void pci_device_print(Monitor *mon, QDict *device)
qdict_get_int(info, "limit"));
}
+ QObject* qobj;
QLIST_FOREACH_ENTRY(qdict_get_qlist(device, "regions"), entry) {
- qdict = qobject_to_qdict(qlist_entry_obj(entry));
+ qobj = qlist_entry_obj(entry);
+ if(!qobj) continue;
+ qdict = qobject_to_qdict(qobj);
monitor_printf(mon, " BAR%d: ", (int)
qdict_get_int(qdict, "bar"));
addr = qdict_get_int(qdict, "address");
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/01
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/02
- Re: [Qemu-devel] system_reset command cause assert failed,
Roy Tam <=
- Re: [Qemu-devel] system_reset command cause assert failed, Luiz Capitulino, 2010/02/03
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/03
- Re: [Qemu-devel] system_reset command cause assert failed, Roy Tam, 2010/02/01