xref: /openbmc/u-boot/arch/riscv/include/asm/ptrace.h (revision 0ca0a546b186478b9de80cbd27fa8baf17e30863)
16020faf6SRick Chen /*
26020faf6SRick Chen  * Copyright (c) 2017 Microsemi Corporation.
36020faf6SRick Chen  * Copyright (c) 2017 Padmarao Begari <Padmarao.Begari@microsemi.com>
46020faf6SRick Chen  *
56020faf6SRick Chen  * This program is free software; you can redistribute it and/or modify
66020faf6SRick Chen  * it under the terms of the GNU General Public License version 2 as
76020faf6SRick Chen  * published by the Free Software Foundation.
86020faf6SRick Chen  */
96020faf6SRick Chen #ifndef __ASM_RISCV_PTRACE_H
106020faf6SRick Chen #define __ASM_RISCV_PTRACE_H
116020faf6SRick Chen 
126020faf6SRick Chen struct pt_regs {
136020faf6SRick Chen 	unsigned long sepc;
146020faf6SRick Chen 	unsigned long ra;
156020faf6SRick Chen 	unsigned long sp;
166020faf6SRick Chen 	unsigned long gp;
176020faf6SRick Chen 	unsigned long tp;
186020faf6SRick Chen 	unsigned long t0;
196020faf6SRick Chen 	unsigned long t1;
206020faf6SRick Chen 	unsigned long t2;
216020faf6SRick Chen 	unsigned long s0;
226020faf6SRick Chen 	unsigned long s1;
236020faf6SRick Chen 	unsigned long a0;
246020faf6SRick Chen 	unsigned long a1;
256020faf6SRick Chen 	unsigned long a2;
266020faf6SRick Chen 	unsigned long a3;
276020faf6SRick Chen 	unsigned long a4;
286020faf6SRick Chen 	unsigned long a5;
296020faf6SRick Chen 	unsigned long a6;
306020faf6SRick Chen 	unsigned long a7;
316020faf6SRick Chen 	unsigned long s2;
326020faf6SRick Chen 	unsigned long s3;
336020faf6SRick Chen 	unsigned long s4;
346020faf6SRick Chen 	unsigned long s5;
356020faf6SRick Chen 	unsigned long s6;
366020faf6SRick Chen 	unsigned long s7;
376020faf6SRick Chen 	unsigned long s8;
386020faf6SRick Chen 	unsigned long s9;
396020faf6SRick Chen 	unsigned long s10;
406020faf6SRick Chen 	unsigned long s11;
416020faf6SRick Chen 	unsigned long t3;
426020faf6SRick Chen 	unsigned long t4;
436020faf6SRick Chen 	unsigned long t5;
446020faf6SRick Chen 	unsigned long t6;
456020faf6SRick Chen 	/* Supervisor CSRs */
466020faf6SRick Chen 	unsigned long sstatus;
476020faf6SRick Chen 	unsigned long sbadaddr;
486020faf6SRick Chen 	unsigned long scause;
496020faf6SRick Chen };
506020faf6SRick Chen 
516020faf6SRick Chen #ifdef CONFIG_64BIT
526020faf6SRick Chen #define REG_FMT "%016lx"
536020faf6SRick Chen #else
546020faf6SRick Chen #define REG_FMT "%08lx"
556020faf6SRick Chen #endif
566020faf6SRick Chen 
576020faf6SRick Chen #define user_mode(regs) (((regs)->sstatus & SR_PS) == 0)
586020faf6SRick Chen 
596020faf6SRick Chen /* Helpers for working with the instruction pointer */
606020faf6SRick Chen #define GET_IP(regs) ((regs)->sepc)
616020faf6SRick Chen #define SET_IP(regs, val) (GET_IP(regs) = (val))
626020faf6SRick Chen 
instruction_pointer(struct pt_regs * regs)636020faf6SRick Chen static inline unsigned long instruction_pointer(struct pt_regs *regs)
646020faf6SRick Chen {
656020faf6SRick Chen 	return GET_IP(regs);
666020faf6SRick Chen }
676020faf6SRick Chen 
instruction_pointer_set(struct pt_regs * regs,ulong val)68*45fc9375SRick Chen static inline void instruction_pointer_set(struct pt_regs *regs, ulong val)
696020faf6SRick Chen {
706020faf6SRick Chen 	SET_IP(regs, val);
716020faf6SRick Chen }
726020faf6SRick Chen 
736020faf6SRick Chen #define profile_pc(regs) instruction_pointer(regs)
746020faf6SRick Chen 
756020faf6SRick Chen /* Helpers for working with the user stack pointer */
766020faf6SRick Chen #define GET_USP(regs) ((regs)->sp)
776020faf6SRick Chen #define SET_USP(regs, val) (GET_USP(regs) = (val))
786020faf6SRick Chen 
user_stack_pointer(struct pt_regs * regs)796020faf6SRick Chen static inline unsigned long user_stack_pointer(struct pt_regs *regs)
806020faf6SRick Chen {
816020faf6SRick Chen 	return GET_USP(regs);
826020faf6SRick Chen }
836020faf6SRick Chen 
user_stack_pointer_set(struct pt_regs * regs,ulong val)84*45fc9375SRick Chen static inline void user_stack_pointer_set(struct pt_regs *regs, ulong val)
856020faf6SRick Chen {
866020faf6SRick Chen 	SET_USP(regs, val);
876020faf6SRick Chen }
886020faf6SRick Chen 
896020faf6SRick Chen /* Helpers for working with the frame pointer */
906020faf6SRick Chen #define GET_FP(regs) ((regs)->s0)
916020faf6SRick Chen #define SET_FP(regs, val) (GET_FP(regs) = (val))
926020faf6SRick Chen 
frame_pointer(struct pt_regs * regs)936020faf6SRick Chen static inline unsigned long frame_pointer(struct pt_regs *regs)
946020faf6SRick Chen {
956020faf6SRick Chen 	return GET_FP(regs);
966020faf6SRick Chen }
976020faf6SRick Chen 
frame_pointer_set(struct pt_regs * regs,ulong val)98*45fc9375SRick Chen static inline void frame_pointer_set(struct pt_regs *regs, ulong val)
996020faf6SRick Chen {
1006020faf6SRick Chen 	SET_FP(regs, val);
1016020faf6SRick Chen }
1026020faf6SRick Chen 
1036020faf6SRick Chen #endif /* __ASM_RISCV_PTRACE_H */
104