gcc 컴파일 시 아래 옵션을 사용하면 profiling 함수들을 호출할 수 있다.
- -finstrument-functions
사용자(user-compiled) 함수로 들어갔다 나올때마다 다음 함수가 호출된다.
- __cyg_profile_func_enter()
- __cyg_profile_func_exit()
__attribute__ ((no_instrument_function)) void __cyg_profile_func_enter(void *this, void *call_site) { (...사용자 코드...) } __attribute__ ((no_instrument_function)) void __cyg_profile_func_exit(void *this, void *call_site) { (...사용자 코드...) }
트레이스를 위하여 처음 profiling 함수를 들어가기 전과 마지막 profiling 함수를 사용 후에 각각 한 번씩만 다음 속성으로 선언된 함수가 호출된다.
- __attribute__ ((constructor))
- __attribute__ ((destructor))
void __attribute__ ((constructor)) trace_begin (void) { (...사용자 코드...) } void __attribute__ ((destructor)) trace_end (void) { (...사용자 코드...) }
profiling 함수 호출 순서
예를 들어 main() 함수에서 foo() 함수를 호출하는 경우의 함수 흐름
notrace
디버거등에 의한 프로 파일링을 막기 위해 사용되는 매크로
#define notrace __attribute__((no_instrument_function))
참고
- Trace and profile function calls with GCC | Freedom Embeded