aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/debugcon.zig2
-rw-r--r--src/linker.ld8
-rw-r--r--src/main.zig8
3 files changed, 11 insertions, 7 deletions
diff --git a/src/debugcon.zig b/src/debugcon.zig
index 94045ab..6014637 100644
--- a/src/debugcon.zig
+++ b/src/debugcon.zig
@@ -5,7 +5,7 @@ pub inline fn inb(port: u16) u8 {
);
}
-pub inline fn outb(port: u16, data: u8) void {
+pub fn outb(port: u16, data: u8) void {
asm volatile ("outb %[data], %[port]"
:
: [port] "{dx}" (port),
diff --git a/src/linker.ld b/src/linker.ld
index 768cf15..9dc314e 100644
--- a/src/linker.ld
+++ b/src/linker.ld
@@ -1,5 +1,7 @@
ENTRY(_start)
+__stack_size = 16K;
+
SECTIONS {
. = 0x100000;
@@ -20,4 +22,10 @@ SECTIONS {
*(.bss)
*(COMMON)
}
+
+ .stack : ALIGN( 16 ) {
+ _estack = .;
+ }
+
+ _sstack = _estack + __stack_size;
}
diff --git a/src/main.zig b/src/main.zig
index 11ca4bf..adef54c 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -17,19 +17,15 @@ export const multiboot align(4) linksection(".multiboot") = MultibootHeader{
.checksum = -(MAGIC + FLAGS),
};
-export var stack: [16 * 1024]u8 align(16) linksection(".bss") = undefined;
-
export fn _start() callconv(.Naked) noreturn {
asm volatile (
- \\ mov %[stk], %rsp
+ \\ mov _sstack, %rsp
\\ mov %rsp, %rbp
- :
- : [stk] "{rcx}" (@intFromPtr(&stack) + @sizeOf(@TypeOf(stack))),
);
asm volatile ("jmp kmain");
}
-export fn kmain() void {
+export fn kmain() noreturn {
debug.outb(0xe9, 'H');
debug.outb(0xe9, 'i');
debug.outb(0xe9, '!');