From 6f38311de19b188b282a21581a017dee6ad9db95 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 9 Nov 2020 13:45:04 +0200 Subject: [PATCH] Fix "upper" entry without upper flag --- Cargo.lock | 2 +- src/main.rs | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 94ba183..2826104 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,4 +25,4 @@ dependencies = [ [[package]] name = "yboot2-proto" version = "0.1.0" -source = "git+https://git.alnyan.me/yggdrasil/yboot2-proto.git#1591988e76a380b7b8fea261aaf2e04760790d5e" +source = "git+https://git.alnyan.me/yggdrasil/yboot2-proto.git#f9c0ad12f7d225a99b7a3c31417576fcd46d8b7a" diff --git a/src/main.rs b/src/main.rs index 2bfd3a9..599ecb8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -88,11 +88,20 @@ fn main() -> Result<(), BootError> { set_efi_mmap(data, &mmap)?; // Setup upper virtual mapping if requested + let real_entry: usize; if (data.get_flags() & yboot2_proto::FLAG_UPPER) != 0 { mem::setup_upper(); + + real_entry = entry; + } else { + real_entry = if entry >= 0xFFFFFF0000000000 { + entry - 0xFFFFFF0000000000 + } else { + entry + }; } unsafe { - llvm_asm!("xor %rbp, %rbp; jmp *$0"::"{di}"(entry)); + llvm_asm!("xor %rbp, %rbp; jmp *$0"::"{di}"(real_entry)); } loop {} }