From 13fe461374c0716404e2ee7726781b9cd12dbaa7 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 25 Sep 2021 12:24:24 +0300 Subject: Added default stack location --- arch/riscv/init/head.S | 2 +- arch/riscv/init/init.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'arch/riscv/init') diff --git a/arch/riscv/init/head.S b/arch/riscv/init/head.S index bbd2945..3589ead 100644 --- a/arch/riscv/init/head.S +++ b/arch/riscv/init/head.S @@ -2,6 +2,6 @@ .global _start .type _start, @function _start: - /* stack pointer is whatever? */ + li sp, PM_STACK_TOP /* go to proper init */ j init diff --git a/arch/riscv/init/init.c b/arch/riscv/init/init.c index 5612d0b..86c2563 100644 --- a/arch/riscv/init/init.c +++ b/arch/riscv/init/init.c @@ -112,8 +112,8 @@ static pm_t get_kerneltop() /* interesting, for some reason if I define these to be just char * pointers I get some wacky values. Not sure why that would be, but * this works. */ - extern char __init_end[], __kernel_size[]; - return (pm_t)__init_end + (pm_t)__kernel_size; + extern char __init_end, __kernel_size; + return (pm_t)&__init_end + (pm_t)&__kernel_size; } static pm_t get_initrdtop(void *fdt) @@ -146,11 +146,16 @@ static void setup_pmem(void *fdt) dbg("kernel_top:\t%#lx\n", kernel_top); dbg("fdt_top:\t%#lx\n", fdt_top); + /* TODO: check that pmap placement doesn't overwrite anything, such as + * stack or go over top address of memory */ /* riscv handles two byte boundaries better than one byte, so align * upwards */ populate_pmap(pmem.base, pmem.top - pmem.base, align_up(top + 1, 2)); /* TODO: mark used pages */ + + /* mark init stack */ + mark_used(PM_STACK_BASE, MM_MPAGE); } void init(void *fdt) -- cgit v1.3