From 1d0c50aaf70f771684a9d1b2b725a3e1f8fef2a0 Mon Sep 17 00:00:00 2001 From: Aptivi Date: Sun, 10 Mar 2024 11:41:59 +0300 Subject: [PATCH] imp - Enter contextual reflection upon booting --- We need to actually make the load contexts useful. --- Type: imp Breaking: False Doc Required: False Part: 1/1 --- GRILO.Bootloader/Boot/Apps/BootAppInfo.cs | 4 ++++ GRILO.Bootloader/Boot/Apps/BootManager.cs | 1 + GRILO.Bootloader/Common/BootloaderMain.cs | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/GRILO.Bootloader/Boot/Apps/BootAppInfo.cs b/GRILO.Bootloader/Boot/Apps/BootAppInfo.cs index 36c9249..7730450 100644 --- a/GRILO.Bootloader/Boot/Apps/BootAppInfo.cs +++ b/GRILO.Bootloader/Boot/Apps/BootAppInfo.cs @@ -18,6 +18,7 @@ // using GRILO.Boot; +using GRILO.Bootloader.Boot.Apps.Marshaling; using GRILO.Bootloader.Boot.Diagnostics; namespace GRILO.Bootloader.Boot.Apps @@ -27,6 +28,9 @@ namespace GRILO.Bootloader.Boot.Apps /// public class BootAppInfo { +#if NET6_0_OR_GREATER + internal BootLoadContext context; +#endif /// /// Bootable file path diff --git a/GRILO.Bootloader/Boot/Apps/BootManager.cs b/GRILO.Bootloader/Boot/Apps/BootManager.cs index d8ea3d2..4fcbc16 100644 --- a/GRILO.Bootloader/Boot/Apps/BootManager.cs +++ b/GRILO.Bootloader/Boot/Apps/BootManager.cs @@ -160,6 +160,7 @@ public static void PopulateBootApps() bootOverrideTitle = metadata["OverrideTitle"]?.ToString() ?? bootable.Title ?? asm.GetName().Name; bootArgs = metadata["Arguments"]?.ToObject() ?? Array.Empty(); bootApp = new(bootFile, bootOverrideTitle, bootArgs, bootable); + bootApp.context = bootContext; bootApps.Add(bootOverrideTitle, bootApp); } } diff --git a/GRILO.Bootloader/Common/BootloaderMain.cs b/GRILO.Bootloader/Common/BootloaderMain.cs index 3b1e6a2..ae5f1d6 100644 --- a/GRILO.Bootloader/Common/BootloaderMain.cs +++ b/GRILO.Bootloader/Common/BootloaderMain.cs @@ -192,7 +192,14 @@ Controls defined by custom boot style ScreenTools.Render(); bootloaderScreen.RequireRefresh(); bootloaderScreen.RemoveBufferedPart("Post-Bootloader Screen"); +#if NET6_0_OR_GREATER + using (chosenBootApp.context.EnterContextualReflection()) + { + chosenBootApp.Bootable.Boot(chosenBootApp.Arguments); + } +#else chosenBootApp.Bootable.Boot(chosenBootApp.Arguments); +#endif shutdownRequested = chosenBootApp.Bootable.ShutdownRequested; DiagnosticsWriter.WriteDiag(DiagnosticsLevel.Info, "Boot app done and shutdown requested is {0}", shutdownRequested);