decomp:problems
This is an old revision of the document!
Known Problems
Toolchain Problems
- The exact version of ARMCC used to compile the game is unknown, so version 4.1 build 713/894/1049 are used since they are the most accurate.
- The compiler flags used to compile the game may not be fully correct.
- The decompilation uses the devkitPro linker, since older armlink versions seem to have a time bomb in them, which is problematic due to the linker having its own special way of inlining, and the devkitPro linker not being able to link with the Rogue Wave C++ standard library.
- Constructors in which 2 int-sized members are being initialized to different values (including vtables) will mismatch, due to the compiler used splitting the 'stm' instruction into 'str' instructions. (temporary fix with #pragma O3)
Example (_ZN2al13NerveExecutorC1EPKc):
17b194: ldr r1, [pc, #8] ; 0x17b1a4 | 17b194: ldr r1, [pc, #0xc] ; 0x17b1a8 > 17b198: str r1, [r0] 17b198: mov r2, #0 r 17b19c: mov r1, #0 17b19c: stm r0, {r1, r2} | 17b1a0: str r1, [r0, #4] 17b1a0: bx lr 17b1a4: bx lr
- Some while/for loops with if statements inside them will have 'nop' instructions right before the conditional jump instruction, which are not generated by the used compiler.
Example (_ZN16alSensorFunction20findSensorTypeByNameEPKc):
7820c: bl 192308 ~> 7820c: bl 192308 ~> 78210: cmp r0, #0 78210: cmp r0, #0 78214: nop {0} < 78218: beq 78228 ~> 78214: beq 78224 ~> 7821c: add r0, r5, r4, lsl #3 r 78218: add r0, r8, r4, lsl #3 78220: ldr r7, [r0, #4] | 7821c: ldrb r6, [r0, #4] 78224: b 78234 ~> 78220: b 78230 ~> 78228: ~> add r4, r4, #1 78224: ~> add r4, r4, #1
- Some constructors initialize members in a non-linear order/twice, the used compiler will remove any initializers that happen twice, and will order the initializers by the order they are defined in.
decomp/problems.1666357305.txt.gz · Last modified: 2022/10/21 13:01 by fruityloops