Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
i386 start routine
Hello
I am playing with multiboot 2 support for our kernel, and I get a crash
involving stuff beyond my x86 knowledge.
The thing happens in the start routine (from
src/sys/arch/i386/i386/locore.S) at the time the kernel has been copied
to high memory and we try to jump there:
/*
* 3. Enable paging and the rest of it.
*/
movl %cr0,%eax
orl $(CR0_PE|CR0_PG|CR0_NE|CR0_TS|CR0_MP|CR0_WP|CR0_AM),%eax
movl %eax,%cr0
pushl $begin /* jump to high mem */
ret
begin:
The CR0 change cause the memory pointed by the stack pointer to be
unmapped. As a result, the pushl $begin does not push begin adddress on
the stack, and ret launches us in the twilight zone.
Why enabling protected mode and paging makes a mapping disapear?
--
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index