Ah. I think I may have found the answer to at least part of my
question, but would appreciate if someone could confirm...

Section 2.3.4 of the UEFI spec states:
"Selectors are set to be flat and are otherwise not used."

Section 3.2.4 of the Intel processor spec (Vol. 3A 3-7) states:
"In 64-bit mode, segmentation is generally (but not completely)
disabled, creating a
flat 64-bit linear-address space... Note that the processor does not
perform segment limit checks at runtime in 64-bit mode."

So if I'm reading all this correctly... The value of the fields
governing the interpretation of the segment limits (e.g., L and D/B)
are "don't cares" in IA32e 64-bit mode. But what about fields not
directly related to limit checks: e.g., P (Present) flag, and DPL
(Descriptor Privilege Level)? Do their values not matter either?

Thanks,
Brett S.



On Tue, Jun 7, 2016 at 8:46 AM, Brett Stahlman <[email protected]> wrote:
> Just inside my 64-bit x64 EFI boot loader, I print out the contents of
> the GDT to see how it was initialized by the firmware. I've tried
> running the boot loader both in QEMU (OVMF) and VMware ESXi. In both
> cases, the first 5 descriptors after the leading null descriptor look
> like this:
>
> 0x000000000000ffff
>
> Note all the leading zeroes: in particular, flags such as D/B and L
> being clear seem to suggest a GDT that's inappropriate for 64-bit long
> mode. I've verified by looking at CR* registers and such that the
> firmware has indeed placed me in IA32e "long mode" with identity
> paging. This is what I would expect, in light of section 2.3.4 in the
> UEFI spec. But why does the GDT have all leading 0's?
>
> Thanks,
> Brett S.
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to