aboutsummaryrefslogtreecommitdiff
path: root/pk/pk.h
diff options
context:
space:
mode:
Diffstat (limited to 'pk/pk.h')
-rw-r--r--pk/pk.h39
1 files changed, 27 insertions, 12 deletions
diff --git a/pk/pk.h b/pk/pk.h
index 011bff3..06d68ee 100644
--- a/pk/pk.h
+++ b/pk/pk.h
@@ -19,6 +19,11 @@ typedef struct
long insn;
} trapframe_t;
+struct mainvars {
+ uint64_t argc;
+ uint64_t argv[127]; // this space is shared with the arg strings themselves
+};
+
#define panic(s,...) do { do_panic(s"\n", ##__VA_ARGS__); } while(0)
#define kassert(cond) do { if(!(cond)) kassert_fail(""#cond); } while(0)
void do_panic(const char* s, ...) __attribute__((noreturn));
@@ -26,21 +31,24 @@ void kassert_fail(const char* s) __attribute__((noreturn));
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi)
-#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b))
-#define ROUNDDOWN(a, b) ((a)/(b)*(b))
+
+#define likely(x) __builtin_expect((x), 1)
+#define unlikely(x) __builtin_expect((x), 0)
+
+#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1)))
+#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))
#ifdef __cplusplus
extern "C" {
#endif
+extern uintptr_t mem_size;
extern int have_vm;
-extern uint32_t mem_mb;
-int emulate_fp(trapframe_t*);
-void fp_init();
-
-int emulate_int(trapframe_t*);
+extern uint32_t num_harts;
+struct mainvars* parse_args(struct mainvars*);
void printk(const char* s, ...);
+void sprintk(char* out, const char* s, ...);
void init_tf(trapframe_t*, long pc, long sp, int user64);
void pop_tf(trapframe_t*) __attribute__((noreturn));
void dump_tf(trapframe_t*);
@@ -50,21 +58,25 @@ 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();
+uintptr_t boot_loader(struct mainvars*);
typedef struct {
int elf64;
int phent;
int phnum;
- size_t user_min;
+ int is_supervisor;
+ size_t phdr;
+ size_t phdr_size;
+ size_t first_free_paddr;
+ size_t first_user_vaddr;
+ size_t first_vaddr_after_user;
+ size_t bias;
size_t entry;
size_t brk_min;
size_t brk;
size_t brk_max;
size_t mmap_max;
size_t stack_bottom;
- size_t phdr;
- size_t phdr_top;
size_t stack_top;
size_t t0;
} elf_info;
@@ -89,6 +101,9 @@ extern char* uarch_counter_names[NUM_COUNTERS];
}
#endif
-#endif
+#endif // !__ASSEMBLER__
+
+#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b))
+#define ROUNDDOWN(a, b) ((a)/(b)*(b))
#endif