qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] endless loop running qemu-arm (linux-user) in exec.c


From: Jan-Simon Möller
Subject: [Qemu-devel] endless loop running qemu-arm (linux-user) in exec.c
Date: Sat, 27 Feb 2010 04:30:01 +0100
User-agent: KMail/1.12.4 (Linux/2.6.31.12-0.1-default; KDE/4.3.5; x86_64; ; )

Hi all!

Running "msgmerge" with qemu-arm (d616cf1d1510c963fc1876cb10f5f1fa226b54ef) I 
get 
stuck in an endless loop in exec.c (~line 1294):

code-snippet:
        ptb = &tb_next->jmp_first;
        for(;;) {
            tb1 = *ptb;
            n1 = (long)tb1 & 3;
            tb1 = (TranslationBlock *)((long)tb1 & ~3);
            if (n1 == n && tb1 == tb)
                break;
            ptb = &tb1->jmp_next[n1];
        }


The assembly:
    0x0000000060020b20 <tb_reset_jump_recursive2+80>:       mov    %edx,%edx
    0x0000000060020b22 <tb_reset_jump_recursive2+82>:       add    $0xa,%rdx
    0x0000000060020b26 <tb_reset_jump_recursive2+86>:       lea    
(%rax,%rdx,8),%rcx
    0x0000000060020b2a <tb_reset_jump_recursive2+90>:       mov    
(%rax,%rdx,8),%rax
    0x0000000060020b2e <tb_reset_jump_recursive2+94>:       mov    %eax,%edx
    0x0000000060020b30 <tb_reset_jump_recursive2+96>:       and    
$0xfffffffffffffffc,%rax
    0x0000000060020b34 <tb_reset_jump_recursive2+100>:      and    $0x3,%edx
    0x0000000060020b37 <tb_reset_jump_recursive2+103>:      cmp    %rax,%rbx
    0x0000000060020b3a <tb_reset_jump_recursive2+106>:      jne    0x60020b20 
<tb_reset_jump_recursive2+80>

I added some debug output and this looks like:

[..]
debugme:    n1 0  ==  n 0  &&  tb1 30ef2730 == tb 30ef2730
debugme:    n1 0  ==  n 0  &&  tb1 30ef2810 == tb 30ef2810
debugme:    n1 1  ==  n 1  &&  tb1 30ef2880 == tb 30ef2880
debugme:    n1 0  ==  n 0  &&  tb1 30ef28f0 == tb 30ef28f0
debugme:    n1 0  ==  n 0  &&  tb1 30ef2960 == tb 30ef2960

and then:
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
debugme:    n1 1  ==  n 0  &&  tb1 30ef33e0 == tb 30ef2a40
debugme:    n1 2  ==  n 0  &&  tb1 30ef2ab0 == tb 30ef2a40
debugme:    n1 0  ==  n 0  &&  tb1 30ef3370 == tb 30ef2a40
[..]

So we never hit the exit path in this case.

Does this ring a bell ?  Anyone ?

Digging deeper ...

Best,
Jan-Simon




reply via email to

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