Groups | Search | Server Info | Login | Register


Groups > alt.os.development > #18739

Re: [OSDev] How to switch to long mode in x86 CPUs?

From cross@spitfire.i.gajendra.net (Dan Cross)
Newsgroups comp.lang.c, alt.os.development
Subject Re: [OSDev] How to switch to long mode in x86 CPUs?
Followup-To alt.os.development
Date 2025-03-01 13:34 +0000
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <vpv2di$5t5$1@reader1.panix.com> (permalink)
References <871pvje5yq.fsf@onesoftnet.eu.org> <vprtt6$3jah9$1@dont-email.me> <875xkughgw.fsf@onesoftnet.eu.org>

Cross-posted to 2 groups.

Followups directed to: alt.os.development

Show all headers | View raw


[Note: Followup-To: alt.os.development]

In article <875xkughgw.fsf@onesoftnet.eu.org>,
Ar Rakin  <rakinar2@onesoftnet.eu.org> wrote:
>On 28 Feb 2025 09:59, David Brown <david.brown@hesbynett.no> wrote:
>[snip]
>> On the other hand, if you are interested in learning the intricacies
>> of the x86 world, you need to look elsewhere for information - as
>> Keith says, it is not really C related when you are writing
>> assembly. comp.arch might be a helpful group.
>
>Looks like comp.arch might be the group I needed to find! Thanks.

Comp.arch is not a good choice here.  It's for discussion of
computer architecutre generally, specifics of how to boot an x86
core would be mostly tangential.

alt.os.development is probably your best bet, but please try not
to feed the troll there.

>[snip]
>Also just to clarify, from what I know, since the x86 processors start
>in 16-bit real mode for the sake of compatibility, you'd have to start
>writing 16-bit code first, then switch to 32-bit protected mode, then
>finally switch to 64-bit long mode.  However if you use an existing
>bootloader such as GRUB, then you usually would not need to worry about
>16-bit code since GRUB drops you in 32-bit protected mode.  But still,
>if you wish to switch to 64-bit long mode, you *will* have to mix 64-bit
>and 32-bit code together.
>
>Either I don't know how to, or I just don't feel comfortable mixing
>32-bit and 64-bit code together *when in C* because you will have a hard
>time linking those together.  Please correct me if I am wrong.

Eh...It can be done, but I don't see the point.  Even starting
from the reset vector (e.g., in 16-bit 8086 mode) it's not that
many instructions to get yourself into long mode with paging
enabled.  To see an example of how this is done, have a look at:
https://github.com/oxidecomputer/phbl/blob/main/src/start.S

It's sufficient straight-forward, and so low-level, that doing
this in a high-level language doesn't seem worth it from a
cost/benefit perspective.

	- Dan C.

Back to alt.os.development | Previous | NextNext in thread | Find similar


Thread

Re: [OSDev] How to switch to long mode in x86 CPUs? cross@spitfire.i.gajendra.net (Dan Cross) - 2025-03-01 13:34 +0000
  Re: [OSDev] How to switch to long mode in x86 CPUs? scott@slp53.sl.home (Scott Lurndal) - 2025-03-01 14:42 +0000

csiph-web