How is the RIP loaded when an interrupt arrives in an IA-32e 64-bit IDT Gate Descriptor?
- by Vern
I need some help with the programming of an IA-32e Interrupt Descriptor as I'm pretty new to it. I don't think I quite understand how the RIP is loaded when an Interrupt arrives.
There is a Segment Selector in Intel's 64-bit IDT Gate Descriptor. However, from my understanding across the 5 part Intel manuals, the Linear Address of the Interrupt Handler is loaded into RIP from the 64-bit offset specified in the IDT Gate Descriptor.
The only use of the segment selector is to check:
if there is a change in privilege levels
the Interrupt Handler is truly pointing to a code segment
My questions are:
Is RIP taken from the 64-bit offset only? Or is RIP = offset(sign
extended to 64-bits) + segment selector base?
Is the base address pointed to by the segment selector in the IDT
Gate Descriptor ignored? Or does it have a use?