Tengo curiosidad por qué __builtin_return_address()
no admite otros argumentos que 0 en ARM? ¿Es un problema que de alguna manera no se puede deducir la dirección de la función de llamada de la pila de ARM? ¿O algo más?Dirección de retorno GCC de la función de llamada en arquitectura ARM
Gracias
En el ARM, la dirección de retorno se pasa en el registro 'R14', y es deber del destinatario de llamar para guardarlo al llamar a otra función. Por lo tanto, incluso con un puntero de marco, no hay garantía de que la dirección de retorno esté almacenada en la pila. –
De hecho, cuando la dirección de devolución está guardada en línea en lugar de guardada en la pila por la instrucción de llamada, en general es imposible encontrarla. Debería haber una forma de usar los datos de desenrollado/depuración de dwarf2, pero eso requeriría que '__builtin_return_address' sea una llamada a una biblioteca de carga pesada en lugar de una construcción trivial ... –
Por cierto, resolví este problema de rastreo de pila en ARM utilizando [-finstrument-functions] (http://gcc.activeventure.org/Code-Gen-Options.html) que se invocan en cada entrada/salida de función. Hay gastos generales, por supuesto, pero es aceptable para mí. (Y existe el atributo 'no_instrument_function' donde se requiere la velocidad máxima de llamada ...) –