7.8. Compilatori e strumenti di sviluppo (traduzione automatica)

Funzioni sintetiche generate da GCC Confuse SystemTap

L'ottimizzazione GCC può generare funzioni sintetiche per copie parzialmente in linea di altre funzioni. Strumenti come SystemTap e GDB non possono distinguere queste funzioni sintetiche da quelle reali. Di conseguenza, SystemTap può posizionare le sonde sia sui punti di ingresso di funzioni sintetiche che reali, e quindi registrare più colpi di sonda per una singola chiamata di funzione reale.

Per ovviare a questo problema, gli script SystemTap devono essere adattati con misure quali il rilevamento della ricorsione e la soppressione delle sonde relative a funzioni parziali in linea. Per esempio, uno script

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

può cercare di evitare il problema descritto di seguito:

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

Si noti che questo script di esempio non tiene conto di tutti gli scenari possibili, come i kprobes mancanti o kretprobes, o la vera e propria ricorsione prevista.

(BZ#1169184)

Lo ltracestrumento non segnala le chiamate di funzione

A causa dei miglioramenti all'indurimento binario applicato a tutti i componenti RHEL, lo ltracestrumento non è più in grado di rilevare le chiamate di funzione nei file binari provenienti dai componenti RHEL. Di conseguenza, l'ltraceoutput è vuoto perché non segnala alcuna chiamata rilevata quando viene utilizzato su tali file binari. Al momento non esiste una soluzione alternativa.

Come nota, ltracepuò segnalare correttamente le chiamate in file binari personalizzati costruiti senza i rispettivi flag di tempra.

(BZ#1618748, BZ#1655368)