From 7358344616f4ddce2dabf9bbe5a00397484b5728 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Tue, 8 Feb 2022 14:20:37 -0700
Subject: [PATCH] Re-enable support for live kernel

---
 src/os/uefi/arch/x86_64/mod.rs | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/os/uefi/arch/x86_64/mod.rs b/src/os/uefi/arch/x86_64/mod.rs
index ad5ade1..aba74d9 100644
--- a/src/os/uefi/arch/x86_64/mod.rs
+++ b/src/os/uefi/arch/x86_64/mod.rs
@@ -223,7 +223,35 @@ fn inner() -> Result<()> {
         }
 
         println!("Loading Kernel...");
-        let kernel = {
+        let kernel = if let Ok((_i, mut kernel_file)) = find("\\redox_bootloader\\kernel") {
+            let info = kernel_file.info()?;
+            let len = info.FileSize;
+
+            let kernel = unsafe {
+                let ptr = allocate_zero_pages((len as usize + page_size - 1) / page_size)?;
+                slice::from_raw_parts_mut(
+                    ptr as *mut u8,
+                    len as usize
+                )
+            };
+
+            let mut i = 0;
+            for mut chunk in kernel.chunks_mut(4 * MB) {
+                print!("\r{}% - {} MB", i as u64 * 100 / len, i / MB);
+
+                let count = kernel_file.read(&mut chunk)?;
+                if count == 0 {
+                    break;
+                }
+                //TODO: return error instead of assert
+                assert_eq!(count, chunk.len());
+
+                i += count;
+            }
+            println!("\r{}% - {} MB", i as u64 * 100 / len, i / MB);
+
+            kernel
+        } else {
             let mut fs = redoxfs()?;
 
             let root = fs.header.1.root;
-- 
GitLab