Quando ottengo il segnale che causa il coredump, voglio eseguire il mio gestore per copiare le strutture siginfo_t e ucontext_t in variabili globali, in modo che possano essere accessibili nel core dump. Attualmente alla fine del mio gestore riassegno il gestore predefinito e il call raise (thesig). Il problema è che il core dump "registri delle informazioni" mostra lo stato dei registri nel mio gestore e non al momento del segnale originale. Mi rendo conto che da quando ho salvato ucontext_t, posso cercare quello per i valori del registro originale, ma è probabile che quella conoscenza si perda/dimentichi quando i dump core vengono passati al team.Linux: Snoop un segnale senza cestinare i registri per il successivo core dump?
Quindi la mia domanda è: esiste un modo per controrilanciare un segnale e assicurarsi che il file di dump principale mantenga lo stato di registrazione del segnale originale? Ho pensato che forse avrei potuto usare alcuni in linea asm per ripristinare manualmente tutti i reg alla fine del gestore, quindi tornare alle istruzioni che hanno causato il segnale invece di chiamare raise(), ma non sono sicuro che possiamo garantirlo -testare l'istruzione causerà lo stesso comportamento di segnalazione del primo tentativo.
@ER, i punti di dumping del nucleo si trovano sempre nella posizione errata. :( – sree