aboutsummaryrefslogtreecommitdiff
path: root/machine
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2021-08-04 16:40:14 -0700
committerAndrew Waterman <andrew@sifive.com>2021-08-04 16:40:14 -0700
commit18084da90157ddc7aa4448e5f216cf6a486a64c8 (patch)
treea42c40f591aa6099eaefa0b7291cecc3333b5f8b /machine
parent17bec41e9bd44c43901938b784680661b9b28a76 (diff)
downloadriscv-pk-18084da90157ddc7aa4448e5f216cf6a486a64c8.zip
riscv-pk-18084da90157ddc7aa4448e5f216cf6a486a64c8.tar.gz
riscv-pk-18084da90157ddc7aa4448e5f216cf6a486a64c8.tar.bz2
Revert "Use __builtin_frame_address() instead of "sp" directly."
This reverts commit 17bec41e9bd44c43901938b784680661b9b28a76.
Diffstat (limited to 'machine')
-rw-r--r--machine/mtrap.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/machine/mtrap.h b/machine/mtrap.h
index 2f2e499..e9ef139 100644
--- a/machine/mtrap.h
+++ b/machine/mtrap.h
@@ -48,13 +48,18 @@ typedef struct {
volatile uint32_t* plic_s_ie;
} hls_t;
-#define MACHINE_STACK_TOP() ({ \
- uintptr_t sp = (uintptr_t)__builtin_frame_address(0) ; \
- (char *)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); })
+#define STACK_POINTER() ({ \
+ uintptr_t __sp; \
+ __asm__("mv %0, sp" : "=r"(__sp)); \
+ __sp; \
+})
+
+#define MACHINE_STACK_TOP() \
+ ({ (void*)((STACK_POINTER() + 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*)((char*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid))))
+#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid))))
hls_t* hls_init(uintptr_t hart_id);
void parse_config_string();