The ARMv7 build generates broken binaries (stack offset is zero for all stack pushes)
The ARMv7 build of the MRISC32 toolchain generates incorrect binaries (the ARM64 build works correctly, though).
For instance, the TraceLine
function in mc1quake
is compiled to the following code:
00000450 <TraceLine>:
450: c9225c01 ldwpc r9, #(0x97454 <cl+0xa70>)@pc
454: 5bbd3fc4 add sp, sp, #-60 ; 0xffffffc4
458: 2e1d0000 stw r16, [sp, #0]
45c: 00e03a11 mov r7, sp
460: 02000611 mov r16, r3
464: 00c00411 mov r6, r2
468: 00a00211 mov r5, r1
46c: d893f800 ldi r4, #1065353216 ; 0x3f800000
470: d8600000 ldi r3, #0
474: d8400000 ldi r2, #0
478: 582900d0 add r1, r9, #208 ; 0xd0
47c: 2fdd0000 stw lr, [sp, #0]
480: 2c1d0000 stw z, [sp, #0]
484: 2c1d0000 stw z, [sp, #0]
488: 2c1d0000 stw z, [sp, #0]
48c: 2c1d0000 stw z, [sp, #0]
490: 2c1d0000 stw z, [sp, #0]
494: 2c1d0000 stw z, [sp, #0]
498: 2c1d0000 stw z, [sp, #0]
49c: 2c1d0000 stw z, [sp, #0]
4a0: 2c1d0000 stw z, [sp, #0]
4a4: 2c1d0000 stw z, [sp, #0]
4a8: 2c1d0000 stw z, [sp, #0]
4ac: 2c1d0000 stw z, [sp, #0]
4b0: 2c1d0000 stw z, [sp, #0]
4b4: c7e11a0b bl #(0x46ce0 <SV_RecursiveHullCheck>)@pc
4b8: 0c3d0000 ldw r1, [sp, #0]
4bc: 0fdd0000 ldw lr, [sp, #0]
4c0: 2c300000 stw r1, [r16, #0]
4c4: 0c3d0000 ldw r1, [sp, #0]
4c8: 2c300000 stw r1, [r16, #0]
4cc: 0c3d0000 ldw r1, [sp, #0]
4d0: 2c300000 stw r1, [r16, #0]
4d4: 0e1d0000 ldw r16, [sp, #0]
4d8: 5bbd003c add sp, sp, #60 ; 0x3c
4dc: c3c00000 ret
...whereas the correct code should read (pay attention to sp
offsets):
00000450 <TraceLine>:
450: c9225bf9 ldwpc r9, #(0x97434 <cl+0xa70>)@pc
454: 5bbd3fc4 add sp, sp, #-60 ; 0xffffffc4
458: 2e1d0034 stw r16, [sp, #52] ; 0x34
45c: 00e03a11 mov r7, sp
460: 02000611 mov r16, r3
464: 00c00411 mov r6, r2
468: 00a00211 mov r5, r1
46c: d893f800 ldi r4, #1065353216 ; 0x3f800000
470: d8600000 ldi r3, #0
474: d8400000 ldi r2, #0
478: 582900d0 add r1, r9, #208 ; 0xd0
47c: 2fdd0038 stw lr, [sp, #56] ; 0x38
480: 2c1d0000 stw z, [sp, #0]
484: 2c1d0004 stw z, [sp, #4]
488: 2c1d0008 stw z, [sp, #8]
48c: 2c1d000c stw z, [sp, #12]
490: 2c1d0010 stw z, [sp, #16]
494: 2c1d0014 stw z, [sp, #20]
498: 2c1d0018 stw z, [sp, #24]
49c: 2c1d001c stw z, [sp, #28]
4a0: 2c1d0020 stw z, [sp, #32]
4a4: 2c1d0024 stw z, [sp, #36] ; 0x24
4a8: 2c1d0028 stw z, [sp, #40] ; 0x28
4ac: 2c1d002c stw z, [sp, #44] ; 0x2c
4b0: 2c1d0030 stw z, [sp, #48] ; 0x30
4b4: c7e11a0b bl #(0x46ce0 <SV_RecursiveHullCheck>)@pc
4b8: 0c3d0014 ldw r1, [sp, #20]
4bc: 0fdd0038 ldw lr, [sp, #56] ; 0x38
4c0: 2c300000 stw r1, [r16, #0]
4c4: 0c3d0018 ldw r1, [sp, #24]
4c8: 2c300004 stw r1, [r16, #4]
4cc: 0c3d001c ldw r1, [sp, #28]
4d0: 2c300008 stw r1, [r16, #8]
4d4: 0e1d0034 ldw r16, [sp, #52] ; 0x34
4d8: 5bbd003c add sp, sp, #60 ; 0x3c
4dc: c3c00000 ret