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)

Red Hat logoGithubRedditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

© 2024 Red Hat, Inc.