Page 1 of 1

General protection fault after reloading CS

Posted: Wed May 25, 2022 2:49 am
by LolzDEV
I'm following the GDT guide but according to gdb

Code: Select all

jmp 0x08:reload_cs
is causing a "General Protection Fault" (0xd), according to the wiki this exception is thrown when a code segment is used improperly but as far as I understand if the GDT is not set segmentation is not enabled. What's going on? I cannot really understand
PS: I'm using GRUB2 as bootloader with Multiboot2 specification and I'm in protected mode

Re: General protection fault after reloading CS

Posted: Wed May 25, 2022 5:32 pm
by Octocontrabass
LolzDEV wrote:as far as I understand if the GDT is not set segmentation is not enabled.
Segmentation is always enabled.
LolzDEV wrote:What's going on?
The CPU is unable to use the segment descriptor corresponding to segment selector 8 as a code segment.
  • Maybe the selector is wrong, and your code segment needs a different selector.
  • Maybe you've made a mistake defining the descriptor and it's not a valid code segment.
  • Maybe you've made a mistake loading the GDTR and the CPU isn't reading your GDT.
It's hard to say for sure without more information. For example, post a link to your git repository, or provide a register dump using QEMU's "-d int" option.