Strutture UNWIND_INFO concatenate

Aggiornamento: novembre 2007

Se il flag UNW_FLAG_CHAININFO è impostato, UNWIND_INFO è una struttura secondaria e contiene un puntatore relativo dell'immagine nel campo indirizzo condiviso del gestore eccezioni o della struttura UNWIND_INFO concatenata che punta alla voce RUNTIME_FUNCTION associata alla struttura UNWIND_INFO principale.

La struttura UNWIND_INFO concatenata risulta utile in due situazioni. Innanzitutto può essere utilizzata per i segmenti di codice non contingui. L'utilizzo di questa struttura consente di ridurre la dimensione delle voci UNWIND_INFO richieste, poiché non è necessario duplicare la matrice dei codici di rimozione dalla struttura UNWIND_INFO principale.

La struttura UNWIND_INFO concatenata può anche essere utilizzata per gestire lo shrink-wrapping nel salvataggio dei registri volatili. Il compilatore può decidere di ritardare il salvataggio di alcuni registri volatili finché non esce dal prologo della voce di funzione. A questo scopo è possibile registrare la voce UNWIND_INFO principale relativa alla parte della funzione prima del codice sottoposto a shrink-wrapping e quindi impostare la struttura UNWIND_INFO concatenata con una dimensione del prologo diversa da zero, dove i codici di rimozione in tale struttura riflettono le operazioni di salvataggio dei registri non volatili. In tal caso, tutti i codici di rimozione saranno istanze di UWOP_SAVE_NONVOL. Lo shrink-wrapping che salva i registri non volatili mediante un'istruzione PUSH non è supportato, come anche lo shrink-wrapping che modifica RSP mediante un'allocazione fissa dello stack aggiuntiva.

È possibile che un elemento UNWIND_INFO con il flag UNW_FLAG_CHAININFO impostato punti a una voce RUNTIME_FUNCTION in cui è impostato il flag UNW_FLAG_CHAININFO dell'elemento UNWIND_INFO (shrink-wrapping multiplo). Seguendo le strutture UNWIND_INFO concatenate, i puntatori arriveranno infine a un elemento UNWIND_INFO con il flag UNW_FLAG_CHAININFO non impostato, corrispondente all'elemento UNWIND_INFO principale che punta al punto di ingresso effettivo della routine.

Vedere anche

Riferimenti

Dati di rimozione per la gestione delle eccezioni, supporto del debugger