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)