[PATCH] xen/x86: Zero out .bss for PV guests

From: Boris Ostrovsky
Date: Mon Feb 22 2016 - 17:06:39 EST


Baremetal kernels clear .bss early in the boot. Since Xen PV guests don't
excecute that early code they should do it too.

(Since we introduce macros for specifying 32- and 64-bit registers we
can get rid of ifdefs in startup_xen())

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
---
arch/x86/xen/xen-head.S | 29 ++++++++++++++++++++++-------
1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
index b65f59a..2af87d1 100644
--- a/arch/x86/xen/xen-head.S
+++ b/arch/x86/xen/xen-head.S
@@ -35,16 +35,31 @@
#define PVH_FEATURES (0)
#endif

- __INIT
-ENTRY(startup_xen)
- cld
#ifdef CONFIG_X86_32
- mov %esi,xen_start_info
- mov $init_thread_union+THREAD_SIZE,%esp
+#define REG(register) %e##register
+#define WSIZE_SHIFT 2
+#define STOS stosl
#else
- mov %rsi,xen_start_info
- mov $init_thread_union+THREAD_SIZE,%rsp
+#define REG(register) %r##register
+#define WSIZE_SHIFT 3
+#define STOS stosq
#endif
+
+ __INIT
+ENTRY(startup_xen)
+ cld
+
+ /* Clear .bss */
+ xor REG(ax),REG(ax)
+ mov $__bss_start,REG(di)
+ mov $__bss_stop,REG(cx)
+ sub REG(di),REG(cx)
+ shr $WSIZE_SHIFT,REG(cx)
+ rep STOS
+
+ mov REG(si),xen_start_info
+ mov $init_thread_union+THREAD_SIZE,REG(sp)
+
jmp xen_start_kernel

__FINIT
--
2.1.0