diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-07-23 15:31:25 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-07-23 15:31:25 -0700 |
commit | 39f189549b5703a94c1049bfce23f416eede3c07 (patch) | |
tree | 965a0d8ce8ae677b673c5ef307f251c4d0b5b3d4 /pk | |
parent | 41e85e084acea757cc7e32b6aef47e4563b47717 (diff) | |
download | pk-39f189549b5703a94c1049bfce23f416eede3c07.zip pk-39f189549b5703a94c1049bfce23f416eede3c07.tar.gz pk-39f189549b5703a94c1049bfce23f416eede3c07.tar.bz2 |
Avoid stack overflow with -msoft-float
Diffstat (limited to 'pk')
-rw-r--r-- | pk/fp_asm.S | 4 | ||||
-rw-r--r-- | pk/init.c | 4 | ||||
-rw-r--r-- | pk/minit.c | 3 | ||||
-rw-r--r-- | pk/pk.h | 2 |
4 files changed, 8 insertions, 5 deletions
diff --git a/pk/fp_asm.S b/pk/fp_asm.S index 0839511..81fe6b2 100644 --- a/pk/fp_asm.S +++ b/pk/fp_asm.S @@ -1,5 +1,7 @@ // See LICENSE for license details. +#ifdef __riscv_hard_float + #define get_f32(which) fmv.x.s a0, which; jr t0 #define put_f32(which) fmv.s.x which, a0; jr t0 #ifdef __riscv64 @@ -153,3 +155,5 @@ put_f64(f29) put_f64(f30) put_f64(f31) + +#endif @@ -84,7 +84,7 @@ struct mainvars* parse_args(struct mainvars* args) return (struct mainvars*)&args->argv[a0-1]; } -void boot_loader(struct mainvars* args) +void load_program(struct mainvars* args) { // load program named by argv[0] long phdrs[128]; @@ -93,6 +93,4 @@ void boot_loader(struct mainvars* args) if (!args->argc) panic("tell me what ELF to load!"); load_elf((char*)(uintptr_t)args->argv[0], ¤t); - - run_loaded_program(args); } @@ -67,7 +67,8 @@ static void init_first_hart() memory_init(); vm_init(); - boot_loader(args); + load_program(args); + run_loaded_program(args); } static void init_other_hart() @@ -60,7 +60,7 @@ void handle_misaligned_load(trapframe_t*); void handle_misaligned_store(trapframe_t*); void handle_fault_load(trapframe_t*); void handle_fault_store(trapframe_t*); -void boot_loader(struct mainvars*); +void load_program(struct mainvars*); void run_loaded_program(struct mainvars*); void boot_other_hart(); |