11.9. Compiladores y herramientas de desarrollo
Las funciones sintéticas generadas por GCC confunden a SystemTap
La optimización de GCC puede generar funciones sintéticas para copias parcialmente inline de otras funciones. Herramientas como SystemTap y GDB no pueden distinguir estas funciones sintéticas de las reales. Como consecuencia, SystemTap coloca sondas tanto en los puntos de entrada de las funciones sintéticas como en los reales y, por lo tanto, registra múltiples impactos de sonda para una sola llamada a una función real.
Para solucionar este problema, modifique los scripts de SystemTap para detectar la recursividad y evitar la colocación de sondas relacionadas con funciones parciales inline.
Este script de ejemplo
sonda kernel.function(\ "can_nice").call { }
se puede modificar de esta manera:
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()] --; }
Tenga en cuenta que este script de ejemplo no considera todos los escenarios posibles, tales como kprobes o kretprobes perdidos, o la recursión genuina prevista.
(BZ#1169184)