* [Qemu-devel] Misbehavior of qemu ppc tcg/translation? @ 2009-07-15 15:33 Baojun Wang 2009-07-15 15:35 ` [Qemu-devel] " Baojun Wang 2009-07-15 16:34 ` [Qemu-devel] " Blue Swirl 0 siblings, 2 replies; 4+ messages in thread From: Baojun Wang @ 2009-07-15 15:33 UTC (permalink / raw) To: qemu-devel 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 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] Re: Misbehavior of qemu ppc tcg/translation? 2009-07-15 15:33 [Qemu-devel] Misbehavior of qemu ppc tcg/translation? Baojun Wang @ 2009-07-15 15:35 ` Baojun Wang 2009-07-15 16:34 ` [Qemu-devel] " Blue Swirl 1 sibling, 0 replies; 4+ messages in thread From: Baojun Wang @ 2009-07-15 15:35 UTC (permalink / raw) To: qemu-devel 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, msg@ha addi 4, 4, msg@l 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<wangbj@gmail.com> 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 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Misbehavior of qemu ppc tcg/translation? 2009-07-15 15:33 [Qemu-devel] Misbehavior of qemu ppc tcg/translation? Baojun Wang 2009-07-15 15:35 ` [Qemu-devel] " Baojun Wang @ 2009-07-15 16:34 ` Blue Swirl 2009-07-16 11:49 ` Baojun Wang 1 sibling, 1 reply; 4+ messages in thread From: Blue Swirl @ 2009-07-15 16:34 UTC (permalink / raw) To: Baojun Wang; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 689 bytes --] On 7/15/09, Baojun Wang <wangbj@gmail.com> 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) Would the attached patch fix the problem? [-- Attachment #2: 0001-PPC-stop-code-generation-when-we-reach-a-branch.patch --] [-- Type: application/x-patch, Size: 1163 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] Misbehavior of qemu ppc tcg/translation? 2009-07-15 16:34 ` [Qemu-devel] " Blue Swirl @ 2009-07-16 11:49 ` Baojun Wang 0 siblings, 0 replies; 4+ messages in thread From: Baojun Wang @ 2009-07-16 11:49 UTC (permalink / raw) To: Blue Swirl; +Cc: qemu-devel Sorry, I think my example have some problem, because the instruction after the `bl' would also be executed, I think the reason why on a real machine (e500v2) doesn't PROGRAM is because of the SPE instruction: efdabs 0 0 0 1 0 0 rD rA /// 0 1 0 1 1 1 0 0 1 0 0 EFX efdabs efdadd 0 0 0 1 0 0 rD rA rB 0 1 0 1 1 1 0 0 0 0 0 EFX efdadd efdcfs 0 0 0 1 0 0 rD 0 0 0 0 0 rB 0 1 0 1 1 1 0 1 1 1 1 EFX efdcfs efdcfsf 0 0 0 1 0 0 rD /// rB 0 1 0 1 1 1 1 0 0 1 1 EFX efdcfsf efdcfsi 0 0 0 1 0 0 rD /// rB 0 1 0 1 1 1 1 0 0 0 1 EFX efdcfsi efdcfuf 0 0 0 1 0 0 rD /// rB 0 1 0 1 1 1 1 0 0 1 0 EFX efdcfuf efdcfui 0 0 0 1 0 0 rD /// rB 0 1 0 1 1 1 1 0 0 0 0 EFX efdcfui efdcmpeq 0 0 0 1 0 0 crfD / / rA rB 0 1 0 1 1 1 0 1 1 1 0 EFX efdcmpeq opcode(0x10001234) ==> opcode = 4 which will be the above instructions on e500. I have changed my program, not it looks like: .data msg: .string "hello, world!\n" len = . - msg .text .global _my_cont _my_cont: li 0, 1 li 3, 0 sc .global _my_write _my_write: stwu 1, -16(1) mflr 6 lwz 4, 0(6) lwz 5, 4(6) lwz 7, 8(6) stw 6, 0(1) stw 7, 4(1) sc lwz 6, 0(1) lwz 7, 8(6) mtlr 7 addi 1, 1, 16 blr .global _start _start: li 0, 4 li 3, 1 bl _my_write .long msg .long len .long _my_cont On both qemu & real machine, the code runs fine. I ran into infinite PROGRAM exception incidentally (NEED further confirm) in ppc-softmmu, which is more or less simular with the above example because of: (arch/powerpc/kernel/head_booke.h) #define EXC_XFER_TEMPLATE(hdlr, trap, msr, copyee, tfer, ret) \ li r10,trap; \ stw r10,_TRAP(r11); \ lis r10,msr@h; \ ori r10,r10,msr@l; \ copyee(r10, r9); \ bl tfer; \ .long hdlr; \ .long ret Anyway, Thank you very much! Best Regards, Wang Baojun On Thu, Jul 16, 2009 at 12:34 AM, Blue Swirl<blauwirbel@gmail.com> wrote: > On 7/15/09, Baojun Wang <wangbj@gmail.com> 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) > > Would the attached patch fix the problem? > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-07-16 11:49 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-15 15:33 [Qemu-devel] Misbehavior of qemu ppc tcg/translation? Baojun Wang 2009-07-15 15:35 ` [Qemu-devel] " Baojun Wang 2009-07-15 16:34 ` [Qemu-devel] " Blue Swirl 2009-07-16 11:49 ` Baojun Wang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).