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)