2020enum
2121{
2222 i386_EIP = 12 , x86_64_RIP = 16 , ppc_NIP = 32 , arm_PC = 15 , aarch64_PC = 32 , // See Linux arch/arm64/include/asm/ptrace.h
23- riscv_EPC = 0 , loongarch_ERA = 33
23+ riscv_EPC = 0 , loongarch_ERA = 33 , sparc64_TPC = 2
2424};
2525
2626static void arch_adjustPcAfterBreakpoint (unsigned long *regs);
@@ -41,7 +41,7 @@ static void arch_adjustPcAfterBreakpoint(unsigned long *regs)
4141 regs[i386_EIP]--;
4242#elif defined(__x86_64__)
4343 regs[x86_64_RIP]--;
44- #elif defined(__powerpc__) || defined(__arm__) || defined(__aarch64__) || defined(__riscv) || defined(__loongarch__)
44+ #elif defined(__powerpc__) || defined(__arm__) || defined(__aarch64__) || defined(__riscv) || defined(__loongarch__) || (defined(__sparc__) && defined(__arch64__))
4545 // Do nothing
4646#else
4747# error Unsupported architecture
@@ -66,6 +66,8 @@ static unsigned long arch_getPcFromRegs(unsigned long *regs)
6666 out = regs[riscv_EPC];
6767#elif defined(__loongarch__)
6868 out = regs[loongarch_ERA];
69+ #elif defined(__sparc__) && defined(__arch64__)
70+ out = regs[sparc64_TPC];
6971#else
7072# error Unsupported architecture
7173#endif
@@ -405,8 +407,10 @@ void ptrace_sys::skipInstruction(pid_t pid)
405407 regs[aarch64_PC] += 4 ;
406408# elif defined(__arm__)
407409 regs[arm_PC] += 4 ;
408- # else
410+ # elif defined(__loongarch__)
409411 regs[loongarch_ERA] += 4 ;
412+ # elif defined(__sparc__) && defined(__arch64__)
413+ regs[sparc64_TPC] += 4 ;
410414# endif
411415 setRegs (pid, NULL , regs, sizeof regs);
412416#endif
0 commit comments