Am 30.12.2009 um 18:46 schrieb Aurelien Jarno <aurel...@aurel32.net>:
On Wed, Dec 30, 2009 at 03:39:32PM +0100, Alexander Graf wrote:
Am 29.12.2009 um 22:07 schrieb Aurelien Jarno <aurel...@aurel32.net>:
On Tue, Dec 29, 2009 at 04:09:17PM +0100, Stefan Weil wrote:
Test environment:
* ppc-softmmu/qemu-system-ppc running on x86_64 host
* emulated ppc is running debian lenny
While debugging on the emulated ppc (each time when
a shared library is loaded after "r" command?),
qemu-system-ppc prints this error message:
invalid/unsupported opcode: 00 - 00 - 00 (00000000) 4800fa44 1
If logging is enabled, the error message goes to qemu.log:
IN:
0xc0013488: nop
0xc001348c: rlwinm r3,r3,0,0,19
0xc0013490: li r4,128
0xc0013494: mtctr r4
0xc0013498: mr r6,r3
0xc001349c: dcbst r0,r3
invalid/unsupported opcode: 00 - 00 - 00 (00000000) 4800fa44 1
IN:
0x4800fa40: twge r2,r2
0x4800fa44: .long 0x0
The problem is that QEMU doesn't stop the decoding of instructions
when
it encounters a trap instruction. We should probably either end
the TB
in that case, or avoid printing "invalid/unsupported opcode", as
this
instruction will actually never been executed.
Given how seldom they occur, it's probably best (easiest to read)
to end
the TB.
The question is to know if there are other conditions than branches
and
trap where code can be translated, but then never executed.
We don't fix that by hacking the invalid opcode print either, because
we'd still have to mark instructions we can't determine if an
instruction is invalid later on.
IMHO the best solution would actually be to just not print out
anything except for qemu.log if -d is used.
Alex