diff options
| author | Marin Ivanov <[email protected]> | 2024-05-01 14:20:21 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2024-05-01 14:20:21 +0300 |
| commit | 7aaeee46c3bfc0ddaf6845a88a2eef5224f9ceac (patch) | |
| tree | c494a7e5e9cec4caf5e701e7a7a4c25f695f6967 /src | |
| parent | c46f576400231e69525f73421b0bb621b16fc0cf (diff) | |
linker defined stack
Diffstat (limited to 'src')
| -rw-r--r-- | src/debugcon.zig | 2 | ||||
| -rw-r--r-- | src/linker.ld | 8 | ||||
| -rw-r--r-- | src/main.zig | 8 |
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, '!'); |
