qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Configuring QEMU to translate x86 instructions to nativ


From: Roger
Subject: Re: [Qemu-devel] Configuring QEMU to translate x86 instructions to native ARM instructions
Date: Tue, 6 Mar 2012 11:09:49 -0500

I'm using the QEMU sources from 0.15.1.

I will try the --cross-prefix option.  I have a feeling this will do it.  I 
know that the prologue is being initialized with the i386 target backend 
because the debugger shows me the name of the file and it is 
tcg/i386/tcg-target.c.  Further more, the code being inserted into the prologue 
array are x86 push instructions.  

I'll also try the --cpu option recommended by the previous poster.

Thanks both for your help.  I'll reply with the results.

Roger



On Mar 6, 2012, at 10:54 AM, Peter Maydell <address@hidden> wrote:

> On 6 March 2012 05:11, Roger Tagged <address@hidden> wrote:
>> I want to use the CPU emulation component of QEMU (user mode) and I'm
>> running into a bit of a problem that I hope you can help me with or point me
>> to the right list.
> 
> Which version of QEMU are you using?
> 
>> On my x86 Linux VM, I have configured QEMU with:
>> 
>> '--target-list=i386-linux-user' '--cc=/bin/arm-none-linux-gnueabi-gcc
> 
> You should use '--cross-prefix=arm-none-linux-gnueabi-' instead of
> specifying --cc, so qemu uses the whole cross toolchain rather than
> just the gcc...
> 
>> I then issue the make command which cross-compiles the source code to run on
>> an ARM CPU to emulate an x86 CPU.  When I debug the resulting ARM code, I
>> can see that QEMU successfully turns an x86 instruction into the
>> intermediate micro operations.  When the first call is reach, the
>> translation ends and it then attempts to executed the micro operations as
>> host (should be ARM) code which crashes with an illegal instruction
>> 
>> Program received signal SIGILL, Illegal instruction.
>> 0x402a4360 in code_gen_prologue
>> 
>> When I disassemble code_gen_prologue, I expected to see ARM instructions,
>> but I am not.
>> 
>> (gdb) disassem code_gen_prologue
>> Dump of assembler code for function code_gen_prologue:
>> => 0x402a4360 <+0>:   ; <UNDEFINED> instruction: 0x57565355
>>    0x402a4364 <+4>: ldc2l 4, cr12, [r4, #-516]! ; 0xfffffdfc
>>    0x402a4368 <+8>: stm r11, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10,
>> r11, r12, sp, lr, pc}
>>    0x402a436c <+12>: strgt lr, [r1], #767 ; 0x2ff
>> Why don't I see ARM instructions here?  Is the prologue being generated for
>> x86 instead of ARM?  One thing that I know for certain is that the code that
>> initializes the TCGContext tcg_target_qemu_prologue() is from the file
>> tcg/i386/tcg-target.c and not from tcg/arm/tcg-target.c.  Is this the right?
> 
> How do you know this for certain?
> 
> The prologue code is written by tcg_prologue_init(), which calls
> tcg_target_qemu_prologue(), which is a function provided by the TCG
> backend. In this case it should be the one in tcg/arm/tcg-target.c.
> 
> -- PMM



reply via email to

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