получить lr вызывающего из подпрограммы в переменную C - arm

У меня есть функция C, которая должна получить значение регистра lr вызывающего в локальную переменную.

Я пробовал следующий код:

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

Однако это ничего не меняет. Дело не в том, что я получаю неправильное значение, просто в том, что значение локальной переменной lr совсем не меняется (содержит мусор).

Есть идеи?

Спасибо!