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 Pigginstatic 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 Pigginstatic 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