Cross compiled guile 3.0.2 "Illegal instruction" on 32bit arm.
From:
dsmich
Subject:
Cross compiled guile 3.0.2 "Illegal instruction" on 32bit arm.
Date:
Wed, 01 Apr 2020 21:38:32 +0000
I'm attempting to use buildroot to cross compile guile 3.0.2 for 32bit arm (rpi3).
Note that guile runs fine with the jit disabled by GUILE_JIT_THRESHOLD=-1
When guile starts, I get an "Illegal instruction".
# GUILE_JIT_LOG=3 guile jit: allocated code arena, 0x74f43000-0x74f83000 jit: mcode: 0x74f43000,+44 jit: mcode: 0x74f43030,+56 jit: mcode: 0x74f43070,+8 jit: vcode: start=0xa2261c,+6 entry=+0 jit: Instruction first seen at vcode 0xa2261c: instrument-entry jit: Instruction at vcode 0xa2261c: instrument-entry jit: Instruction first seen at vcode 0xa22624: assert-nargs-ee jit: Instruction at vcode 0xa22624: assert-nargs-ee jit: Instruction first seen at vcode 0xa22628: subr-call jit: Instruction at vcode 0xa22628: subr-call jit: Instruction first seen at vcode 0xa2262c: handle-interrupts jit: Instruction at vcode 0xa2262c: handle-interrupts jit: Instruction first seen at vcode 0xa22630: return-values jit: Instruction at vcode 0xa22630: return-values jit: mcode: 0x74f43080,+200 jit: created /tmp/perf-287.map jit: entering mcode: 0x74f43080 Illegal instruction
I got cross-gdb working. Here is another run, with the disassembled code
jit: mcode: 0x74edb080,+200 jit: created /tmp/perf-252.map jit: entering mcode: 0x74edb080
Dump of assembler code from 0x74edb080 to 0x74edb148: 0x74edb080: 0d 1a subs r5, r1, r0 0x74edb082: 20 2d cmp r5, #32 0x74edb084: 40 f0 35 80 bne.w 0x74edb0f2
Now, I'm not very familiar with arm and arm-thumb, but that code *seems* to be right to me. Looks like it was generated by emit_veneer() in libguile/lightening/lightening/arm-cpu.c
So what could be wrong here? How could this code generate an illegal instruction error?
Where do I go from here?
Thanks, -Dale
[Prev in Thread]
Current Thread
[Next in Thread]
Cross compiled guile 3.0.2 "Illegal instruction" on 32bit arm.,
dsmich<=