aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--machine/mtrap.h13
1 files changed, 4 insertions, 9 deletions
diff --git a/machine/mtrap.h b/machine/mtrap.h
index e9ef139..2f2e499 100644
--- a/machine/mtrap.h
+++ b/machine/mtrap.h
@@ -48,18 +48,13 @@ typedef struct {
volatile uint32_t* plic_s_ie;
} hls_t;
-#define STACK_POINTER() ({ \
- uintptr_t __sp; \
- __asm__("mv %0, sp" : "=r"(__sp)); \
- __sp; \
-})
-
-#define MACHINE_STACK_TOP() \
- ({ (void*)((STACK_POINTER() + RISCV_PGSIZE) & -RISCV_PGSIZE); })
+#define MACHINE_STACK_TOP() ({ \
+ uintptr_t sp = (uintptr_t)__builtin_frame_address(0) ; \
+ (char *)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); })
// hart-local storage, at top of stack
#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE))
-#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid))))
+#define OTHER_HLS(id) ((hls_t*)((char*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid))))
hls_t* hls_init(uintptr_t hart_id);
void parse_config_string();