1/* 2 * Common low level (register) ptrace helpers 3 * 4 * Copyright 2004-2011 Analog Devices Inc. 5 * 6 * Licensed under the GPL-2 or later. 7 */ 8 9#ifndef __ASM_GENERIC_PTRACE_H__ 10#define __ASM_GENERIC_PTRACE_H__ 11 12#ifndef __ASSEMBLY__ 13 14/* Helpers for working with the instruction pointer */ 15#ifndef GET_IP 16#define GET_IP(regs) ((regs)->pc) 17#endif 18#ifndef SET_IP 19#define SET_IP(regs, val) (GET_IP(regs) = (val)) 20#endif 21 22static inline unsigned long instruction_pointer(struct pt_regs *regs) 23{ 24 return GET_IP(regs); 25} 26static inline void instruction_pointer_set(struct pt_regs *regs, 27 unsigned long val) 28{ 29 SET_IP(regs, val); 30} 31 32#ifndef profile_pc 33#define profile_pc(regs) instruction_pointer(regs) 34#endif 35 36/* Helpers for working with the user stack pointer */ 37#ifndef GET_USP 38#define GET_USP(regs) ((regs)->usp) 39#endif 40#ifndef SET_USP 41#define SET_USP(regs, val) (GET_USP(regs) = (val)) 42#endif 43 44static inline unsigned long user_stack_pointer(struct pt_regs *regs) 45{ 46 return GET_USP(regs); 47} 48static inline void user_stack_pointer_set(struct pt_regs *regs, 49 unsigned long val) 50{ 51 SET_USP(regs, val); 52} 53 54/* Helpers for working with the frame pointer */ 55#ifndef GET_FP 56#define GET_FP(regs) ((regs)->fp) 57#endif 58#ifndef SET_FP 59#define SET_FP(regs, val) (GET_FP(regs) = (val)) 60#endif 61 62static inline unsigned long frame_pointer(struct pt_regs *regs) 63{ 64 return GET_FP(regs); 65} 66static inline void frame_pointer_set(struct pt_regs *regs, 67 unsigned long val) 68{ 69 SET_FP(regs, val); 70} 71 72#endif /* __ASSEMBLY__ */ 73 74#endif 75