aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-07-23 15:31:25 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-07-23 15:31:25 -0700
commit39f189549b5703a94c1049bfce23f416eede3c07 (patch)
tree965a0d8ce8ae677b673c5ef307f251c4d0b5b3d4
parent41e85e084acea757cc7e32b6aef47e4563b47717 (diff)
downloadpk-39f189549b5703a94c1049bfce23f416eede3c07.zip
pk-39f189549b5703a94c1049bfce23f416eede3c07.tar.gz
pk-39f189549b5703a94c1049bfce23f416eede3c07.tar.bz2
Avoid stack overflow with -msoft-float
-rw-r--r--pk/fp_asm.S4
-rw-r--r--pk/init.c4
-rw-r--r--pk/minit.c3
-rw-r--r--pk/pk.h2
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
diff --git a/pk/init.c b/pk/init.c
index 851e878..f029340 100644
--- a/pk/init.c
+++ b/pk/init.c
@@ -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], &current);
-
- run_loaded_program(args);
}
diff --git a/pk/minit.c b/pk/minit.c
index b8a0b48..b22565d 100644
--- a/pk/minit.c
+++ b/pk/minit.c
@@ -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()
diff --git a/pk/pk.h b/pk/pk.h
index 9bcf8da..588392c 100644
--- a/pk/pk.h
+++ b/pk/pk.h
@@ -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();