From: Alexander Aksenov Date: Fri, 28 Nov 2014 11:51:40 +0000 (+0300) Subject: [IMPROVE] Add swap_put_uarg() X-Git-Tag: accepted/tizen/mobile/20160407.001200~102 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cbd0d6f9aa0913307a5bcf8a1ec861e8664d0c1d;p=platform%2Fkernel%2Fswap-modules.git [IMPROVE] Add swap_put_uarg() Change-Id: I87057e7b496c655b582aef86484403c0ff6a85e7 Signed-off-by: Alexander Aksenov --- diff --git a/uprobe/arch/arm/swap-asm/swap_uprobes.h b/uprobe/arch/arm/swap-asm/swap_uprobes.h index 826e308..c519d12 100644 --- a/uprobe/arch/arm/swap-asm/swap_uprobes.h +++ b/uprobe/arch/arm/swap-asm/swap_uprobes.h @@ -109,6 +109,27 @@ static inline unsigned long swap_get_uarg(struct pt_regs *regs, unsigned long n) return addr; } +static inline void swap_put_uarg(struct pt_regs *regs, unsigned long n, + unsigned long val) +{ + u32 *ptr; + + switch (n) { + case 0: + regs->ARM_r0 = val; + case 1: + regs->ARM_r1 = val; + case 2: + regs->ARM_r2 = val; + case 3: + regs->ARM_r3 = val; + } + + ptr = (u32 *)regs->ARM_sp + n - 4; + if (put_user(val, ptr)) + printk("failed to dereference a pointer, ptr=%p\n", ptr); +} + int swap_arch_init_uprobes(void); void swap_arch_exit_uprobes(void); diff --git a/uprobe/arch/x86/swap-asm/swap_uprobes.h b/uprobe/arch/x86/swap-asm/swap_uprobes.h index 3ca6334..360c033 100644 --- a/uprobe/arch/x86/swap-asm/swap_uprobes.h +++ b/uprobe/arch/x86/swap-asm/swap_uprobes.h @@ -103,6 +103,17 @@ static inline unsigned long swap_get_uarg(struct pt_regs *regs, unsigned long n) return addr; } +static inline void swap_put_uarg(struct pt_regs *regs, unsigned long n, + unsigned long val) +{ + u32 *ptr; + + /* 1 - return address saved on top of the stack */ + ptr = (u32 *)regs->sp + n + 1; + if (put_user(val, ptr)) + printk("failed to dereference a pointer, ptr=%p\n", ptr); +} + int swap_arch_init_uprobes(void); void swap_arch_exit_uprobes(void);