From: Frediano Ziglio <frediano.ziglio@cloud.com>
To: xen-devel@lists.xenproject.org
Cc: "Frediano Ziglio" <frediano.ziglio@cloud.com>,
"Jan Beulich" <jbeulich@suse.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v3 1/4] x86/boot: Initialise BSS sooner
Date: Tue, 24 Sep 2024 11:28:08 +0100 [thread overview]
Message-ID: <20240924102811.86884-2-frediano.ziglio@cloud.com> (raw)
In-Reply-To: <20240924102811.86884-1-frediano.ziglio@cloud.com>
Allows to call C code earlier.
In order to safely call C code we need to setup stack, selectors and BSS.
Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
---
Changes since v1:
- improve commit message;
- improve some comments;
- fix some code style (spacing);
- set trampoline_phys as 32 bit value;
- use PAGE_SIZE mnemonic instead of 0x1000;
- use local label.
---
xen/arch/x86/boot/head.S | 77 ++++++++++++++++++++--------------------
1 file changed, 39 insertions(+), 38 deletions(-)
diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S
index cfc5a7b47d..fa21024042 100644
--- a/xen/arch/x86/boot/head.S
+++ b/xen/arch/x86/boot/head.S
@@ -231,6 +231,27 @@ __efi64_mb2_start:
/* VGA is not available on EFI platforms. */
movl $0,vga_text_buffer(%rip)
+ /*
+ * Align the stack as UEFI spec requires. Keep it aligned
+ * before efi_multiboot2() call by pushing/popping even
+ * numbers of items on it.
+ */
+ and $~15, %rsp
+
+ /*
+ * Initialize BSS (no nasty surprises!).
+ * It must be done earlier than in BIOS case
+ * because efi_multiboot2() touches it.
+ */
+ mov %eax, %edx
+ lea __bss_start(%rip), %edi
+ lea __bss_end(%rip), %ecx
+ sub %edi, %ecx
+ shr $3, %ecx
+ xor %eax, %eax
+ rep stosq
+ mov %edx, %eax
+
/* Check for Multiboot2 bootloader. */
cmp $MULTIBOOT2_BOOTLOADER_MAGIC,%eax
je .Lefi_multiboot2_proto
@@ -321,34 +342,12 @@ __efi64_mb2_start:
lea .Lmb2_no_ih(%rip),%r15
jz x86_32_switch
- /*
- * Align the stack as UEFI spec requires. Keep it aligned
- * before efi_multiboot2() call by pushing/popping even
- * numbers of items on it.
- */
- and $~15,%rsp
-
/* Save Multiboot2 magic on the stack. */
push %rax
/* Save EFI ImageHandle on the stack. */
push %rdi
- /*
- * Initialize BSS (no nasty surprises!).
- * It must be done earlier than in BIOS case
- * because efi_multiboot2() touches it.
- */
- lea __bss_start(%rip),%edi
- lea __bss_end(%rip),%ecx
- sub %edi,%ecx
- shr $3,%ecx
- xor %eax,%eax
- rep stosq
-
- /* Keep the stack aligned. Do not pop a single item off it. */
- mov (%rsp),%rdi
-
/*
* efi_multiboot2() is called according to System V AMD64 ABI:
* - IN: %rdi - EFI ImageHandle, %rsi - EFI SystemTable,
@@ -434,6 +433,8 @@ __pvh_start:
/* Set up stack. */
lea STACK_SIZE - CPUINFO_sizeof + sym_esi(cpu0_stack), %esp
+ call .Linitialise_bss
+
mov %ebx, sym_esi(pvh_start_info_pa)
/* Force xen console. Will revert to user choice in init code. */
@@ -459,6 +460,20 @@ __pvh_start:
#endif /* CONFIG_PVH_GUEST */
+.Linitialise_bss:
+ /* Initialise the BSS. */
+ mov %eax, %edx
+
+ lea sym_esi(__bss_start), %edi
+ lea sym_esi(__bss_end), %ecx
+ sub %edi, %ecx
+ xor %eax, %eax
+ shr $2, %ecx
+ rep stosl
+
+ mov %edx, %eax
+ ret
+
__start:
cld
cli
@@ -489,6 +504,8 @@ __start:
/* Set up stack. */
lea STACK_SIZE - CPUINFO_sizeof + sym_esi(cpu0_stack), %esp
+ call .Linitialise_bss
+
/* Bootloaders may set multiboot{1,2}.mem_lower to a nonzero value. */
xor %edx,%edx
@@ -645,22 +662,6 @@ trampoline_setup:
* reserved for trampoline code and data.
*/
- /*
- * Do not zero BSS on EFI platform here.
- * It was initialized earlier.
- */
- cmpb $0, sym_esi(efi_platform)
- jnz 1f
-
- /* Initialise the BSS. */
- lea sym_esi(__bss_start), %edi
- lea sym_esi(__bss_end), %ecx
- sub %edi,%ecx
- xor %eax,%eax
- shr $2,%ecx
- rep stosl
-
-1:
/* Interrogate CPU extended features via CPUID. */
mov $1, %eax
cpuid
--
2.34.1
next prev parent reply other threads:[~2024-09-24 10:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-24 10:28 [PATCH v3 0/4] x86/boot: Reduce assembly code Frediano Ziglio
2024-09-24 10:28 ` Frediano Ziglio [this message]
2024-09-24 12:47 ` [PATCH v3 1/4] x86/boot: Initialise BSS sooner Andrew Cooper
2024-09-24 10:28 ` [PATCH v3 2/4] x86/boot: Refactor BIOS/PVH start Frediano Ziglio
2024-09-24 13:25 ` Andrew Cooper
2024-09-24 13:30 ` Andrew Cooper
2024-09-24 13:45 ` Andrew Cooper
2024-09-24 10:28 ` [PATCH v3 3/4] x86/boot: Rewrite EFI/MBI2 code partly in C Frediano Ziglio
2024-09-24 14:08 ` Andrew Cooper
2024-09-24 14:17 ` Jan Beulich
2024-09-24 14:28 ` Frediano Ziglio
2024-09-24 14:42 ` Jan Beulich
2024-09-24 10:28 ` [PATCH v3 4/4] x86/boot: Improve MBI2 structure check Frediano Ziglio
2024-09-24 14:15 ` Andrew Cooper
2024-09-24 14:20 ` Frediano Ziglio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240924102811.86884-2-frediano.ziglio@cloud.com \
--to=frediano.ziglio@cloud.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.