Jestem ciekawy dlaczego __builtin_return_address()
nie obsługuje innych argumentów niż 0 w ARM? To jest problem, że nie można w jakiś sposób wydedukować adresu funkcji wywołania ze stosu ARM? Albo coś jeszcze?GCC adres zwrotny funkcji wywołującej w architekturze ARM
Dzięki
W ARM adres zwrotny jest przekazywany do rejestru 'R14', a zadaniem wywoływacza jest zapisanie go podczas wywoływania innej funkcji. Więc nawet przy wskaźniku ramek nie ma gwarancji, że adres powrotu jest kiedykolwiek przechowywany na stosie. –
Rzeczywiście, gdy adres zwrotny jest zapisany w pamięci zamiast zapisany na stosie przez instrukcję wywołania, ogólnie nie można go znaleźć. Powinien istnieć sposób użycia danych rozwijania/debugowania dwarf2, ale wymagałoby to, aby '__builtin_return_address' był wołaniem o dużej wadze odwijać wywołanie biblioteki, a nie banalnym wbudowanym ... –
BTW, rozwiązałem problem śledzenia stosu na ARM przez za pomocą [-finstrument-functions] (http://gcc.activeventure.org/Code-Gen-Options.html), które są wywoływane przy każdym wejściu/wyjściu funkcji. Oczywiście jest narzut, ale jest to dla mnie do przyjęcia. (I jest atrybut 'no_instrument_function', w którym wymagana jest maksymalna szybkość połączenia ...) –