Red Hat Training

A Red Hat training course is available for RHEL 8

5.5.12. 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 pode colocar sondas em ambos os pontos de entrada de funções sintéticas e reais, e assim registrar múltiplos acertos de sondas para uma única chamada de função real.

Para contornar este problema, os scripts do SystemTap devem ser adaptados com medidas como a detecção de recorrência e a supressão de sondas relacionadas a funções parciais simplificadas. Por exemplo, um script

sonda kernel.function({\i1}"can_nice}").call {\i}

pode tentar evitar o problema descrito a seguir:

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 leva em conta todos os cenários possíveis, tais como a falta de kretprobes ou kretprobes, ou a verdadeira repetição pretendida.

(BZ#1169184)

A ferramenta ltrace não informa as chamadas de função

Devido a melhorias no endurecimento binário aplicadas a todos os componentes RHEL, a ferramenta ltrace não pode mais detectar chamadas de função em arquivos binários provenientes de componentes RHEL. Como conseqüência, a saída ltrace está vazia porque não relata nenhuma chamada detectada quando usada em tais arquivos binários. Não há nenhuma solução atualmente disponível.

Como nota, ltrace pode relatar corretamente as chamadas em arquivos binários personalizados construídos sem as respectivas bandeiras de endurecimento.

(BZ#1618748, BZ#1655368)