[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: Misbehavior of qemu ppc tcg/translation?
From: |
Baojun Wang |
Subject: |
[Qemu-devel] Re: Misbehavior of qemu ppc tcg/translation? |
Date: |
Wed, 15 Jul 2009 23:35:55 +0800 |
BTW: The source code is dummy:
# hello.S
.data
msg:
.string "hello, world!\n"
len = . - msg
.text
.global _raw_write
_raw_write:
sc
blr
.global _start
_start:
li 0, 4
li 3, 1
lis 4, address@hidden
addi 4, 4, address@hidden
li 5, len
bl _raw_write
.long 0x10001234
li 0, 1
li 3, 0
sc
On Wed, Jul 15, 2009 at 11:33 PM, Baojun Wang<address@hidden> wrote:
> hi, list:
>
> I hope the following example is self-explained, in the assembler
> code, we can use instruction like (instruction-as-data?):
>
> 100000b4: 10 00 12 34 .long 0x10001234
>
> but the ppc translator set the exception flag and raise a PROGRAM
> exception later, however on real machine, if the above instruction is
> never ran, then everything should be OK. Thus the ppc translator raise
> the exception too early? (I think it should only raise the PROGRAM
> exception until tcg really trying to exec the instruction, but not on
> translation time)
>
> Thanks,
> Wang Baojun
>
> $ qemu-ppc -L emu-ppc ./hello
> hello, world!
> invalid/unsupported opcode: 04 - 1a - 08 (10001234) 100000b4 0
> Invalid instruction
> NIP 100000b8 LR 100000b4 CTR 00000000 XER 00000000
> MSR 00006040 HID0 00000000 HF 00006000 idx 0
> TB 00000000 00000000
> GPR00 0000000000000004 000000004007f588 0000000000000000 000000000000000f
> GPR04 00000000100100c4 000000000000000f 0000000000000000 0000000000000000
> GPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> GPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> GPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> GPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> GPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> GPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> CR 00000000 [ - - - - - - - - ] RES ffffffff
> FPR00 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR04 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> FPSCR 00000000
> Segmentation fault
>
>
> on a real machine:
> $ ./hello
> hello, world!
> $ powerpc-unknown-linux-gnu-objdump -d hello
>
> hello: file format elf32-powerpc
>
> Disassembly of section .text:
>
> 10000094 <_raw_write>:
> 10000094: 44 00 00 02 sc
> 10000098: 4e 80 00 20 blr
>
> 1000009c <_start>:
> 1000009c: 38 00 00 04 li r0,4
> 100000a0: 38 60 00 01 li r3,1
> 100000a4: 3c 80 10 01 lis r4,4097
> 100000a8: 38 84 00 c4 addi r4,r4,196
> 100000ac: 38 a0 00 0f li r5,15
> 100000b0: 4b ff ff e5 bl 10000094 <_raw_write>
> 100000b4: 10 00 12 34 .long 0x10001234
> 100000b8: 38 00 00 01 li r0,1
> 100000bc: 38 60 00 00 li r3,0
> 100000c0: 44 00 00 02 sc
>