This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Odd function address in function instrumentation routines on ARM
- From: "Lorenz, Daniel" <d dot lorenz at fz-juelich dot de>
- To: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Thu, 1 Mar 2012 11:00:19 +0100
- Subject: Odd function address in function instrumentation routines on ARM
Hello,
I am working on performance analysis tools. For instrumenting applications we use the compiler instrumentation flags
-finstrument-functions. The inserted function calls to __cyg_profile_func_enter and __cyg_profile_func_exit normally provide a function
pointer. With libbfd we lookup debug information for this function using this address. This worked fine for many years on different machines,
Recently, I tried to port our code to an ARM architecture (dual Cortex A9 processor)
running Ubuntu. Here, I discovered that the function addresses that are passed to
__cyg_profile_func_enter and __cyg_profile_func_exit do not match the address of the function that we get from libbfd. Although the difference might be caused
by libbfd or in the way we interface libbfd, I am wondering that __cyg_profile_func_enter
and __cyg_profile_func_exit provide odd function addresses, even if I specify -falign-functions=4.
I appended a small test case that shows the addresses that we get from function instrumentation and from libbfd. The output on the ARM
system looks like this:
Function: foo, Address: 34960
Function: main, Address: 35008
In __cyg_profile_func_enter. Function address: 35009
In __cyg_profile_func_enter. Function address: 34961
in foo
In __cyg_profile_func_exit. Function address: 34961
In __cyg_profile_func_exit. Function address: 35009
I tested it on two different machines:
1. dual-core ARM Cortex-A9 Tegar2 SoC with gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5, and
2. Snowball – Cortex A9 board, Nova A9500 dual Cortex A9 with gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1.
I performed several builds and test runs and it seems that the address difference is always 1.
Is the function adress passed to __cyg_profile_func_enter and __cyg_profile_func_exit intenionally odd on ARM,
even when specifing -falign-function=4?
Best Regards,
Daniel Lorenz
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Forschungszentrum Juelich GmbH
52425 Juelich
Sitz der Gesellschaft: Juelich
Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
Prof. Dr. Sebastian M. Schmidt
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Kennen Sie schon unsere app? http://www.fz-juelich.de/app