diff --git a/boot/freeldr/freeldr/arch/uefi/amd64/uefiasm.S b/boot/freeldr/freeldr/arch/uefi/amd64/uefiasm.S index 9db8106e2b945..c4cd78d1e0b3c 100644 --- a/boot/freeldr/freeldr/arch/uefi/amd64/uefiasm.S +++ b/boot/freeldr/freeldr/arch/uefi/amd64/uefiasm.S @@ -25,7 +25,6 @@ _exituefi: push rdi push rbx - /* Save the old stack */ mov rbx, rsp @@ -46,6 +45,12 @@ _exituefi: pop rsi pop rbp +#ifdef _USE_ML + lgdt fword ptr [_gdtptr] +#else + lgdt cs:[_gdtptr][rip] /* GAS isn't my friend - avoid letting it generate absolute addressing */ +#endif + /* All done */ ret @@ -58,16 +63,6 @@ _changestack: call ExecuteLoaderCleanly[rip] ret -// void _changegdt(VOID) -PUBLIC _changegdt -_changegdt: -#ifdef _USE_ML - lgdt fword ptr [_gdtptr] -#else - lgdt cs:[_gdtptr][rip] /* GAS isn't my friend - avoid letting it generate absolute addressing */ -#endif - ret - .align 8 gdt: .word HEX(0000), HEX(0000), HEX(0000), HEX(0000) /* 00: NULL descriptor */ diff --git a/boot/freeldr/freeldr/arch/uefi/i386/uefiasm.S b/boot/freeldr/freeldr/arch/uefi/i386/uefiasm.S index 37f16fc0c7270..0e368e19536d9 100644 --- a/boot/freeldr/freeldr/arch/uefi/i386/uefiasm.S +++ b/boot/freeldr/freeldr/arch/uefi/i386/uefiasm.S @@ -47,6 +47,13 @@ __exituefi: pop esi pop ebp +#ifdef _USE_ML + lidt fword ptr ds:[_i386idtptr] + lgdt fword ptr [_gdtptr] +#else + lgdt cs:[_gdtptr] + lidt _i386idtptr +#endif /* All done */ ret diff --git a/boot/freeldr/freeldr/arch/uefi/uefildr.c b/boot/freeldr/freeldr/arch/uefi/uefildr.c index 06905c980bc0b..fa989a19541ac 100644 --- a/boot/freeldr/freeldr/arch/uefi/uefildr.c +++ b/boot/freeldr/freeldr/arch/uefi/uefildr.c @@ -81,7 +81,7 @@ VOID __cdecl Reboot(VOID) WARN("Stopping freeloader something has gone wrong - Freezing"); for(;;) { - + NOTHING; } } #endif diff --git a/boot/freeldr/freeldr/arch/uefi/uefimem.c b/boot/freeldr/freeldr/arch/uefi/uefimem.c index e5f06c0a6d639..b685bfcaf94f5 100644 --- a/boot/freeldr/freeldr/arch/uefi/uefimem.c +++ b/boot/freeldr/freeldr/arch/uefi/uefimem.c @@ -40,7 +40,6 @@ EFI_HANDLE PublicBootHandle; PVOID ExitStack; PVOID EndofExitStack; -void _changegdt(VOID); void _exituefi(VOID); /* FUNCTIONS *****************************************************************/ @@ -89,7 +88,7 @@ VOID UefiSetMemory( _Inout_ PFREELDR_MEMORY_DESCRIPTOR MemoryMap, _In_ ULONG_PTR BaseAddress, - _In_ PFN_COUNT Size, + _In_ PFN_COUNT SizeInPages, _In_ TYPE_OF_MEMORY MemoryType) { ULONG_PTR BasePage, PageCount; @@ -327,5 +326,4 @@ VOID UefiPrepareForReactOS(VOID) { _exituefi(); - _changegdt(); } diff --git a/boot/freeldr/freeldr/uefi.cmake b/boot/freeldr/freeldr/uefi.cmake index fd4b430554e3f..a3bc6a7e2e09d 100644 --- a/boot/freeldr/freeldr/uefi.cmake +++ b/boot/freeldr/freeldr/uefi.cmake @@ -91,7 +91,11 @@ add_executable(uefildr ${UEFILDR_BASE_SOURCE}) set_target_properties(uefildr PROPERTIES SUFFIX ".efi") target_compile_definitions(uefildr PRIVATE UEFIBOOT) -set_image_base(uefildr 0x10000) + +# On AMD64 we only map 1GB with freeloader, tell UEFI to keep us low! +if(ARCH STREQUAL "amd64") + set_image_base(uefildr 0x10000) +endif() if(MSVC) if(NOT ARCH STREQUAL "arm")