There is a strange behaviour of the linker concerning the calltree! Look at this simple code:
void Function1() { int a; } void Function2(void (code *fptr)(void)) { int b; fptr(); } main() { Function2(Function1); }
FUNCTION/MODULE BIT_GROUP DATA_GROUP --> CALLED FUNCTION/MODULE START STOP START STOP ==================================================== ?C_C51STARTUP ----- ----- ----- ----- +--> ?PR?MAIN?MAIN MAIN/MAIN ----- ----- ----- ----- +--> ?PR?FUNCTION1?MAIN +--> ?PR?_FUNCTION2?MAIN FUNCTION1/MAIN ----- ----- 0008H 0009H _FUNCTION2/MAIN ----- ----- 0008H 0009H
00000008H SYMBOL DATA INT a 00000008H SYMBOL DATA INT b