Matthew Flatt <
mfl...@cs.utah.edu> writes:
> Since the build log says "illegal instruction", what instruction is it
> trying to execute? Since there's so much variation in supported ARM
> instructions, maybe Racket's JIT is trying to use one not supported by
> the machine. Or maybe execution has just jumped to a bad place, such as
> the middle of an instruction.
>
> In gdb, you should be able to use `disassemble` in the vicinity of the
> address where Racket crashes (like 0xb6ea3254), but you may need to use
>
I tried both modes, at least to my inexpert eye they look the same.
The hardware claims to be arm v7 (Freescale i.MX53).
(gdb) set arm fallback-mode arm
(gdb) disassemble
Dump of assembler code for function malloc_stats:
0xb6ea324c <+0>: ldr r1, [pc, #328] ; (0xb6ea3398 <malloc_stats+332>)
0xb6ea324e <+2>: ldr r2, [pc, #332] ; (0xb6ea339c <malloc_stats+336>)
0xb6ea3250 <+4>: add r1, pc
0xb6ea3252 <+6>: ldr r3, [pc, #332] ; (0xb6ea33a0 <malloc_stats+340>)
=> 0xb6ea3254 <+8>: stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xb6ea3258 <+12>: add r3, pc
0xb6ea325a <+14>: ldr r2, [r1, r2]
0xb6ea325c <+16>: sub sp, #60 ; 0x3c
0xb6ea325e <+18>: ldr r5, [pc, #324] ; (0xb6ea33a4 <malloc_stats+344>)
0xb6ea3260 <+20>: ldr r2, [r2, #0]
0xb6ea3262 <+22>: str r2, [sp, #52] ; 0x34
0xb6ea3264 <+24>: mov.w r2, #0
0xb6ea3268 <+28>: ldr r2, [r3, #64] ; 0x40
0xb6ea326a <+30>: add r5, pc
0xb6ea326c <+32>: ldr r7, [r3, #36] ; 0x24
0xb6ea326e <+34>: cmp r2, #0
0xb6ea3270 <+36>: blt.w 0xb6ea338c <malloc_stats+320>
0xb6ea3274 <+40>: ldr r3, [pc, #304] ; (0xb6ea33a8 <malloc_stats+348>)
0xb6ea3276 <+42>: add.w r9, sp, #12
0xb6ea327a <+46>: ldr r4, [pc, #304] ; (0xb6ea33ac <malloc_stats+352>)
0xb6ea327c <+48>: movs r6, #0
0xb6ea327e <+50>: Cannot access memory at address 0xb6ea327e
(gdb) set arm fallback-mode thumb
(gdb) disassemble
Dump of assembler code for function malloc_stats:
0xb6ea324c <+0>: ldr r1, [pc, #328] ; (0xb6ea3398 <malloc_stats+332>)
0xb6ea324e <+2>: ldr r2, [pc, #332] ; (0xb6ea339c <malloc_stats+336>)
0xb6ea3250 <+4>: add r1, pc
0xb6ea3252 <+6>: ldr r3, [pc, #332] ; (0xb6ea33a0 <malloc_stats+340>)
=> 0xb6ea3254 <+8>: stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xb6ea3258 <+12>: add r3, pc
0xb6ea325a <+14>: ldr r2, [r1, r2]
0xb6ea325c <+16>: sub sp, #60 ; 0x3c
0xb6ea325e <+18>: ldr r5, [pc, #324] ; (0xb6ea33a4 <malloc_stats+344>)
0xb6ea3260 <+20>: ldr r2, [r2, #0]
0xb6ea3262 <+22>: str r2, [sp, #52] ; 0x34
0xb6ea3264 <+24>: mov.w r2, #0
0xb6ea3268 <+28>: ldr r2, [r3, #64] ; 0x40
0xb6ea326a <+30>: add r5, pc
0xb6ea326c <+32>: ldr r7, [r3, #36] ; 0x24
0xb6ea326e <+34>: cmp r2, #0
0xb6ea3270 <+36>: blt.w 0xb6ea338c <malloc_stats+320>
0xb6ea3274 <+40>: ldr r3, [pc, #304] ; (0xb6ea33a8 <malloc_stats+348>)
0xb6ea3276 <+42>: add.w r9, sp, #12
0xb6ea327a <+46>: ldr r4, [pc, #304] ; (0xb6ea33ac <malloc_stats+352>)
0xb6ea327c <+48>: movs r6, #0
0xb6ea327e <+50>: Cannot access memory at address 0xb6ea327e
(gdb)