I was just investigating the trampoline implementation.I have defined
following macros in machine.h file.


#define TRAMPOLINE_SIZE (32 + GET_MODE_SIZE (ptr_mode) * 2)
#define TRAMPOLINE_ALIGNMENT GET_MODE_BITSIZE (ptr_mode)
#define INITIALIZE_TRAMPOLINE(ADDR, FUNC, CHAIN)                            \
{                                                                           \
 rtx func_addr, chain_addr;                                                \
                                                                           \
 func_addr = plus_constant (ADDR, 32);                                     \
 chain_addr = plus_constant (func_addr, GET_MODE_SIZE (ptr_mode));         \
 emit_move_insn (gen_rtx_MEM (ptr_mode, func_addr), FUNC);                 \
 emit_move_insn (gen_rtx_MEM (ptr_mode, chain_addr), CHAIN);               \
                                                                           \
}


The c code for which i'm observing the effect is as follows.

int foo(int (*f)()){
       (*f)();
}
main(){
       int g(){printf("hello");}
       foo(g);
}


But if i comment out the body of macro INITIALIZE_TRAMPOLINE .Nothing
gets changed in the generated assembly file.
According to gcc internals INITIALIZE_TRAMPOLINE is responsible for
initialising the variable parts of a trampoline.

Would you please tell me when does the macros INITIALIZE_TRAMPOLINE
and TRAMPOLINE_TEMPLATE come in effect.Any practical expample will be
helpful.

Reply via email to