5.7.9. 컴파일러 및 개발 도구

GCC에서 생성된 합성 함수가 SystemTap에 혼란 가중

GCC 최적화는 다른 함수의 부분 인라인 사본에 대해 합성 함수를 생성할 수 있습니다. SystemTap 및 GDB와 같은 도구는 이러한 온도 함수를 실제 함수와 구분할 수 없습니다. 결과적으로 SystemTap은 온도 및 실제 함수 진입점 모두에 프로브를 배치하므로 단일 실제 함수 호출에 대해 여러 개의 프로브 적중을 등록합니다.

이 문제를 해결하려면 SystemTap 스크립트를 수정하여 재귀를 감지하고 인라인 부분 함수와 관련된 프로브 배치를 방지합니다.

예제 스크립트

probe kernel.function("can_nice").call { }

다음과 같은 방식으로 수정할 수 있습니다.

global in_can_nice%

probe kernel.function("can_nice").call {
  in_can_nice[tid()] ++;
  if (in_can_nice[tid()] > 1) { next }
  /* code for real probe handler */
}

probe kernel.function("can_nice").return {
  in_can_nice[tid()] --;
}

이 예제 스크립트는 kprobes 또는 kretprobes 누락 또는 의도된 재귀와 같은 가능한 모든 시나리오를 고려하지 않습니다.

(BZ#1169184)