On 11/2/21 6:52 PM, Warner Losh wrote:
+ /* + * Thumb mode is encoded by the low bit in the entry point (since ARM can't + * execute at odd addresses). When it's set, set the Thumb bit (T) in the + * CPSR. + */ + if (entry & 0x1) { + cpsr_write(env, cpsr_read(env) | CPSR_T, CPSR_T, CPSRWriteByInstr); + }
This should be cpsr_write(env, (entry & 1) * CPSR_T, CPSR_T, CPSRWriteByInstr); because you need to clear T for arm mode as well.
+ /* FIXME - what to for failure of get_user()? */ + get_user_ual(regs->ARM_r2, stack + 8); /* envp */ + get_user_ual(regs->ARM_r1, stack + 4); /* envp */
Surely these values are present in image_info anyway? r~