* [Qemu-devel] Support for NetLogic XLP Processors @ 2015-03-22 11:13 Duarte Silva 2015-03-25 11:26 ` Duarte Silva 2015-03-25 13:13 ` James Hogan 0 siblings, 2 replies; 12+ messages in thread From: Duarte Silva @ 2015-03-22 11:13 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 440 bytes --] Hi guys, I have been struggling to get some binaries compiled for NetLogic XLP processor to run under QEMU. I have tried a bunch of things (most going back and forth) and always get the following error message: qemu: uncaught target signal 4 (Illegal instruction) - core dumped Illegal instruction I tried to debug it using GDB but to no avail. Does anybody have ideas? I'm running QEMU 2.2.1. Thanks for any help, cheers, Duarte [-- Attachment #2: cpuinfo.txt --] [-- Type: text/plain, Size: 1204 bytes --] system type : Netlogic XLP SoC processor : 0 physical id : 0 cpu model : XLP208 Rev B0 (Secure Boot) FPU @500 MHz BogoMIPS : 402.73 wait instruction : yes microsecond timers : yes tlb_entries : 544 extra interrupt vector : yes hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff] ASEs implemented : shadow register sets : 1 core : 0 VCED exceptions : not available VCEI exceptions : not available processor : 1 physical id : 1 cpu model : XLP208 Rev B0 (Secure Boot) FPU @500 MHz BogoMIPS : 402.61 wait instruction : yes microsecond timers : yes tlb_entries : 544 extra interrupt vector : yes hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff] ASEs implemented : shadow register sets : 1 core : 0 VCED exceptions : not available VCEI exceptions : not available processor : 2 physical id : 2 cpu model : XLP208 Rev B0 (Secure Boot) FPU @500 MHz BogoMIPS : 405.42 wait instruction : yes microsecond timers : yes tlb_entries : 544 extra interrupt vector : yes hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff] ASEs implemented : shadow register sets : 1 core : 0 VCED exceptions : not available VCEI exceptions : not available [-- Attachment #3: binary-info.txt --] [-- Type: text/plain, Size: 1001 bytes --] ELF Header: Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, big endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x404860 Start of program headers: 52 (bytes into file) Start of section headers: 425808 (bytes into file) Flags: 0x808e1105, noreorder, cpic, 32bitmode, unknown CPU, o32, mips64r2 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 9 Size of section headers: 40 (bytes) Number of section headers: 33 Section header string table index: 32 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-22 11:13 [Qemu-devel] Support for NetLogic XLP Processors Duarte Silva @ 2015-03-25 11:26 ` Duarte Silva 2015-03-25 13:13 ` James Hogan 1 sibling, 0 replies; 12+ messages in thread From: Duarte Silva @ 2015-03-25 11:26 UTC (permalink / raw) To: qemu-devel Hi guys, could anybody help out? Is there a guide on how to implement new CPU's in QEMU (or that at least helps in that task) or on how to debug this kind of stuff? Cheers, Duarte On Sunday 22 March 2015 11:13:37 Duarte Silva wrote: > Hi guys, > > I have been struggling to get some binaries compiled for NetLogic XLP > processor to run under QEMU. I have tried a bunch of things (most going back > and forth) and always get the following error message: > > qemu: uncaught target signal 4 (Illegal instruction) - core dumped > Illegal instruction > > I tried to debug it using GDB but to no avail. Does anybody have ideas? I'm > running QEMU 2.2.1. > > Thanks for any help, cheers, > Duarte ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-22 11:13 [Qemu-devel] Support for NetLogic XLP Processors Duarte Silva 2015-03-25 11:26 ` Duarte Silva @ 2015-03-25 13:13 ` James Hogan 2015-03-25 14:20 ` Duarte Silva 1 sibling, 1 reply; 12+ messages in thread From: James Hogan @ 2015-03-25 13:13 UTC (permalink / raw) To: Duarte Silva, qemu-devel [-- Attachment #1: Type: text/plain, Size: 985 bytes --] Hi Duarte, On 22/03/15 11:13, Duarte Silva wrote: > Hi guys, > > I have been struggling to get some binaries compiled for NetLogic XLP > processor to run under QEMU. I have tried a bunch of things (most going back > and forth) and always get the following error message: > > qemu: uncaught target signal 4 (Illegal instruction) - core dumped > Illegal instruction > > I tried to debug it using GDB but to no avail. Does anybody have ideas? I'm > running QEMU 2.2.1. It sounds like the program had an instruction that QEMU doesn't recognise, or doesn't think should be allowed on the current CPU which you've set with -cpu. You might be able to find out what that instruction is by putting this on your qemu command line: -singlestep -d in_asm that will cause it to only translate one instruction at a time, and to dump each one as it is translated. The last one printed will very likely to be the one that is causing the problem. Cheers James [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 13:13 ` James Hogan @ 2015-03-25 14:20 ` Duarte Silva 2015-03-25 14:44 ` Leon Alrae 0 siblings, 1 reply; 12+ messages in thread From: Duarte Silva @ 2015-03-25 14:20 UTC (permalink / raw) To: James Hogan; +Cc: qemu-devel On Wednesday 25 March 2015 13:13:14 James Hogan wrote: > Hi Duarte, > > On 22/03/15 11:13, Duarte Silva wrote: > > Hi guys, > > > > I have been struggling to get some binaries compiled for NetLogic XLP > > processor to run under QEMU. I have tried a bunch of things (most going > > back and forth) and always get the following error message: > > > > qemu: uncaught target signal 4 (Illegal instruction) - core dumped > > Illegal instruction > > > > I tried to debug it using GDB but to no avail. Does anybody have ideas? > > I'm > > running QEMU 2.2.1. > > It sounds like the program had an instruction that QEMU doesn't > recognise, or doesn't think should be allowed on the current CPU which > you've set with -cpu. You might be able to find out what that > instruction is by putting this on your qemu command line: > > -singlestep -d in_asm Hi James, thanks for the help :) I have tried with all the CPU's available. None of them worked, so I just leave it as undefined. It seems the offending instruction is "udi4". (...) IN: 0x765d1fa4: udi4 a0,v0,zero,0x0 OUT: [size=84] 0x606026b0: mov -0x4(%r14),%ebp 0x606026b4: test %ebp,%ebp 0x606026b6: jne 0x606026f5 0x606026bc: mov $0x765d1fa4,%ebp 0x606026c1: mov %ebp,0x80(%r14) 0x606026c8: mov %r14,%rdi 0x606026cb: mov $0x14,%esi 0x606026d0: callq 0x600acaa0 0x606026d5: jmpq 0x606026da 0x606026da: mov $0x765d1fa8,%ebp 0x606026df: mov %ebp,0x80(%r14) 0x606026e6: mov $0x7fe1de9d3bc0,%rax 0x606026f0: jmpq 0x62561d26 0x606026f5: mov $0x7fe1de9d3bc3,%rax 0x606026ff: jmpq 0x62561d26 do_raise_exception_err: 20 0 qemu: uncaught target signal 4 (Illegal instruction) - core dumped Illegal instruction I have found on QEMU code the following definitions for udi4 (on file disas/mips.c): {"udi4", "s,t,d,+1", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 }, {"udi4", "s,t,+2", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 }, {"udi4", "s,+3", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 }, {"udi4", "+4", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 }, Does any of these match the above instruction? It seems so no? Cheers, Duarte > > that will cause it to only translate one instruction at a time, and to > dump each one as it is translated. The last one printed will very likely > to be the one that is causing the problem. > > Cheers > James ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 14:20 ` Duarte Silva @ 2015-03-25 14:44 ` Leon Alrae 2015-03-25 14:54 ` Leon Alrae 0 siblings, 1 reply; 12+ messages in thread From: Leon Alrae @ 2015-03-25 14:44 UTC (permalink / raw) To: Duarte Silva, James Hogan; +Cc: qemu-devel Hi Duarte, On 25/03/2015 14:20, Duarte Silva wrote: > On Wednesday 25 March 2015 13:13:14 James Hogan wrote: >> Hi Duarte, >> >> On 22/03/15 11:13, Duarte Silva wrote: >>> Hi guys, >>> >>> I have been struggling to get some binaries compiled for NetLogic XLP >>> processor to run under QEMU. I have tried a bunch of things (most going >>> back and forth) and always get the following error message: >>> >>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped >>> Illegal instruction >>> >>> I tried to debug it using GDB but to no avail. Does anybody have ideas? >>> I'm >>> running QEMU 2.2.1. >> >> It sounds like the program had an instruction that QEMU doesn't >> recognise, or doesn't think should be allowed on the current CPU which >> you've set with -cpu. You might be able to find out what that >> instruction is by putting this on your qemu command line: >> >> -singlestep -d in_asm > Hi James, > > thanks for the help :) I have tried with all the CPU's available. None of them > worked, so I just leave it as undefined. It seems the offending instruction is > "udi4". > > (...) > IN: > 0x765d1fa4: udi4 a0,v0,zero,0x0 According to this line you are trying to use MIPS32 CPU whereas I presume you would like MIPS64R2? Please try 5KEf CPU for example which is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and little endian respectively. Leon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 14:44 ` Leon Alrae @ 2015-03-25 14:54 ` Leon Alrae 2015-03-25 15:38 ` Duarte Silva 0 siblings, 1 reply; 12+ messages in thread From: Leon Alrae @ 2015-03-25 14:54 UTC (permalink / raw) To: Duarte Silva, James Hogan; +Cc: qemu-devel On 25/03/2015 14:44, Leon Alrae wrote: > Hi Duarte, > > On 25/03/2015 14:20, Duarte Silva wrote: >> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: >>> Hi Duarte, >>> >>> On 22/03/15 11:13, Duarte Silva wrote: >>>> Hi guys, >>>> >>>> I have been struggling to get some binaries compiled for NetLogic XLP >>>> processor to run under QEMU. I have tried a bunch of things (most going >>>> back and forth) and always get the following error message: >>>> >>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped >>>> Illegal instruction >>>> >>>> I tried to debug it using GDB but to no avail. Does anybody have ideas? >>>> I'm >>>> running QEMU 2.2.1. >>> >>> It sounds like the program had an instruction that QEMU doesn't >>> recognise, or doesn't think should be allowed on the current CPU which >>> you've set with -cpu. You might be able to find out what that >>> instruction is by putting this on your qemu command line: >>> >>> -singlestep -d in_asm >> Hi James, >> >> thanks for the help :) I have tried with all the CPU's available. None of them >> worked, so I just leave it as undefined. It seems the offending instruction is >> "udi4". >> >> (...) >> IN: >> 0x765d1fa4: udi4 a0,v0,zero,0x0 > > According to this line you are trying to use MIPS32 CPU whereas I > presume you would like MIPS64R2? Please try 5KEf CPU for example which > is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and > little endian respectively. I just noticed the QEMU version you are using and it doesn't contain 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. Leon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 14:54 ` Leon Alrae @ 2015-03-25 15:38 ` Duarte Silva 2015-03-25 17:33 ` Leon Alrae 0 siblings, 1 reply; 12+ messages in thread From: Duarte Silva @ 2015-03-25 15:38 UTC (permalink / raw) To: Leon Alrae; +Cc: James Hogan, qemu-devel On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: > On 25/03/2015 14:44, Leon Alrae wrote: > > Hi Duarte, > > > > On 25/03/2015 14:20, Duarte Silva wrote: > >> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: > >>> Hi Duarte, > >>> > >>> On 22/03/15 11:13, Duarte Silva wrote: > >>>> Hi guys, > >>>> > >>>> I have been struggling to get some binaries compiled for NetLogic XLP > >>>> processor to run under QEMU. I have tried a bunch of things (most going > >>>> back and forth) and always get the following error message: > >>>> > >>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped > >>>> Illegal instruction > >>>> > >>>> I tried to debug it using GDB but to no avail. Does anybody have ideas? > >>>> I'm > >>>> running QEMU 2.2.1. > >>> > >>> It sounds like the program had an instruction that QEMU doesn't > >>> recognise, or doesn't think should be allowed on the current CPU which > >>> you've set with -cpu. You might be able to find out what that > >>> > >>> instruction is by putting this on your qemu command line: > >>> -singlestep -d in_asm > >> > >> Hi James, > >> > >> thanks for the help :) I have tried with all the CPU's available. None of > >> them worked, so I just leave it as undefined. It seems the offending > >> instruction is "udi4". > >> > >> (...) > >> IN: > >> 0x765d1fa4: udi4 a0,v0,zero,0x0 > > > > According to this line you are trying to use MIPS32 CPU whereas I > > presume you would like MIPS64R2? Please try 5KEf CPU for example which > > is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and > > little endian respectively. > > I just noticed the QEMU version you are using and it doesn't contain > 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. > > Leon Hi Leon, have a look at the "binary-info.txt" file in the first e-Mail. It does use the ELF magic for 32 bits ELF, not the 64 bits, that's why I get the following: # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic /bin/sh /bin/sh: Invalid ELF image for this architecture Is there a way to force the execution of the binary even if the flag doesn't match? Also, if you have a look at the flags you get: noreorder, cpic, 32bitmode, unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? Cheers, Duarte ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 15:38 ` Duarte Silva @ 2015-03-25 17:33 ` Leon Alrae 2015-03-25 23:54 ` Duarte Silva 0 siblings, 1 reply; 12+ messages in thread From: Leon Alrae @ 2015-03-25 17:33 UTC (permalink / raw) To: Duarte Silva; +Cc: James Hogan, qemu-devel On 25/03/2015 15:38, Duarte Silva wrote: > On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: >> On 25/03/2015 14:44, Leon Alrae wrote: >>> Hi Duarte, >>> >>> On 25/03/2015 14:20, Duarte Silva wrote: >>>> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: >>>>> Hi Duarte, >>>>> >>>>> On 22/03/15 11:13, Duarte Silva wrote: >>>>>> Hi guys, >>>>>> >>>>>> I have been struggling to get some binaries compiled for NetLogic XLP >>>>>> processor to run under QEMU. I have tried a bunch of things (most going >>>>>> back and forth) and always get the following error message: >>>>>> >>>>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped >>>>>> Illegal instruction >>>>>> >>>>>> I tried to debug it using GDB but to no avail. Does anybody have ideas? >>>>>> I'm >>>>>> running QEMU 2.2.1. >>>>> >>>>> It sounds like the program had an instruction that QEMU doesn't >>>>> recognise, or doesn't think should be allowed on the current CPU which >>>>> you've set with -cpu. You might be able to find out what that >>>>> >>>>> instruction is by putting this on your qemu command line: >>>>> -singlestep -d in_asm >>>> >>>> Hi James, >>>> >>>> thanks for the help :) I have tried with all the CPU's available. None of >>>> them worked, so I just leave it as undefined. It seems the offending >>>> instruction is "udi4". >>>> >>>> (...) >>>> IN: >>>> 0x765d1fa4: udi4 a0,v0,zero,0x0 >>> >>> According to this line you are trying to use MIPS32 CPU whereas I >>> presume you would like MIPS64R2? Please try 5KEf CPU for example which >>> is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and >>> little endian respectively. >> >> I just noticed the QEMU version you are using and it doesn't contain >> 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. >> >> Leon > > Hi Leon, > > have a look at the "binary-info.txt" file in the first e-Mail. It does use the > ELF magic for 32 bits ELF, not the 64 bits, that's why I get the following: > > # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic /bin/sh > /bin/sh: Invalid ELF image for this architecture > > Is there a way to force the execution of the binary even if the flag doesn't > match? > > Also, if you have a look at the flags you get: noreorder, cpic, 32bitmode, > unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? I see, this mips64r2 binary has o32 ABI. It indeed would work in qemu-mips provided there are no mips64r2-specific instructions. I think I jumped a bit too quickly to the conclusion. QEMU's mips/disas doesn't help much in this case as it just indicates User Defined Instruction. Presumably this instruction is specific to this processor and is missing in QEMU. Are you able to get disassembly of your program and look up what is under 0x765d1fa4 address which caused the illegal instruction? Leon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 17:33 ` Leon Alrae @ 2015-03-25 23:54 ` Duarte Silva 2015-03-26 9:29 ` Leon Alrae 0 siblings, 1 reply; 12+ messages in thread From: Duarte Silva @ 2015-03-25 23:54 UTC (permalink / raw) To: Leon Alrae; +Cc: James Hogan, qemu-devel On Wednesday 25 March 2015 17:33:59 Leon Alrae wrote: > On 25/03/2015 15:38, Duarte Silva wrote: > > On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: > >> On 25/03/2015 14:44, Leon Alrae wrote: > >>> Hi Duarte, > >>> > >>> On 25/03/2015 14:20, Duarte Silva wrote: > >>>> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: > >>>>> Hi Duarte, > >>>>> > >>>>> On 22/03/15 11:13, Duarte Silva wrote: > >>>>>> Hi guys, > >>>>>> > >>>>>> I have been struggling to get some binaries compiled for NetLogic XLP > >>>>>> processor to run under QEMU. I have tried a bunch of things (most > >>>>>> going > >>>>>> back and forth) and always get the following error message: > >>>>>> > >>>>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped > >>>>>> Illegal instruction > >>>>>> > >>>>>> I tried to debug it using GDB but to no avail. Does anybody have > >>>>>> ideas? > >>>>>> I'm > >>>>>> running QEMU 2.2.1. > >>>>> > >>>>> It sounds like the program had an instruction that QEMU doesn't > >>>>> recognise, or doesn't think should be allowed on the current CPU which > >>>>> you've set with -cpu. You might be able to find out what that > >>>>> > >>>>> instruction is by putting this on your qemu command line: > >>>>> -singlestep -d in_asm > >>>> > >>>> Hi James, > >>>> > >>>> thanks for the help :) I have tried with all the CPU's available. None > >>>> of > >>>> them worked, so I just leave it as undefined. It seems the offending > >>>> instruction is "udi4". > >>>> > >>>> (...) > >>>> IN: > >>>> 0x765d1fa4: udi4 a0,v0,zero,0x0 > >>> > >>> According to this line you are trying to use MIPS32 CPU whereas I > >>> presume you would like MIPS64R2? Please try 5KEf CPU for example which > >>> is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and > >>> little endian respectively. > >> > >> I just noticed the QEMU version you are using and it doesn't contain > >> 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. > >> > >> Leon > > > > Hi Leon, > > > > have a look at the "binary-info.txt" file in the first e-Mail. It does use > > the ELF magic for 32 bits ELF, not the 64 bits, that's why I get the > > following: > > > > # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic /bin/sh > > /bin/sh: Invalid ELF image for this architecture > > > > Is there a way to force the execution of the binary even if the flag > > doesn't match? > > > > Also, if you have a look at the flags you get: noreorder, cpic, 32bitmode, > > unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? > > I see, this mips64r2 binary has o32 ABI. It indeed would work in > qemu-mips provided there are no mips64r2-specific instructions. I think > I jumped a bit too quickly to the conclusion. > > QEMU's mips/disas doesn't help much in this case as it just indicates > User Defined Instruction. Presumably this instruction is specific to > this processor and is missing in QEMU. Are you able to get disassembly > of your program and look up what is under 0x765d1fa4 address which > caused the illegal instruction? Hi Leon, using IDA with a remote debug session to QEMU I got the following disassembly (kept surrounding instructions to give some context). To IDA, this custom instruction is also unknown. MEMORY:765D1F90 sw $v1, 4($v0) MEMORY:765D1F94 addu $a0, $a1 MEMORY:765D1F98 sw $a0, 0($v0) MEMORY:765D1F9C MEMORY:765D1F9C loc_765D1F9C: MEMORY:765D1F9C addiu $a0, $s1, 0x51B0 MEMORY:765D1FA0 move $v0, $zero MEMORY:765D1FA0 # ----------------------- MEMORY:765D1FA4 .byte 0x70 # p MEMORY:765D1FA5 .byte 0x82 # é MEMORY:765D1FA6 .byte 0 MEMORY:765D1FA7 .byte 0x14 MEMORY:765D1FA8 # ----------------------- MEMORY:765D1FA8 slti $v0, 2 MEMORY:765D1FAC beqz $v0, loc_765D204C MEMORY:765D1FB0 nop MEMORY:765D1FB4 lw $ra, 0x24($sp) MEMORY:765D1FB8 MEMORY:765D1FB8 loc_765D1FB8: MEMORY:765D1FB8 move $v0, $s0 MEMORY:765D1FBC lw $s1, 0x20($sp) MEMORY:765D1FC0 lw $s0, 0x1C($sp) Thanks for everything, Duarte > > Leon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-25 23:54 ` Duarte Silva @ 2015-03-26 9:29 ` Leon Alrae 2015-03-26 9:34 ` James Hogan 0 siblings, 1 reply; 12+ messages in thread From: Leon Alrae @ 2015-03-26 9:29 UTC (permalink / raw) To: Duarte Silva; +Cc: James Hogan, qemu-devel Hi Duarte, On 25/03/2015 23:54, Duarte Silva wrote: > On Wednesday 25 March 2015 17:33:59 Leon Alrae wrote: >> On 25/03/2015 15:38, Duarte Silva wrote: >>> On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: >>>> On 25/03/2015 14:44, Leon Alrae wrote: >>>>> Hi Duarte, >>>>> >>>>> On 25/03/2015 14:20, Duarte Silva wrote: >>>>>> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: >>>>>>> Hi Duarte, >>>>>>> >>>>>>> On 22/03/15 11:13, Duarte Silva wrote: >>>>>>>> Hi guys, >>>>>>>> >>>>>>>> I have been struggling to get some binaries compiled for NetLogic XLP >>>>>>>> processor to run under QEMU. I have tried a bunch of things (most >>>>>>>> going >>>>>>>> back and forth) and always get the following error message: >>>>>>>> >>>>>>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped >>>>>>>> Illegal instruction >>>>>>>> >>>>>>>> I tried to debug it using GDB but to no avail. Does anybody have >>>>>>>> ideas? >>>>>>>> I'm >>>>>>>> running QEMU 2.2.1. >>>>>>> >>>>>>> It sounds like the program had an instruction that QEMU doesn't >>>>>>> recognise, or doesn't think should be allowed on the current CPU which >>>>>>> you've set with -cpu. You might be able to find out what that >>>>>>> >>>>>>> instruction is by putting this on your qemu command line: >>>>>>> -singlestep -d in_asm >>>>>> >>>>>> Hi James, >>>>>> >>>>>> thanks for the help :) I have tried with all the CPU's available. None >>>>>> of >>>>>> them worked, so I just leave it as undefined. It seems the offending >>>>>> instruction is "udi4". >>>>>> >>>>>> (...) >>>>>> IN: >>>>>> 0x765d1fa4: udi4 a0,v0,zero,0x0 >>>>> >>>>> According to this line you are trying to use MIPS32 CPU whereas I >>>>> presume you would like MIPS64R2? Please try 5KEf CPU for example which >>>>> is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and >>>>> little endian respectively. >>>> >>>> I just noticed the QEMU version you are using and it doesn't contain >>>> 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. >>>> >>>> Leon >>> >>> Hi Leon, >>> >>> have a look at the "binary-info.txt" file in the first e-Mail. It does use >>> the ELF magic for 32 bits ELF, not the 64 bits, that's why I get the >>> following: >>> >>> # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic /bin/sh >>> /bin/sh: Invalid ELF image for this architecture >>> >>> Is there a way to force the execution of the binary even if the flag >>> doesn't match? >>> >>> Also, if you have a look at the flags you get: noreorder, cpic, 32bitmode, >>> unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? >> >> I see, this mips64r2 binary has o32 ABI. It indeed would work in >> qemu-mips provided there are no mips64r2-specific instructions. I think >> I jumped a bit too quickly to the conclusion. >> >> QEMU's mips/disas doesn't help much in this case as it just indicates >> User Defined Instruction. Presumably this instruction is specific to >> this processor and is missing in QEMU. Are you able to get disassembly >> of your program and look up what is under 0x765d1fa4 address which >> caused the illegal instruction? > > Hi Leon, > > using IDA with a remote debug session to QEMU I got the following disassembly > (kept surrounding instructions to give some context). To IDA, this custom > instruction is also unknown. > > MEMORY:765D1F90 sw $v1, 4($v0) > MEMORY:765D1F94 addu $a0, $a1 > MEMORY:765D1F98 sw $a0, 0($v0) > MEMORY:765D1F9C > MEMORY:765D1F9C loc_765D1F9C: > MEMORY:765D1F9C addiu $a0, $s1, 0x51B0 > MEMORY:765D1FA0 move $v0, $zero > MEMORY:765D1FA0 # ----------------------- > MEMORY:765D1FA4 .byte 0x70 # p > MEMORY:765D1FA5 .byte 0x82 # é > MEMORY:765D1FA6 .byte 0 > MEMORY:765D1FA7 .byte 0x14 > MEMORY:765D1FA8 # ----------------------- > MEMORY:765D1FA8 slti $v0, 2 > MEMORY:765D1FAC beqz $v0, loc_765D204C > MEMORY:765D1FB0 nop > MEMORY:765D1FB4 lw $ra, 0x24($sp) > MEMORY:765D1FB8 > MEMORY:765D1FB8 loc_765D1FB8: > MEMORY:765D1FB8 move $v0, $s0 > MEMORY:765D1FBC lw $s1, 0x20($sp) > MEMORY:765D1FC0 lw $s0, 0x1C($sp) According to binutils this is SWAPW which belongs to XLR: {"swapw", "t,b", 0x70000014, 0xfc00ffff, MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 }, I'm afraid you won't be able to run binaries built for NetLogic XLP until someone implements these instructions in QEMU. Regards, Leon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-26 9:29 ` Leon Alrae @ 2015-03-26 9:34 ` James Hogan 2015-03-26 9:54 ` Duarte Silva 0 siblings, 1 reply; 12+ messages in thread From: James Hogan @ 2015-03-26 9:34 UTC (permalink / raw) To: Leon Alrae, Duarte Silva; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 5137 bytes --] On 26/03/15 09:29, Leon Alrae wrote: > Hi Duarte, > > On 25/03/2015 23:54, Duarte Silva wrote: >> On Wednesday 25 March 2015 17:33:59 Leon Alrae wrote: >>> On 25/03/2015 15:38, Duarte Silva wrote: >>>> On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: >>>>> On 25/03/2015 14:44, Leon Alrae wrote: >>>>>> Hi Duarte, >>>>>> >>>>>> On 25/03/2015 14:20, Duarte Silva wrote: >>>>>>> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: >>>>>>>> Hi Duarte, >>>>>>>> >>>>>>>> On 22/03/15 11:13, Duarte Silva wrote: >>>>>>>>> Hi guys, >>>>>>>>> >>>>>>>>> I have been struggling to get some binaries compiled for NetLogic XLP >>>>>>>>> processor to run under QEMU. I have tried a bunch of things (most >>>>>>>>> going >>>>>>>>> back and forth) and always get the following error message: >>>>>>>>> >>>>>>>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped >>>>>>>>> Illegal instruction >>>>>>>>> >>>>>>>>> I tried to debug it using GDB but to no avail. Does anybody have >>>>>>>>> ideas? >>>>>>>>> I'm >>>>>>>>> running QEMU 2.2.1. >>>>>>>> >>>>>>>> It sounds like the program had an instruction that QEMU doesn't >>>>>>>> recognise, or doesn't think should be allowed on the current CPU which >>>>>>>> you've set with -cpu. You might be able to find out what that >>>>>>>> >>>>>>>> instruction is by putting this on your qemu command line: >>>>>>>> -singlestep -d in_asm >>>>>>> >>>>>>> Hi James, >>>>>>> >>>>>>> thanks for the help :) I have tried with all the CPU's available. None >>>>>>> of >>>>>>> them worked, so I just leave it as undefined. It seems the offending >>>>>>> instruction is "udi4". >>>>>>> >>>>>>> (...) >>>>>>> IN: >>>>>>> 0x765d1fa4: udi4 a0,v0,zero,0x0 >>>>>> >>>>>> According to this line you are trying to use MIPS32 CPU whereas I >>>>>> presume you would like MIPS64R2? Please try 5KEf CPU for example which >>>>>> is available in qemu-mips64 and qemu-mips64el QEMU binaries for big and >>>>>> little endian respectively. >>>>> >>>>> I just noticed the QEMU version you are using and it doesn't contain >>>>> 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. >>>>> >>>>> Leon >>>> >>>> Hi Leon, >>>> >>>> have a look at the "binary-info.txt" file in the first e-Mail. It does use >>>> the ELF magic for 32 bits ELF, not the 64 bits, that's why I get the >>>> following: >>>> >>>> # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic /bin/sh >>>> /bin/sh: Invalid ELF image for this architecture >>>> >>>> Is there a way to force the execution of the binary even if the flag >>>> doesn't match? >>>> >>>> Also, if you have a look at the flags you get: noreorder, cpic, 32bitmode, >>>> unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? >>> >>> I see, this mips64r2 binary has o32 ABI. It indeed would work in >>> qemu-mips provided there are no mips64r2-specific instructions. I think >>> I jumped a bit too quickly to the conclusion. >>> >>> QEMU's mips/disas doesn't help much in this case as it just indicates >>> User Defined Instruction. Presumably this instruction is specific to >>> this processor and is missing in QEMU. Are you able to get disassembly >>> of your program and look up what is under 0x765d1fa4 address which >>> caused the illegal instruction? >> >> Hi Leon, >> >> using IDA with a remote debug session to QEMU I got the following disassembly >> (kept surrounding instructions to give some context). To IDA, this custom >> instruction is also unknown. >> >> MEMORY:765D1F90 sw $v1, 4($v0) >> MEMORY:765D1F94 addu $a0, $a1 >> MEMORY:765D1F98 sw $a0, 0($v0) >> MEMORY:765D1F9C >> MEMORY:765D1F9C loc_765D1F9C: >> MEMORY:765D1F9C addiu $a0, $s1, 0x51B0 >> MEMORY:765D1FA0 move $v0, $zero >> MEMORY:765D1FA0 # ----------------------- >> MEMORY:765D1FA4 .byte 0x70 # p >> MEMORY:765D1FA5 .byte 0x82 # é >> MEMORY:765D1FA6 .byte 0 >> MEMORY:765D1FA7 .byte 0x14 >> MEMORY:765D1FA8 # ----------------------- >> MEMORY:765D1FA8 slti $v0, 2 >> MEMORY:765D1FAC beqz $v0, loc_765D204C >> MEMORY:765D1FB0 nop >> MEMORY:765D1FB4 lw $ra, 0x24($sp) >> MEMORY:765D1FB8 >> MEMORY:765D1FB8 loc_765D1FB8: >> MEMORY:765D1FB8 move $v0, $s0 >> MEMORY:765D1FBC lw $s1, 0x20($sp) >> MEMORY:765D1FC0 lw $s0, 0x1C($sp) > > According to binutils this is SWAPW which belongs to XLR: > {"swapw", "t,b", 0x70000014, 0xfc00ffff, > MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 }, > > I'm afraid you won't be able to run binaries built for NetLogic XLP > until someone implements these instructions in QEMU. Thanks Leon, you just beat me to it with that :-) For reference, you can disassemble xlp specific code with objdump using "-m mips:xlp": $ cat test.S .text .word 0x70820014 $ mips-linux-gnu-gcc -o test.o -c test.S $ mips-linux-gnu-objdump -d test.o -m mips:xlp test.o: file format elf32-tradbigmips Disassembly of section .text: 00000000 <.text>: 0: 70820014 swapw v0,a0 ... Cheers James [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] Support for NetLogic XLP Processors 2015-03-26 9:34 ` James Hogan @ 2015-03-26 9:54 ` Duarte Silva 0 siblings, 0 replies; 12+ messages in thread From: Duarte Silva @ 2015-03-26 9:54 UTC (permalink / raw) To: James Hogan, Leon Alrae; +Cc: qemu-devel On Thursday 26 March 2015 09:34:14 James Hogan wrote: > On 26/03/15 09:29, Leon Alrae wrote: > > Hi Duarte, > > > > On 25/03/2015 23:54, Duarte Silva wrote: > >> On Wednesday 25 March 2015 17:33:59 Leon Alrae wrote: > >>> On 25/03/2015 15:38, Duarte Silva wrote: > >>>> On Wednesday 25 March 2015 14:54:41 Leon Alrae wrote: > >>>>> On 25/03/2015 14:44, Leon Alrae wrote: > >>>>>> Hi Duarte, > >>>>>> > >>>>>> On 25/03/2015 14:20, Duarte Silva wrote: > >>>>>>> On Wednesday 25 March 2015 13:13:14 James Hogan wrote: > >>>>>>>> Hi Duarte, > >>>>>>>> > >>>>>>>> On 22/03/15 11:13, Duarte Silva wrote: > >>>>>>>>> Hi guys, > >>>>>>>>> > >>>>>>>>> I have been struggling to get some binaries compiled for NetLogic > >>>>>>>>> XLP > >>>>>>>>> processor to run under QEMU. I have tried a bunch of things (most > >>>>>>>>> going > >>>>>>>>> back and forth) and always get the following error message: > >>>>>>>>> > >>>>>>>>> qemu: uncaught target signal 4 (Illegal instruction) - core dumped > >>>>>>>>> Illegal instruction > >>>>>>>>> > >>>>>>>>> I tried to debug it using GDB but to no avail. Does anybody have > >>>>>>>>> ideas? > >>>>>>>>> I'm > >>>>>>>>> running QEMU 2.2.1. > >>>>>>>> > >>>>>>>> It sounds like the program had an instruction that QEMU doesn't > >>>>>>>> recognise, or doesn't think should be allowed on the current CPU > >>>>>>>> which > >>>>>>>> you've set with -cpu. You might be able to find out what that > >>>>>>>> > >>>>>>>> instruction is by putting this on your qemu command line: > >>>>>>>> -singlestep -d in_asm > >>>>>>> > >>>>>>> Hi James, > >>>>>>> > >>>>>>> thanks for the help :) I have tried with all the CPU's available. > >>>>>>> None > >>>>>>> of > >>>>>>> them worked, so I just leave it as undefined. It seems the offending > >>>>>>> instruction is "udi4". > >>>>>>> > >>>>>>> (...) > >>>>>>> IN: > >>>>>>> 0x765d1fa4: udi4 a0,v0,zero,0x0 > >>>>>> > >>>>>> According to this line you are trying to use MIPS32 CPU whereas I > >>>>>> presume you would like MIPS64R2? Please try 5KEf CPU for example > >>>>>> which > >>>>>> is available in qemu-mips64 and qemu-mips64el QEMU binaries for big > >>>>>> and > >>>>>> little endian respectively. > >>>>> > >>>>> I just noticed the QEMU version you are using and it doesn't contain > >>>>> 5KEf and 5KEc CPUs. Please try MIPS64R2-generic. > >>>>> > >>>>> Leon > >>>> > >>>> Hi Leon, > >>>> > >>>> have a look at the "binary-info.txt" file in the first e-Mail. It does > >>>> use > >>>> the ELF magic for 32 bits ELF, not the 64 bits, that's why I get the > >>>> following: > >>>> > >>>> # chroot rootfs/ /usr/local/bin/qemu-mips64 -cpu MIPS64R2-generic > >>>> /bin/sh > >>>> /bin/sh: Invalid ELF image for this architecture > >>>> > >>>> Is there a way to force the execution of the binary even if the flag > >>>> doesn't match? > >>>> > >>>> Also, if you have a look at the flags you get: noreorder, cpic, > >>>> 32bitmode, > >>>> unknown CPU, o32, mips64r2. So, is it 64 bits or 32 bits ELF file? > >>> > >>> I see, this mips64r2 binary has o32 ABI. It indeed would work in > >>> qemu-mips provided there are no mips64r2-specific instructions. I think > >>> I jumped a bit too quickly to the conclusion. > >>> > >>> QEMU's mips/disas doesn't help much in this case as it just indicates > >>> User Defined Instruction. Presumably this instruction is specific to > >>> this processor and is missing in QEMU. Are you able to get disassembly > >>> of your program and look up what is under 0x765d1fa4 address which > >>> caused the illegal instruction? > >> > >> Hi Leon, > >> > >> using IDA with a remote debug session to QEMU I got the following > >> disassembly (kept surrounding instructions to give some context). To > >> IDA, this custom instruction is also unknown. > >> > >> MEMORY:765D1F90 sw $v1, 4($v0) > >> MEMORY:765D1F94 addu $a0, $a1 > >> MEMORY:765D1F98 sw $a0, 0($v0) > >> MEMORY:765D1F9C > >> MEMORY:765D1F9C loc_765D1F9C: > >> MEMORY:765D1F9C addiu $a0, $s1, 0x51B0 > >> MEMORY:765D1FA0 move $v0, $zero > >> MEMORY:765D1FA0 # ----------------------- > >> MEMORY:765D1FA4 .byte 0x70 # p > >> MEMORY:765D1FA5 .byte 0x82 # é > >> MEMORY:765D1FA6 .byte 0 > >> MEMORY:765D1FA7 .byte 0x14 > >> MEMORY:765D1FA8 # ----------------------- > >> MEMORY:765D1FA8 slti $v0, 2 > >> MEMORY:765D1FAC beqz $v0, loc_765D204C > >> MEMORY:765D1FB0 nop > >> MEMORY:765D1FB4 lw $ra, 0x24($sp) > >> MEMORY:765D1FB8 > >> MEMORY:765D1FB8 loc_765D1FB8: > >> MEMORY:765D1FB8 move $v0, $s0 > >> MEMORY:765D1FBC lw $s1, 0x20($sp) > >> MEMORY:765D1FC0 lw $s0, 0x1C($sp) > > > > According to binutils this is SWAPW which belongs to XLR: > > {"swapw", "t,b", 0x70000014, 0xfc00ffff, > > MOD_1|RD_2|LM|SM, 0, XLR, 0, 0 }, > > > > I'm afraid you won't be able to run binaries built for NetLogic XLP > > until someone implements these instructions in QEMU. > > Thanks Leon, you just beat me to it with that :-) > > For reference, you can disassemble xlp specific code with objdump using > "-m mips:xlp": > > $ cat test.S > .text > .word 0x70820014 > $ mips-linux-gnu-gcc -o test.o -c test.S > $ mips-linux-gnu-objdump -d test.o -m mips:xlp > > test.o: file format elf32-tradbigmips > > > Disassembly of section .text: > > 00000000 <.text>: > 0: 70820014 swapw v0,a0 > ... > > Cheers > James Hi guys, you rock! Thanks for all the information. I will have a look a QEMU and its documentation to try and understand how to implement this missing instructions (I have found others). Once again, thanks for your time, cheers, Duarte ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2015-03-26 9:54 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-03-22 11:13 [Qemu-devel] Support for NetLogic XLP Processors Duarte Silva 2015-03-25 11:26 ` Duarte Silva 2015-03-25 13:13 ` James Hogan 2015-03-25 14:20 ` Duarte Silva 2015-03-25 14:44 ` Leon Alrae 2015-03-25 14:54 ` Leon Alrae 2015-03-25 15:38 ` Duarte Silva 2015-03-25 17:33 ` Leon Alrae 2015-03-25 23:54 ` Duarte Silva 2015-03-26 9:29 ` Leon Alrae 2015-03-26 9:34 ` James Hogan 2015-03-26 9:54 ` Duarte Silva
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.