From 9f6121e9b29fd05895f5b2298f50fe0b8442eef6 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Wed, 20 Aug 2025 20:37:55 +0200 Subject: [PATCH] Map the physical page for trampoline code --- sdk/xtdk/amd64/mmtypes.h | 3 +++ sdk/xtdk/i686/mmtypes.h | 2 ++ xtldr/arch/amd64/memory.c | 9 +++++++++ xtldr/arch/i686/memory.c | 9 +++++++++ 4 files changed, 23 insertions(+) diff --git a/sdk/xtdk/amd64/mmtypes.h b/sdk/xtdk/amd64/mmtypes.h index 8fccfaf..dfe9d7d 100644 --- a/sdk/xtdk/amd64/mmtypes.h +++ b/sdk/xtdk/amd64/mmtypes.h @@ -63,6 +63,9 @@ /* Maximum physical address used by HAL allocations */ #define MM_MAXIMUM_PHYSICAL_ADDRESS 0x00000000FFFFFFFFULL +/* Trampoline code address */ +#define MM_TRAMPOLINE_ADDRESS 0x80000 + /* Page size enumeration list */ typedef enum _PAGE_SIZE { diff --git a/sdk/xtdk/i686/mmtypes.h b/sdk/xtdk/i686/mmtypes.h index 0547330..027fc1a 100644 --- a/sdk/xtdk/i686/mmtypes.h +++ b/sdk/xtdk/i686/mmtypes.h @@ -53,6 +53,8 @@ /* Maximum physical address used by HAL allocations */ #define MM_MAXIMUM_PHYSICAL_ADDRESS 0xFFFFFFFF +/* Trampoline code address */ +#define MM_TRAMPOLINE_ADDRESS 0x80000 /* Page size enumeration list */ typedef enum _PAGE_SIZE diff --git a/xtldr/arch/amd64/memory.c b/xtldr/arch/amd64/memory.c index 9b4f58b..8db75f5 100644 --- a/xtldr/arch/amd64/memory.c +++ b/xtldr/arch/amd64/memory.c @@ -54,6 +54,15 @@ BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, return Status; } + /* Map the trampoline code area */ + Status = BlMapVirtualMemory(PageMap, (PVOID)MM_TRAMPOLINE_ADDRESS,(PVOID)MM_TRAMPOLINE_ADDRESS, + 1, LoaderFirmwareTemporary); + if(Status != STATUS_EFI_SUCCESS) + { + /* Mapping trampoline code failed */ + return Status; + } + /* Get list of XTLDR modules */ ModulesList = BlGetModulesList(); ModulesListEntry = ModulesList->Flink; diff --git a/xtldr/arch/i686/memory.c b/xtldr/arch/i686/memory.c index 51f91b4..a642e1f 100644 --- a/xtldr/arch/i686/memory.c +++ b/xtldr/arch/i686/memory.c @@ -90,6 +90,15 @@ BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, return Status; } + /* Map the trampoline code area */ + Status = BlMapVirtualMemory(PageMap, (PVOID)MM_TRAMPOLINE_ADDRESS,(PVOID)MM_TRAMPOLINE_ADDRESS, + 1, LoaderFirmwareTemporary); + if(Status != STATUS_EFI_SUCCESS) + { + /* Mapping trampoline code failed */ + return Status; + } + /* Get list of XTLDR modules */ ModulesList = BlGetModulesList(); ModulesListEntry = ModulesList->Flink;