2015-04-23 18 views
9

Sto tentando di utilizzare una funzione da una libreria opensource. Questa funzione non è esposta all'esterno per impostazione predefinita (quindi presumo che non sia la funzione di utilità fornita direttamente dalla libreria opensource), ma ho bisogno di questa funzione per risolvere alcuni problemi nel mio codice, quindi in qualche modo ho apportato alcune modifiche nel makefile per esporre il funtion dalla biblioteca.Come trovare se una funzione è rientrante

Ora la domanda è come assicurarsi che questa funzione sia rientrante.

Non riesco a scoprirlo a occhio nudo, perché chiama un numero di funzioni internamente.

Per essere precisi, sono curioso di sapere se sono disponibili strumenti o opzioni in GDB per verificare se la mia funzione utilizza solo variabili locali e non modifica le variabili globali.

+6

Se non sei sicuro e sei in grado di modificare (sembra che tu sia), rendi la funzione non rientranti con qualche mutex statico. –

+1

è possibile controllare il codice smontato. probabilmente non ne vale la pena ... –

+0

Si potrebbe semplicemente chiamare la funzione, e chiamare un interrupt e richiamare la funzione di nuovo e vedere cosa succede. Se si comporta male. –

risposta

1

Il modo per determinare se una funzione è rientrante è analizzare ciò che fa.

1) Non accede ai globali a meno che le operazioni su tali globali siano atomiche (ad esempio, non c'è modo di leggere e modificare contemporaneamente un globale). Questo di solito significa evitare l'uso di globals o garantire un accesso sincronizzato ad essi - ad es. tutto il codice che modifica e legge un globale contiene un mutex fino al termine, quindi le operazioni sono serializzate. O codice th

2) Il codice non è auto-modificante (per fortuna il codice auto-modificante è relativamente raro negli standard C o C++).

3) Non chiama altre funzioni che non rientrano nelle funzioni di rientro (che include un discreto numero di funzioni nella libreria standard) o programmi (ad esempio il multiprocesso di solito complica il controllo necessario per garantire la rientranza).

Non sono a conoscenza di alcuno strumento specifico per analizzare una funzione per determinare la rientranza. Di solito una funzione è progettata per essere rientranti (o meno). In pratica, se non ci sono documenti che dicano che una funzione è stata progettata per essere rientranti, è una buona scommessa che non sia rientrante.

Problemi correlati