From ef4bb4e37490b7441657d8e8e36feb885144772e Mon Sep 17 00:00:00 2001 From: michalbiesek Date: Tue, 27 Jun 2023 10:53:42 +0200 Subject: [PATCH] Add RISC-V debug support (#12349) - Add support for `getAndSetMcontextEip` - Add support for `logRegisters` --- src/debug.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/debug.c b/src/debug.c index b1b54b5e1..a85605e20 100644 --- a/src/debug.c +++ b/src/debug.c @@ -1218,6 +1218,8 @@ static void* getAndSetMcontextEip(ucontext_t *uc, void *eip) { GET_SET_RETURN(uc->uc_mcontext.gregs[16], eip); #elif defined(__ia64__) /* Linux IA64 */ GET_SET_RETURN(uc->uc_mcontext.sc_ip, eip); + #elif defined(__riscv) /* Linux RISC-V */ + GET_SET_RETURN(uc->uc_mcontext.__gregs[REG_PC], eip); #elif defined(__arm__) /* Linux ARM */ GET_SET_RETURN(uc->uc_mcontext.arm_pc, eip); #elif defined(__aarch64__) /* Linux AArch64 */ @@ -1452,6 +1454,49 @@ void logRegisters(ucontext_t *uc) { (unsigned long) uc->uc_mcontext.gregs[18] ); logStackContent((void**)uc->uc_mcontext.gregs[15]); + #elif defined(__riscv) /* Linux RISC-V */ + serverLog(LL_WARNING, + "\n" + "ra:%016lx gp:%016lx\ntp:%016lx t0:%016lx\n" + "t1:%016lx t2:%016lx\ns0:%016lx s1:%016lx\n" + "a0:%016lx a1:%016lx\na2:%016lx a3:%016lx\n" + "a4:%016lx a5:%016lx\na6:%016lx a7:%016lx\n" + "s2:%016lx s3:%016lx\ns4:%016lx s5:%016lx\n" + "s6:%016lx s7:%016lx\ns8:%016lx s9:%016lx\n" + "s10:%016lx s11:%016lx\nt3:%016lx t4:%016lx\n" + "t5:%016lx t6:%016lx\n", + (unsigned long) uc->uc_mcontext.__gregs[1], + (unsigned long) uc->uc_mcontext.__gregs[3], + (unsigned long) uc->uc_mcontext.__gregs[4], + (unsigned long) uc->uc_mcontext.__gregs[5], + (unsigned long) uc->uc_mcontext.__gregs[6], + (unsigned long) uc->uc_mcontext.__gregs[7], + (unsigned long) uc->uc_mcontext.__gregs[8], + (unsigned long) uc->uc_mcontext.__gregs[9], + (unsigned long) uc->uc_mcontext.__gregs[10], + (unsigned long) uc->uc_mcontext.__gregs[11], + (unsigned long) uc->uc_mcontext.__gregs[12], + (unsigned long) uc->uc_mcontext.__gregs[13], + (unsigned long) uc->uc_mcontext.__gregs[14], + (unsigned long) uc->uc_mcontext.__gregs[15], + (unsigned long) uc->uc_mcontext.__gregs[16], + (unsigned long) uc->uc_mcontext.__gregs[17], + (unsigned long) uc->uc_mcontext.__gregs[18], + (unsigned long) uc->uc_mcontext.__gregs[19], + (unsigned long) uc->uc_mcontext.__gregs[20], + (unsigned long) uc->uc_mcontext.__gregs[21], + (unsigned long) uc->uc_mcontext.__gregs[22], + (unsigned long) uc->uc_mcontext.__gregs[23], + (unsigned long) uc->uc_mcontext.__gregs[24], + (unsigned long) uc->uc_mcontext.__gregs[25], + (unsigned long) uc->uc_mcontext.__gregs[26], + (unsigned long) uc->uc_mcontext.__gregs[27], + (unsigned long) uc->uc_mcontext.__gregs[28], + (unsigned long) uc->uc_mcontext.__gregs[29], + (unsigned long) uc->uc_mcontext.__gregs[30], + (unsigned long) uc->uc_mcontext.__gregs[31] + ); + logStackContent((void**)uc->uc_mcontext.__gregs[REG_SP]); #elif defined(__aarch64__) /* Linux AArch64 */ serverLog(LL_WARNING, "\n"