diff options
Diffstat (limited to 'pk/pk.h')
-rw-r--r-- | pk/pk.h | 39 |
1 files changed, 27 insertions, 12 deletions
@@ -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 |