Tengo un archivo ejecutable que se bloquea después de que main
haya terminado todas sus instrucciones y se ejecute la última instrucción del ensamblador. Justo antes de que el programa se bloquee, hago disas
en GDB:
0x2001c054 <+84>: movt r3, #16384 ; 0x4000
0x2001c058 <+88>: ldrh r3, [r3, #16]
0x2001c05a <+90>: uxth r3, r3
0x2001c05c <+92>: str r3, [sp, #0]
0x2001c05e <+94>: bl 0x2001c0f8 <scream>
0x2001c062 <+98>: mov.w r3, #0
0x2001c066 <+102>: mov r0, r3
0x2001c068 <+104>: add sp, #28
=> 0x2001c06a <+106>: pop {pc}
End of assembler dump.
Ahora, si voy a la siguiente instrucción ( ni
en GDB), obtengo lo siguiente en GDB:
0xfffffffe en ?? ()
Además, OpenOCD (que utilizo para comunicarme con mi placa STM32F2) da el siguiente error:
Error: dirección + tamaño ajustado (0xfffffffe, 0x00000004)
¿Cómo puedo decirle a mi ejecutable que salga correctamente?