xref: /kvm-unit-tests/lib/ppc64/asm/ptrace.h (revision 0cc3a351b925928827baa4b69cf0e46ff5837083)
16842bc34SLaurent Vivier #ifndef _ASMPPC64_PTRACE_H_
26842bc34SLaurent Vivier #define _ASMPPC64_PTRACE_H_
36842bc34SLaurent Vivier 
46842bc34SLaurent Vivier #define KERNEL_REDZONE_SIZE	288
56842bc34SLaurent Vivier #define STACK_FRAME_OVERHEAD    112     /* size of minimum stack frame */
66842bc34SLaurent Vivier 
7*0cc3a351SSean Christopherson #ifndef __ASSEMBLER__
800af1c84SNicholas Piggin 
900af1c84SNicholas Piggin #include <asm/reg.h>
1000af1c84SNicholas Piggin 
116842bc34SLaurent Vivier struct pt_regs {
126842bc34SLaurent Vivier 	unsigned long gpr[32];
136842bc34SLaurent Vivier 	unsigned long nip;
146842bc34SLaurent Vivier 	unsigned long msr;
156842bc34SLaurent Vivier 	unsigned long ctr;
166842bc34SLaurent Vivier 	unsigned long link;
176842bc34SLaurent Vivier 	unsigned long xer;
186842bc34SLaurent Vivier 	unsigned long ccr;
196842bc34SLaurent Vivier 	unsigned long trap;
2099bb51c2SNicholas Piggin 	unsigned long _pad; /* stack must be 16-byte aligned */
216842bc34SLaurent Vivier };
226842bc34SLaurent Vivier 
regs_is_prefix(volatile struct pt_regs * regs)2300af1c84SNicholas Piggin static inline bool regs_is_prefix(volatile struct pt_regs *regs)
2400af1c84SNicholas Piggin {
2500af1c84SNicholas Piggin 	return regs->msr & SRR1_PREFIX;
2600af1c84SNicholas Piggin }
2700af1c84SNicholas Piggin 
regs_advance_insn(struct pt_regs * regs)2800af1c84SNicholas Piggin static inline void regs_advance_insn(struct pt_regs *regs)
2900af1c84SNicholas Piggin {
3000af1c84SNicholas Piggin 	if (regs_is_prefix(regs))
3100af1c84SNicholas Piggin 		regs->nip += 8;
3200af1c84SNicholas Piggin 	else
3300af1c84SNicholas Piggin 		regs->nip += 4;
3400af1c84SNicholas Piggin }
3500af1c84SNicholas Piggin 
366842bc34SLaurent Vivier #define STACK_INT_FRAME_SIZE    (sizeof(struct pt_regs) + \
376842bc34SLaurent Vivier 				 STACK_FRAME_OVERHEAD + KERNEL_REDZONE_SIZE)
386842bc34SLaurent Vivier 
39*0cc3a351SSean Christopherson #endif /* __ASSEMBLER__ */
406842bc34SLaurent Vivier 
416842bc34SLaurent Vivier #endif /* _ASMPPC64_PTRACE_H_ */
42