[CRIU] [PATCH] parasite: pass parameter regs as pointer
Andrey Vagin
avagin at openvz.org
Wed Jul 6 22:59:30 PDT 2016
From: Andrew Vagin <avagin at virtuozzo.com>
CID 163751 (#1 of 1): Big parameter passed by value (PASS_BY_VALUE)
pass_by_value: Passing parameter regs of type user_regs_struct_t (size 224 bytes) by value.
Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
---
criu/arch/aarch64/include/asm/types.h | 6 +++---
criu/parasite-syscall.c | 14 +++++++-------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/criu/arch/aarch64/include/asm/types.h b/criu/arch/aarch64/include/asm/types.h
index 2c7c475..51c0a31 100644
--- a/criu/arch/aarch64/include/asm/types.h
+++ b/criu/arch/aarch64/include/asm/types.h
@@ -54,9 +54,9 @@ typedef struct {
typedef struct user_pt_regs user_regs_struct_t;
-#define REG_RES(regs) ((u64)(regs).regs[0])
-#define REG_IP(regs) ((u64)(regs).pc)
-#define REG_SYSCALL_NR(regs) ((u64)(regs).regs[8])
+#define REG_RES(r) ((u64)(r).regs[0])
+#define REG_IP(r) ((u64)(r).pc)
+#define REG_SYSCALL_NR(r) ((u64)(r).regs[8])
#define user_regs_native(pregs) true
#define core_is_compat(core) false
diff --git a/criu/parasite-syscall.c b/criu/parasite-syscall.c
index cc78bc6..0366e7b 100644
--- a/criu/parasite-syscall.c
+++ b/criu/parasite-syscall.c
@@ -1019,17 +1019,17 @@ static bool task_is_trapped(int status, pid_t pid)
return false;
}
-static inline int is_required_syscall(user_regs_struct_t regs, pid_t pid,
+static inline int is_required_syscall(user_regs_struct_t *regs, pid_t pid,
const int sys_nr, const int sys_nr_compat)
{
- const char *mode = user_regs_native(®s) ? "native" : "compat";
- int req_sysnr = user_regs_native(®s) ? sys_nr : sys_nr_compat;
+ const char *mode = user_regs_native(regs) ? "native" : "compat";
+ int req_sysnr = user_regs_native(regs) ? sys_nr : sys_nr_compat;
pr_debug("%d (%s) is going to execute the syscall %lu, required is %d\n",
- pid, mode, REG_SYSCALL_NR(regs), req_sysnr);
- if (user_regs_native(®s) && (REG_SYSCALL_NR(regs) == sys_nr))
+ pid, mode, REG_SYSCALL_NR(*regs), req_sysnr);
+ if (user_regs_native(regs) && (REG_SYSCALL_NR(*regs) == sys_nr))
return true;
- if (!user_regs_native(®s) && (REG_SYSCALL_NR(regs) == sys_nr_compat))
+ if (!user_regs_native(regs) && (REG_SYSCALL_NR(*regs) == sys_nr_compat))
return true;
return false;
@@ -1079,7 +1079,7 @@ int parasite_stop_on_syscall(int tasks,
return -1;
}
- if (is_required_syscall(regs, pid, sys_nr, sys_nr_compat)) {
+ if (is_required_syscall(®s, pid, sys_nr, sys_nr_compat)) {
/*
* The process is going to execute the required syscall,
* the next stop will be on the exit from this syscall
--
2.7.4
More information about the CRIU
mailing list