From dac6ac2a87367583bf92cf24d0aabde6c215ccb1 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Tue, 28 Jan 2020 08:27:13 -0800 Subject: Use __builtin_frame_address() instead of "sp" directly. Also use pointer arithmetic on char * instead of void *. --- machine/mtrap.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/machine/mtrap.h b/machine/mtrap.h index a8dbeff..2f2e499 100644 --- a/machine/mtrap.h +++ b/machine/mtrap.h @@ -49,12 +49,12 @@ typedef struct { } hls_t; #define MACHINE_STACK_TOP() ({ \ - register uintptr_t sp asm ("sp"); \ - (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); }) + 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(); -- cgit v1.1