7.8. Compiladores y herramientas de desarrollo (traducción automática)

Las funciones sintéticas generadas por el GCC confunden a SystemTap

La optimización de GCC puede generar funciones sintéticas para copias parcialmente alineadas de otras funciones. Herramientas como SystemTap y GDB no pueden distinguir estas funciones sintéticas de las funciones reales. Como consecuencia, SystemTap puede colocar sondas tanto en puntos de entrada de funciones sintéticas como reales, y así registrar múltiples coincidencias de sondas para una sola llamada de función real.

Para solucionar este problema, los scripts SystemTap deben adaptarse con medidas como la detección de recursión y la supresión de sondas relacionadas con funciones parciales en línea. Por ejemplo, un script

probe kernel.function("can_nice").call { }

puede tratar de evitar el problema descrito a continuación:

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 tiene en cuenta todos los escenarios posibles, como kprobes o kretprobes perdidos, o recursión intencionada genuina.

(BZ#1169184)

La ltraceherramienta no notifica llamadas de función

Debido a las mejoras en el endurecimiento binario aplicado a todos los componentes de RHEL, la ltraceherramienta ya no puede detectar llamadas de función en archivos binarios procedentes de componentes de RHEL. Como consecuencia, la ltracesalida está vacía porque no reporta ninguna llamada detectada cuando se usa en dichos archivos binarios. Actualmente no hay ninguna solución alternativa disponible.

Como nota, ltracepuede reportar correctamente llamadas en archivos binarios personalizados construidos sin las respectivas banderas de endurecimiento.

(BZ#1618748, BZ#1655368)