|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 3/4] x86/efi: avoid a relocation in efi_arch_post_exit_boot()
From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Instead of using the absolute __start_xen address, calculate it as an
offset from the current instruction pointer. The relocation would be
problematic if the generated PE binary had .init.text as a standalone
section with just read and execute permissions."
Removing this relocation is necessary to make it safe to split .init.
No functional change intended.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
--
Changes since v2:
- Improve commit message.
---
xen/arch/x86/efi/efi-boot.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index d738b839ee..b983f054b5 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -270,7 +270,9 @@ static void __init noreturn efi_arch_post_exit_boot(void)
/* Jump to higher mappings. */
"mov stack_start(%%rip), %%rsp\n\t"
- "movabs $__start_xen, %[rip]\n\t"
+ "lea __start_xen(%%rip), %[rip]\n\t"
+ "add %[offset], %[rip]\n\t"
+
"push %[cs]\n\t"
"push %[rip]\n\t"
"lretq"
@@ -278,7 +280,8 @@ static void __init noreturn efi_arch_post_exit_boot(void)
[cr4] "+&r" (cr4)
: [cr3] "r" (idle_pg_table),
[cs] "i" (__HYPERVISOR_CS),
- [ds] "r" (__HYPERVISOR_DS)
+ [ds] "r" (__HYPERVISOR_DS),
+ [offset] "r" (__XEN_VIRT_START - xen_phys_start)
: "memory" );
unreachable();
}
--
2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |