[CRIU] [PATCH 3/4] cr: introduced the macro REG_SYSCALL_NR

Alexander Kartashov alekskartashov at parallels.com
Fri May 31 01:20:47 EDT 2013


The macro REG_SYSCALL_NR is designated to get the value of the CPU register
storing syscall number in a machine-independent way.

Signed-off-by: Alexander Kartashov <alekskartashov at parallels.com>
Cc: Andrey Vagin <avagin at openvz.org>
---
 arch/arm/include/asm/types.h |    1 +
 arch/x86/include/asm/types.h |    1 +
 parasite-syscall.c           |    4 ++--
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/include/asm/types.h b/arch/arm/include/asm/types.h
index 2e5fa9c..3d917f8 100644
--- a/arch/arm/include/asm/types.h
+++ b/arch/arm/include/asm/types.h
@@ -209,6 +209,7 @@ typedef struct {
 
 #define REG_RES(regs) ((regs).ARM_r0)
 #define REG_IP(regs)  ((regs).ARM_pc)
+#define REG_SYSCALL_NR(regs) ((regs).ARM_r7)
 
 #define TASK_SIZE 0xbf000000
 
diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h
index e7b0e2d..5bf0fa5 100644
--- a/arch/x86/include/asm/types.h
+++ b/arch/x86/include/asm/types.h
@@ -237,6 +237,7 @@ typedef uint64_t auxv_t;
 
 #define REG_RES(regs) ((regs).ax)
 #define REG_IP(regs)  ((regs).ip)
+#define REG_SYSCALL_NR(regs)	((regs).orig_ax)
 
 #define CORE_ENTRY__MARCH CORE_ENTRY__MARCH__X86_64
 
diff --git a/parasite-syscall.c b/parasite-syscall.c
index ff9436c..e41096a 100644
--- a/parasite-syscall.c
+++ b/parasite-syscall.c
@@ -864,8 +864,8 @@ static int parasite_fini_seized(struct parasite_ctl *ctl)
 			return -1;
 		}
 
-		pr_debug("%d is going to execute the syscall %lx\n", pid, regs.orig_ax);
-		if (regs.orig_ax == __NR_rt_sigreturn) {
+		pr_debug("%d is going to execute the syscall %lx\n", pid, REG_SYSCALL_NR(regs));
+		if (REG_SYSCALL_NR(regs) == __NR_rt_sigreturn) {
 			pr_debug("%d was stopped\n", pid);
 			break;
 		}
-- 
1.7.10.4



More information about the CRIU mailing list