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)