7.8. Compiler und Entwicklungswerkzeuge (Maschinenübersetzung)
Synthetische Funktionen, die von GCC generiert werden, verwirren SystemTap
Die GCC-Optimierung kann synthetische Funktionen für teilweise inlinierte Kopien anderer Funktionen erzeugen. Tools wie SystemTap und GDB können diese synthetischen Funktionen nicht von realen Funktionen unterscheiden. Infolgedessen kann SystemTap Sonden sowohl an synthetischen als auch an realen Funktionseintrittspunkten platzieren und so mehrere Sondentreffer für einen einzigen realen Funktionsaufruf registrieren.
Um dieses Problem zu umgehen, müssen SystemTap-Skripte mit Maßnahmen wie dem Erkennen von Rekursionen und dem Unterdrücken von Sonden, die sich auf inlinierte Teilfunktionen beziehen, angepasst werden. Zum Beispiel ein Skript
probe kernel.function("can_nice").call { }
kann versuchen, das beschriebene Problem wie folgt zu vermeiden:
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()] --; }
Beachten Sie, dass dieses Beispielskript nicht alle möglichen Szenarien berücksichtigt, wie z.B. verpasste Kprobes oder Kretprobes oder wirklich beabsichtigte Rekursionen.
(BZ#1169184)
Das ltrace
Tool meldet keine Funktionsaufrufe
Aufgrund der Verbesserungen der binären Härtung, die auf alle RHEL-Komponenten angewendet werden, kann das ltrace
Tool Funktionsaufrufe in Binärdateien von RHEL-Komponenten nicht mehr erkennen. Infolgedessen ist die ltrace
Ausgabe leer, da sie bei Verwendung in solchen Binärdateien keine erkannten Aufrufe meldet. Es ist derzeit kein Workaround verfügbar.
Als Hinweis ltrace
kann man Aufrufe in benutzerdefinierten Binärdateien, die ohne die entsprechenden Härtungsflags erstellt wurden, korrekt melden.
(BZ#1618748, BZ#1655368)