Separated functionality into separate files. Added initial (untested) support for ARM.

This commit is contained in:
2013-12-06 13:47:22 -05:00
parent e97e0b0cf5
commit da4cc8b645
10 changed files with 308 additions and 136 deletions

33
arch/arm-none-eabi/boot.s Normal file
View File

@ -0,0 +1,33 @@
.section ".text.boot"
.globl Start
Start:
// Setup the stack
mov sp, #0x8000
// Clear out bss
ldr r4, =_bss_start
ldr r9, =_bss_end
mov r5, #0
mov r6, #0
mov r7, #0
mov r8, #0
b 2f
1:
// Store multiple at r4
stmia r4!, {r5-r8}
2:
// If we are still below bss_end, loop
cmp r4, r9
blo 1b
// Call brados_main
ldr r3, =brados_main
blx r3
halt:
// Halt
wfe
b halt

View File

@ -0,0 +1,42 @@
ENTRY(Start)
SECTIONS
{
/* Starts at LOADER_ADDR */
. = 0x8000
_start = .;
_text_start = .;
.text:
{
KEEP(*(.text.boot))
*(.text)
}
. = ALIGN(4096);
_text_end = .;
_rodata_start = .;
.rodata:
{
*(.rodata)
}
. = ALIGN(4096)
_rodata_end = .;
_data_start = .;
.data:
{
*(.data)
}
. = ALIGN(4096);
_data_end = .;
_bss_start = .;
.bss:
{
bss = .;
*(.bss)
}
. = ALIGN(4096)
_bss_end = .;
_end = .;
}

40
arch/i586-elf/boot.s Normal file
View File

@ -0,0 +1,40 @@
# Declare constants for creating a multiboot header
.set ALIGN, 1<<0
.set MEMINFO, 1<<1
.set FLAGS, ALIGN | MEMINFO
.set MAGIC, 0x1BADB002
.set CHECKSUM, -(MAGIC + FLAGS)
# Declare multiboot header
.section .multiboot
.align 4
.long MAGIC
.long FLAGS
.long CHECKSUM
# Create a 16 KiB stack
.section .bootstrap_stack
stack_bottom:
.skip 16384
stack_top:
# Kernel entry point
.section .text
.global _start
.type _start, @function
_start:
# We are now in kernel mode!
# Setup the stack
movl $stack_top, %esp
# Call the main kernel function
call brados_main
# In case the function returns, enter an endless loop
cli
hlt
.Lhang:
jmp .Lhang
# Set the size of the _start symbol for debugging
.size _start, . - _start

38
arch/i586-elf/linker.ld Normal file
View File

@ -0,0 +1,38 @@
/* Kernel entry point */
ENTRY(_start)
/* Define the locations of the object file sections */
SECTIONS
{
/* Sections begin at 1 MiB */
. = 1M;
/* The multiboot header needs to come first, followed by program code */
.text BLOCK(4K) : ALIGN(4K)
{
*(.multiboot)
*(.text)
}
/* Read-only data */
.rodata BLOCK(4K) : ALIGN(4K)
{
*(.rodata)
}
/* Initialized read-write data */
.data BLOCK(4K) : ALIGN(4K)
{
*(.data)
}
/* Uninitialized read-write data and stack */
.bss BLOCK(4K) : ALIGN(4K)
{
*(COMMON)
*(.bss)
*(.bootstrap_stack)
}
/* Add other sections here */
}