[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] endless loop running qemu-arm (linux-user) in exec.c,
Jan-Simon Möller <=