I want to get function's call stack of the programm with gcc option -finstrument-functions.
Typical code
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;
void __cyg_profile_func_enter (void *func, void *caller)
{ }
void __cyg_profile_func_exit (void *func, void *caller)
{ }
int main()
{
printf("Hello world");
return 0
}
Compile it with gcc -finstrument-functions test.c
run ./a.out, and all ok.
But when I did it with g++ , I got undefined reference to __cyg_profile_func_enter function. I read that it happens because _cyg functions is part of C code and if I want to use them in C++ I should use extern "C", so there is final code.
extern "C"{
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;
void __cyg_profile_func_enter (void *func, void *caller)
{ }
void __cyg_profile_func_exit (void *func, void *caller)
{ }
}
int main()
{
printf("Hello world");
return 0
}
It compiles with g++ -finstrument-functions test.c, then try to execute it but got Core dumped error message. I trace dump with gdb and there was Segmentation fault in __cyg_profile_func_enter().
GCC version is 2.95.4. I also tested it on 4.4.3 and all Ok. So are there any posibilities to walk around this problem using 2.95.4 gcc?