36 lines
816 B
ArmAsm
36 lines
816 B
ArmAsm
#include <inc/mmu.h>
|
|
#include <inc/memlayout.h>
|
|
|
|
.data
|
|
// Define the global symbols 'envs', 'pages', 'uvpt', and 'uvpd'
|
|
// so that they can be used in C as if they were ordinary global arrays.
|
|
.globl envs
|
|
.set envs, UENVS
|
|
.globl pages
|
|
.set pages, UPAGES
|
|
.globl uvpt
|
|
.set uvpt, UVPT
|
|
.globl uvpd
|
|
.set uvpd, (UVPT+(UVPT>>12)*4)
|
|
|
|
|
|
// Entrypoint - this is where the kernel (or our parent environment)
|
|
// starts us running when we are initially loaded into a new environment.
|
|
.text
|
|
.globl _start
|
|
_start:
|
|
// See if we were started with arguments on the stack
|
|
cmpl $USTACKTOP, %esp
|
|
jne args_exist
|
|
|
|
// If not, push dummy argc/argv arguments.
|
|
// This happens when we are loaded by the kernel,
|
|
// because the kernel does not know about passing arguments.
|
|
pushl $0
|
|
pushl $0
|
|
|
|
args_exist:
|
|
call libmain
|
|
1: jmp 1b
|
|
|