Когда я получаю сигнал, вызывающий coredump, я хочу запустить свой собственный обработчик, чтобы скопировать структуры siginfo_t и ucontext_t в глобальные переменные, чтобы они могли быть доступны в дампе ядра.В настоящее время в конце моего обработчика я переназначаю обработчик по умолчанию и вызываю повышение (thesig).Проблема с этим заключается в том, что дамп ядра «info registers» показывает состояние регистров в моем обработчике, а не во время исходного сигнала.Я понимаю, что, поскольку я сохранил ucontext_t, я могу найти в нем исходные значения регистров, но эти знания могут быть потеряны / забыты при передаче дампов ядра в команду.
Так что мой вопрос: есть ли способ переосмыслить сигнал и убедиться, что файл дампа ядра содержит состояние регистра исходного сигнала?Я подумал, что, возможно, я мог бы использовать встроенный ассемблер, чтобы вручную восстановить все регистры в конце обработчика, а затем вернуться к инструкции, которая вызвала сигнал, вместо того, чтобы вызывать повышение (), но я не уверен, сможем ли мы гарантировать, что ре-попытание инструкции приведет к тому же поведению сигнализации, что и с первой попытки.