obter o lr do chamador da sub-rotina em C variável - braço

Eu tenho uma função C que é suposto obter o valor do registrador lr do chamador em uma variável local.

Eu tentei o seguinte código:

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

No entanto, isso não muda nada. Não é que eu receba o valor errado, é apenas que o valor da variável local lr não muda nada (contém lixo).

Alguma ideia?

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion