Red Hat Training

A Red Hat training course is available for RHEL 8

7.8. Compilateurs et outils de développement (traduction automatique)

Les fonctions synthétiques générées par GCC confondent SystemTap

L'optimisation GCC peut générer des fonctions synthétiques pour des copies partiellement en ligne d'autres fonctions. Des outils tels que SystemTap et GDB ne peuvent pas distinguer ces fonctions synthétiques des fonctions réelles. Par conséquent, SystemTap peut placer des sondes à la fois sur des points d'entrée de fonction synthétiques et sur des points d'entrée de fonction réels, et ainsi enregistrer plusieurs hits de sonde pour un seul appel de fonction réelle.

Pour contourner ce problème, les scripts SystemTap doivent être adaptés avec des mesures telles que la détection de récursivité et la suppression des sondes liées aux fonctions partielles inlines. Par exemple, un script

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

peut essayer d'éviter le problème décrit comme suit :

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()] --;
}

Notez que cet exemple de script ne prend pas en compte tous les scénarios possibles, tels que kprobes ou kretprobes manqués, ou la véritable récursivité prévue.

(BZ#1169184)

L'ltraceoutil ne signale pas les appels de fonction

En raison des améliorations apportées au durcissement binaire appliqué à tous les composants RHEL, l'ltraceoutil ne peut plus détecter les appels de fonction dans les fichiers binaires provenant des composants RHEL. Par conséquent, la ltracesortie est vide parce qu'elle ne signale aucun appel détecté lorsqu'elle est utilisée sur ces fichiers binaires. Aucune solution de contournement n'est actuellement disponible.

Comme une note, ltracepeut correctement signaler les appels dans les fichiers binaires personnalisés construits sans les drapeaux de durcissement respectifs.

(BZ#1618748, BZ#1655368)