[CRIU] [PATCH 06/16] pie: x86-32 -- Prepare parasite head
Cyrill Gorcunov
gorcunov at openvz.org
Thu Jun 4 14:04:07 PDT 2015
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
arch/x86/include/asm/parasite.h | 4 ++++
arch/x86/parasite-head.S | 23 +++++++++++++++++++++++
pie/parasite.c | 6 +++++-
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/parasite.h b/arch/x86/include/asm/parasite.h
index 48e48ac988b7..669ae63e26cc 100644
--- a/arch/x86/include/asm/parasite.h
+++ b/arch/x86/include/asm/parasite.h
@@ -1,6 +1,10 @@
#ifndef __ASM_PARASITE_H__
#define __ASM_PARASITE_H__
+#ifdef CONFIG_X86_32
+# define __parasite_entry __attribute__((regparm(3)))
+#endif
+
static inline void arch_get_tls(tls_t *ptls) { (void)ptls; }
#endif
diff --git a/arch/x86/parasite-head.S b/arch/x86/parasite-head.S
index 8caf9b3b9172..b61b712f7a86 100644
--- a/arch/x86/parasite-head.S
+++ b/arch/x86/parasite-head.S
@@ -2,6 +2,9 @@
#include "parasite.h"
.section .head.text, "ax"
+
+#ifdef CONFIG_X86_64
+
ENTRY(__export_parasite_head_start)
subq $16, %rsp
andq $~15, %rsp
@@ -15,3 +18,23 @@ ENTRY(__export_parasite_head_start)
__export_parasite_cmd:
.long 0
END(__export_parasite_head_start)
+
+#else /* CONFIG_X86_64 */
+
+ENTRY(__export_parasite_head_start)
+ subl $8, %esp
+ andl $~7, %esp
+ pushl $0
+ movl %esp, %ebp
+ call 1f
+1: popl %ecx
+2: leal (__export_parasite_cmd-2b)(%ecx), %eax
+ leal (__export_parasite_args-2b)(%ecx), %edx
+ call parasite_service
+ int $0x03
+ .align 8
+GLOBAL(__export_parasite_cmd)
+ .long 0
+END(__export_parasite_head_start)
+
+#endif /* CONFIG_X86_64 */
diff --git a/pie/parasite.c b/pie/parasite.c
index 9961b2fba84e..c79a3803ec86 100644
--- a/pie/parasite.c
+++ b/pie/parasite.c
@@ -686,7 +686,11 @@ err:
return -1;
}
-int __used parasite_service(unsigned int cmd, void *args)
+#ifndef __parasite_entry
+# define __parasite_entry
+#endif
+
+int __used __parasite_entry parasite_service(unsigned int cmd, void *args)
{
pr_info("Parasite cmd %d/%x process\n", cmd, cmd);
--
2.4.2
More information about the CRIU
mailing list