(Added linux-mips mailing list and the other people to the CC list.) On Thu, 2009-10-22 at 04:37 -0700, pajko wrote: [...] > > > > All this stuff can be avoided having PROFILE_BEFORE_PROLOGUE enabled in GCC > (gcc/config/mips/mips.h), like it is done one several other architectures. > Some of them even require it to be set for a working _mcount. > Putting the call of _mcount before the function prologue should make no harm > (it's working for me), and this way RA can be hooked for function graph > tracing > before it is saved to stack in the function prologue. Thus there will be no > difference between leaf and non-leaf functions. Good idea! Seems PROFILE_BEFORE_PROLOGUE is commented by default in gcc/config/mips/mips.h of gcc 4.4: /* #define PROFILE_BEFORE_PROLOGUE */ if we enable this macro, the handling will be the same to non-leaf and leaf function, so, David's patch to gcc is not need again. > This change is no big deal as GCC has to be patched anyway to get dynamic > ftracing (and with 4.2.1 I had to patch it to get ftracing in modules > working > - using -mlong-calls -, but it's possible that this is fixed in the newer > releases). > do you mean if enabling PROFILE_BEFORE_PROLOGUE, there will be some problems with module support using -mlong-calls? I have made dynamic ftrace support module with -mlong-calls, I think, if we move the codes before prologue, it should have no side effect. lui v1,HI16bit (&_mcount -> v1) daddiu v1,v1,LOW16bit move at,ra jalr v1 Regards, Wu Zhangjin