11.9. Compiladores e ferramentas de desenvolvimento
Funções sintéticas geradas pelo GCC confundem SystemTap
A otimização do GCC pode gerar funções sintéticas para cópias parcialmente simplificadas de outras funções. Ferramentas como SystemTap e GDB não podem distinguir estas funções sintéticas das funções reais. Como conseqüência, o SystemTap coloca sondas em pontos de entrada de funções sintéticas e reais e, assim, registra múltiplos acertos de sondas para uma única chamada de função real.
Para contornar este problema, modifique os scripts SystemTap para detectar a recorrência e evitar a colocação de sondas relacionadas a funções parciais simplificadas.
Este roteiro de exemplo
sonda kernel.function({\i1}"can_nice}").call {\i}
pode ser modificado desta forma:
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()] --; }
Observe que este roteiro de exemplo não considera todos os cenários possíveis, tais como a falta de kprobes ou kretprobes, ou a verdadeira recursividade pretendida.
(BZ#1169184)