본문 바로가기

Core BSP 분석/리눅스 커널 핵심 분석

[리눅스커널] GCC: notrace 옵션 - no_instrument_function

walk_stackframe() 함수의 구현부를 보면 notrace 키워드로 선언됐음을 알 수 있습니다.
 
void notrace walk_stackframe(struct stackframe *frame,
     int (*fn)(struct stackframe *, void *), void *data)
{
while (1) {
int ret;
 
if (fn(frame, data))
break;
ret = unwind_frame(frame);
if (ret < 0)
break;
}
}
EXPORT_SYMBOL(walk_stackframe);
 
이 함수를 전처리 코드에서 확인하면 구현부는 다음과 같습니다.
 
void __attribute__((no_instrument_function)) walk_stackframe(struct stackframe *frame,
       int (*fn)(struct stackframe *, void *), void *data)
{
 while (1) {
  int ret;
 
  if (fn(frame, data))
   break;
  ret = unwind_frame(frame);
  if (ret < 0)
   break;
 }
}
 
함수 구현부와 같이 notrace는 '__attribute__((no_instrument_function))' 구문으로 치환이 됩니다.
 
 
# Reference: For more information on 'Linux Kernel';
 
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1
 
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2