Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] Add regs_return_value() helper

Add the regs_return_value() macro to extract the return value in an
architecture agnostic manner, given the pt_regs.

Other architecture maintainers may want to add similar helpers.

Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Ananth N Mavinakayanahalli and committed by
Linus Torvalds
b3f827cb 412998cf

+11
+3
include/asm-i386/ptrace.h
··· 47 47 { 48 48 return ((regs->xcs & SEGMENT_RPL_MASK) | (regs->eflags & VM_MASK)) >= USER_RPL; 49 49 } 50 + 50 51 #define instruction_pointer(regs) ((regs)->eip) 52 + #define regs_return_value(regs) ((regs)->eax) 53 + 51 54 extern unsigned long profile_pc(struct pt_regs *regs); 52 55 #endif /* __KERNEL__ */ 53 56
+3
include/asm-ia64/ptrace.h
··· 241 241 * the canonical representation by adding to instruction pointer. 242 242 */ 243 243 # define instruction_pointer(regs) ((regs)->cr_iip + ia64_psr(regs)->ri) 244 + 245 + #define regs_return_value(regs) ((regs)->r8) 246 + 244 247 /* Conserve space in histogram by encoding slot bits in address 245 248 * bits 2 and 3 rather than bits 0 and 1. 246 249 */
+2
include/asm-powerpc/ptrace.h
··· 73 73 #ifndef __ASSEMBLY__ 74 74 75 75 #define instruction_pointer(regs) ((regs)->nip) 76 + #define regs_return_value(regs) ((regs)->gpr[3]) 77 + 76 78 #ifdef CONFIG_SMP 77 79 extern unsigned long profile_pc(struct pt_regs *regs); 78 80 #else
+1
include/asm-s390/ptrace.h
··· 472 472 473 473 #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) 474 474 #define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN) 475 + #define regs_return_value(regs)((regs)->gprs[2]) 475 476 #define profile_pc(regs) instruction_pointer(regs) 476 477 extern void show_regs(struct pt_regs * regs); 477 478 #endif
+2
include/asm-x86_64/ptrace.h
··· 39 39 #define user_mode(regs) (!!((regs)->cs & 3)) 40 40 #define user_mode_vm(regs) user_mode(regs) 41 41 #define instruction_pointer(regs) ((regs)->rip) 42 + #define regs_return_value(regs) ((regs)->rax) 43 + 42 44 extern unsigned long profile_pc(struct pt_regs *regs); 43 45 void signal_fault(struct pt_regs *regs, void __user *frame, char *where); 44 46