From 6c4496f839d9ae277dd8e08bd9d39289d461b2d4 Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 21 Dec 2022 22:24:16 +0100 Subject: [PATCH] KERNEL_STACK_SIZE should be expressed in bytes as the name suggests, calculate number of pages where needed --- sdk/xtdk/amd64/ketypes.h | 2 +- sdk/xtdk/i686/ketypes.h | 2 +- xtldr/amd64/memory.c | 14 ++++++-------- xtldr/i686/memory.c | 15 +++++++-------- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index a13555f..f296b1e 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -17,6 +17,6 @@ #define KSEG0_KERNEL_BASE 0x0000000800000000 /* XTOS Kernel stack size */ -#define KERNEL_STACK_SIZE 8 +#define KERNEL_STACK_SIZE 0x8000 #endif /* __XTDK_AMD64_KETYPES_H */ diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 9cd8d9f..de1354e 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -17,6 +17,6 @@ #define KSEG0_KERNEL_BASE 0x01800000 /* XTOS Kernel stack size */ -#define KERNEL_STACK_SIZE 8 +#define KERNEL_STACK_SIZE 0x4000 #endif /* __XTDK_I686_KETYPES_H */ diff --git a/xtldr/amd64/memory.c b/xtldr/amd64/memory.c index d4e6d82..266b6cb 100644 --- a/xtldr/amd64/memory.c +++ b/xtldr/amd64/memory.c @@ -18,9 +18,9 @@ BlCreateStack(IN PVOID *StackPtr, PVOID StackEnd; /* Allocate pages for new stack and calculate its end */ - BlEfiMemoryAllocatePages(StackSize, &Address); + BlEfiMemoryAllocatePages(EFI_SIZE_TO_PAGES(StackSize), &Address); *StackPtr = (PVOID)(UINT_PTR)Address; - StackEnd = (PUINT8)*StackPtr + (StackSize * EFI_PAGE_SIZE) - EFI_PAGE_SIZE; + StackEnd = (PUINT8)*StackPtr + (StackSize - EFI_PAGE_SIZE); /* Create new stack and switch to it immediatelly by calling callback function */ asm volatile("mov %1, %%rax\n" @@ -94,8 +94,8 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map the stack */ BlGetStackPointer(&Stack); - Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE, - LoaderOsloaderStack); + Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, EFI_SIZE_TO_PAGES(KERNEL_STACK_SIZE), + LoaderOsloaderStack); if(Status != STATUS_EFI_SUCCESS) { /* Mapping the stack failed */ @@ -104,8 +104,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map XTLDR code */ Status = BlAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase, - EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), - LoaderFirmwareTemporary); + EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { /* Mapping the boot loader code failed */ @@ -132,8 +131,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, { /* Map memory */ Status = BlMapVirtualMemory(MemoryMappings, (UINT_PTR)Mapping->VirtualAddress, - (UINT_PTR)Mapping->PhysicalAddress, Mapping->NumberOfPages, - FALSE, PtePointer); + (UINT_PTR)Mapping->PhysicalAddress, Mapping->NumberOfPages, FALSE, PtePointer); if(Status != STATUS_EFI_SUCCESS) { /* Memory mapping failed */ diff --git a/xtldr/i686/memory.c b/xtldr/i686/memory.c index f1c778d..029b200 100644 --- a/xtldr/i686/memory.c +++ b/xtldr/i686/memory.c @@ -18,9 +18,9 @@ BlCreateStack(IN PVOID *StackPtr, PVOID StackEnd; /* Allocate pages for new stack and calculate its end */ - BlEfiMemoryAllocatePages(StackSize, &Address); + BlEfiMemoryAllocatePages(EFI_SIZE_TO_PAGES(StackSize), &Address); *StackPtr = (PVOID)(UINT_PTR)Address; - StackEnd = (PUINT8)*StackPtr + (StackSize * EFI_PAGE_SIZE) - EFI_PAGE_SIZE; + StackEnd = (PUINT8)*StackPtr + (StackSize - EFI_PAGE_SIZE); /* Create new stack and switch to it immediatelly by calling callback function */ asm volatile("mov %1, %%eax\n" @@ -200,8 +200,8 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map the stack */ BlGetStackPointer(&Stack); - Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE, - LoaderOsloaderStack); + Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, EFI_SIZE_TO_PAGES(KERNEL_STACK_SIZE), + LoaderOsloaderStack); if(Status != STATUS_EFI_SUCCESS) { /* Mapping the stack failed */ @@ -210,8 +210,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map XTLDR code */ Status = BlAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase, - EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), - LoaderFirmwareTemporary); + EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { /* Mapping the boot loader code failed */ @@ -238,8 +237,8 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, { /* Map memory */ Status = BlMapVirtualMemory(MemoryMappings, (UINT_PTR)Mapping->VirtualAddress, - (UINT_PTR)Mapping->PhysicalAddress, Mapping->NumberOfPages, - PaeExtension, PtePointer); + (UINT_PTR)Mapping->PhysicalAddress, Mapping->NumberOfPages, + PaeExtension, PtePointer); if(Status != STATUS_EFI_SUCCESS) { /* Memory mapping failed */