proteus none net for cross compiler gcc arm stack-trace oprofile cortex-a8

gcc - none - gnu arm 4.3 4



¿Cómo obtener perfiles de gráficos de llamada que funcionen con el código compilado gcc y el objetivo ARM Cortex A8? (1)

Me estoy mordiendo los dientes en este ...

Necesito hacer un perfil en una placa ARM y necesito ver gráficos de llamadas. Intenté con OProfile, Kernel perf y las herramientas de rendimiento de Google. Todo funciona bien pero no genera información de gráfico de llamadas.

Esto me llevó a la conclusión de que no estoy compilando mi código correctamente.

Utilizo los siguientes indicadores al compilar mi código C ++:

Arch específico:

-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3

General:

-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra

Depuración (con optimización):

-O2 -g -fno-omit-frame-pointer

Hice muchas búsquedas en Google y encontré algunos temas relacionados:

  • libunwind?
  • enano
  • (asincrónico-) desenrollar-tablas
  • -mapcs-frame

Sin embargo, no entiendo completamente cómo están todos conectados. ¿Alguna pista sobre cómo hacer que funcionen los gráficos de llamadas?

Nota (debido a la respuesta de Rian): estoy interesado en averiguar si y por qué algunos métodos toman más tiempo (en relación con otros) en ARM que x86-64. No ayuda hacer esto en una plataforma diferente (aunque mi código se compila en ambos y puedo hacer gráficos de llamadas en x86-64).


Sé que quieres hacer tu perfil en un córtex ARM-A8, pero si estás interesado en gráficos de llamadas, ¿por qué no compilar para x86 y ejecutar la herramienta callgrind de valgrind y examinar los resultados con kcachegrind?

Los gráficos de llamada deberían ser los mismos entre las dos arquitecturas, incluso si compilan las funciones de forma ligeramente diferente, la relación entre las funciones no debería cambiar.

No se necesitan banderas especiales:

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app kcachegrind &