72 lines
1.5 KiB
ArmAsm
72 lines
1.5 KiB
ArmAsm
/*
|
|
* \brief Startup code for core
|
|
* \author Martin Stein
|
|
* \author Stefan Kalkowski
|
|
* \date 2011-10-01
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2011-2013 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU General Public License version 2.
|
|
*/
|
|
|
|
.section ".text.crt0"
|
|
|
|
/* magic multi-boot header to make GRUB happy */
|
|
.long 0x1badb002
|
|
.long 0x0
|
|
.long 0xe4524ffe
|
|
|
|
/**********************************
|
|
** Startup code for primary CPU **
|
|
**********************************/
|
|
|
|
.code32
|
|
.global _start
|
|
_start:
|
|
|
|
/* Enable PAE (prerequisite for IA-32e mode) */
|
|
movl %cr4, %eax
|
|
btsl $5, %eax
|
|
movl %eax, %cr4
|
|
|
|
/*
|
|
* Install initial temporary environment that is replaced later by the
|
|
* environment that init_main_thread creates.
|
|
*/
|
|
leaq _stack_high@GOTPCREL(%rip),%rax
|
|
movq (%rax), %rsp
|
|
|
|
/* uniprocessor kernel-initialization which activates multiprocessor */
|
|
call init_kernel_up
|
|
|
|
/*********************************************
|
|
** Startup code that is common to all CPUs **
|
|
*********************************************/
|
|
|
|
.global _start_secondary_cpus
|
|
_start_secondary_cpus:
|
|
|
|
/* do multiprocessor kernel-initialization */
|
|
call init_kernel_mp
|
|
|
|
/* call the kernel main-routine */
|
|
call kernel
|
|
|
|
/* catch erroneous return of the kernel main-routine */
|
|
1: jmp 1b
|
|
|
|
|
|
/*********************************
|
|
** .bss (non-initialized data) **
|
|
*********************************/
|
|
|
|
.bss
|
|
|
|
/* stack of the temporary initial environment */
|
|
.p2align 8
|
|
.space 32 * 1024
|
|
_stack_high:
|