[FIX] get_regs_ret_func() for x86
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 29 Oct 2013 12:45:40 +0000 (16:45 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 29 Oct 2013 13:48:00 +0000 (17:48 +0400)
Change-Id: I2bfd9e0ef6d622c3c72052617d366fa6b67de9c7
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
writer/kernel_operations.h

index c87c80c..a1494ee 100644 (file)
 #elif defined(CONFIG_X86_32)
 
 #define get_regs_ip(regs)           regs->ip - 1
-#define get_regs_ret_func(regs)     regs->bp + 8
 #define get_regs_ret_val(regs)      regs->ax
 #define get_regs_stack_ptr(regs)    regs->sp
 
+static inline u32 get_regs_ret_func(struct pt_regs *regs)
+{
+       u32 addr;
+
+       if (get_user(addr, (u32 *)regs->sp)) {
+               printk("failed to dereference a pointer, addr=%p\n", addr);
+               return 0;
+       }
+
+       return addr;
+}
+
 #endif /* CONFIG_arch */
 
 int get_args(unsigned long args[], int cnt, struct pt_regs *regs);