[IMPROVE] Writer: args getting
authorAlexander Aksenov <a.aksenov@samsung.com>
Sun, 14 Jul 2013 12:28:27 +0000 (16:28 +0400)
committerAlexander Aksenov <a.aksenov@samsung.com>
Sun, 14 Jul 2013 12:28:27 +0000 (16:28 +0400)
Now any number of args can be got on x86_32 and ARM arch

writer/kernel_operations.h
writer/swap_writer_module.c

index 38fba2a..ca8ddba 100644 (file)
 
 #ifdef CONFIG_ARM
 
-#define get_regs_ip(regs)       regs->ARM_pc
-#define get_regs_ret_func(regs) regs->ARM_lr
-#define get_regs_ret_val(regs)  get_regs_r0(regs)
-#define get_regs_r0(regs)       regs->ARM_r0
-#define get_regs_r1(regs)       regs->ARM_r1
-#define get_regs_r2(regs)       regs->ARM_r2
-#define get_regs_r3(regs)       regs->ARM_r3
+#define get_regs_ip(regs)           regs->ARM_pc
+#define get_regs_ret_func(regs)     regs->ARM_lr
+#define get_regs_ret_val(regs)      get_regs_r0(regs)
+#define get_regs_stack_ptr(regs)    regs->ARM_sp
+#define get_regs_r0(regs)           regs->ARM_r0
+#define get_regs_r1(regs)           regs->ARM_r1
+#define get_regs_r2(regs)           regs->ARM_r2
+#define get_regs_r3(regs)           regs->ARM_r3
 
 #elif CONFIG_X86_32
 
-#define get_regs_ip(regs)       regs->ip
-//TODO Ret function address for x86!
-#define get_regs_ret_func(regs) regs->bp
-#define get_regs_ret_val(regs)  regs->ax
-#define get_regs_r0(regs)       0
-#define get_regs_r1(regs)       0
-#define get_regs_r2(regs)       0
-#define get_regs_r3(regs)       0
+#define get_regs_ip(regs)           regs->ip
+#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
+#define get_regs_bx(regs)           regs->bx
+#define get_regs_cx(regs)           regs->cx
+#define get_regs_dx(regs)           regs->dx
+#define get_regs_si(regs)           regs->si
+#define get_regs_di(regs)           regs->di
+#define get_regs_bp(regs)           regs->bp
 
 #endif /* CONFIG_arch */
 
-
+int get_args(unsigned long args[], int cnt, struct pt_regs *regs);
 
 #endif /* __KERNEL_OPERATIONS_H__ */
index 7be424c..7a1bb77 100644 (file)
@@ -349,34 +349,6 @@ static char *pack_msg_func_entry(char *payload, const char *fmt, struct pt_regs
        return payload + sizeof(*mfe);
 }
 
-static int get_args(unsigned long args[], int cnt, struct pt_regs *regs)
-{
-       int i, arg_in_regs;
-
-       arg_in_regs = cnt < 3 ? cnt : 3;
-       switch (arg_in_regs) {
-       case 3:
-//TODO x86
-               args[3] = get_regs_r3(regs);
-       case 2:
-//TODO x86
-               args[2] = get_regs_r2(regs);
-       case 1:
-//TODO x86
-               args[1] = get_regs_r1(regs);
-       case 0:
-//TODO x86
-               args[0] = get_regs_r0(regs);
-       }
-
-       /* FIXME: cnt > 4 */
-       for (i = 4; i < cnt; ++i) {
-               args[i] = 0;
-       }
-
-       return 0;
-}
-
 static int pack_args(char *buf, int len, const char *fmt, struct pt_regs *regs)
 {
        enum { args_cnt = 16 };