Есть ли возможность обрабатывать прерывания без TSS?
Хотелось бы узнать, есть ли возможность обрабатывать прерывания без определения дескриптора TSS в GDT и установки его индекса в TR (x86_64)? Т.е. если не использовать IST, а код и обработчик в нулевом кольце (переключение стека не происходит, red-zone игнорируется). Уже пару дней пытаюсь вызвать обработчик по нулевому вектору (делю на ноль), но ничего не получается. Это принципиально возможно без TSS, его GDT-дескриптора и установки им TR? Или же один TSS по-любому необходим? Спасибо большое и с праздниками!
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
CHAPTER 6
INTERRUPT AND EXCEPTION HANDLING
Переключение стека предусмотрено (на кольцо с не меньшим приоритетом) — адрес стека берётся из TSS. А для x86_64 переключение стека вообще единственно рекомендовано (через IST), иначе будет портиться red zone.
Although the RSP alignment is always performed when LMA = 1, it is only of consequence for the kernel-mode case where there is no stack switch or IST used. For a stack switch or IST, the OS would have presumably put suitably aligned RSP values in the TSS.