obtener el lr de la persona que llama desde la subrutina a la variable C - armar

Tengo una función C que se supone que debe obtener el valor del registro lr de la persona que llama en una variable local.

He probado el siguiente código:

volatile long lr;
asm(
    "str %0, [sp, #4]\n" :
    "=r", (lr)
);

Sin embargo, esto no cambia nada. No es que obtenga el valor incorrecto, es solo que el valor de la variable local lr no cambia en absoluto (contiene basura).

¿Algunas ideas?

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta