uefi64kos: Fix stack alignment on function calls.

It is a formal requirement of UEFI spec that the stack is to be aligned
on 16 bytes on all calls to service routines. I changed eficall macro to
fstcall one in my previous commit. Due to differences in macro logic
that change broke UEFI boot on some platforms that do care about stack
alignment. This commit should fix the issue.

git-svn-id: svn://kolibrios.org@9253 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Ivan Baravy 2021-11-05 02:17:31 +00:00
parent 7454368c78
commit e44770ac18
3 changed files with 279 additions and 465 deletions

View File

@ -20,36 +20,39 @@ EFIERR = 0x80000000
struct EFI_SYSTEM_TABLE struct EFI_SYSTEM_TABLE
Hdr EFI_TABLE_HEADER Hdr EFI_TABLE_HEADER
FirmwareVendor dd ? FirmwareVendor DN ?
FirmwareRevision dd ? FirmwareRevision dd ?
ConsoleInHandle dd ?
ConIn dd ? ConsoleInHandle DN ?
ConsoleOutHandle dd ? ConIn DN ?
ConOut dd ? ConsoleOutHandle DN ?
StandardErrorHandle dd ? ConOut DN ?
StdErr dd ? StandardErrorHandle DN ?
RuntimeServices dd ? StdErr DN ?
BootServices dd ? RuntimeServices DN ?
NumberOfTableEntries dd ? BootServices DN ?
ConfigurationTable dd ? NumberOfTableEntries DN ?
ConfigurationTable DN ?
ends ends
struct EFI_CONFIGURATION_TABLE struct EFI_CONFIGURATION_TABLE
VendorGUID rd 4 VendorGUID rd 4
VendorTable dd ? VendorTable DN ?
ends ends
struct EFI_LOADED_IMAGE_PROTOCOL struct EFI_LOADED_IMAGE_PROTOCOL
Revision dd ? Revision dd ?
ParentHandle dd ?
SystemTable dd ? ParentHandle DN ?
DeviceHandle dd ? SystemTable DN ?
FilePath dd ? DeviceHandle DN ?
Reserved dd ? FilePath DN ?
Reserved DN ?
LoadOptionsSize dd ? LoadOptionsSize dd ?
ImageBase dd ?
ImageBase DN ?
ImageSize DQ ? ImageSize DQ ?
ImageCodeType dd ? ImageCodeType dd ?
ImageDataType dd ? ImageDataType dd ?
UnLoad dd ? UnLoad DN ?
ends ends

View File

@ -20,34 +20,39 @@ EFIERR = 0x8000000000000000
struct EFI_SYSTEM_TABLE struct EFI_SYSTEM_TABLE
Hdr EFI_TABLE_HEADER Hdr EFI_TABLE_HEADER
FirmwareVendor dq ? FirmwareVendor DN ?
FirmwareRevision dd ? FirmwareRevision dd ?
dd ? dd ?
ConsoleInHandle dq ? ConsoleInHandle DN ?
ConIn dq ? ConIn DN ?
ConsoleOutHandle dq ? ConsoleOutHandle DN ?
ConOut dq ? ConOut DN ?
StandardErrorHandle dq ? StandardErrorHandle DN ?
StdErr dq ? StdErr DN ?
RuntimeServices dq ? RuntimeServices DN ?
BootServices dq ? BootServices DN ?
NumberOfTableEntries dq ? NumberOfTableEntries DN ?
ConfigurationTable dq ? ConfigurationTable DN ?
ends
struct EFI_CONFIGURATION_TABLE
VendorGUID rd 4
VendorTable DN ?
ends ends
struct EFI_LOADED_IMAGE_PROTOCOL struct EFI_LOADED_IMAGE_PROTOCOL
Revision dd ? Revision dd ?
dd ? dd ?
ParentHandle dq ? ParentHandle DN ?
SystemTable dq ? SystemTable DN ?
DeviceHandle dq ? DeviceHandle DN ?
FilePath dq ? FilePath DN ?
Reserved dq ? Reserved DN ?
LoadOptionsSize dd ? LoadOptionsSize dd ?
dd ? dd ?
ImageBase dq ? ImageBase DN ?
ImageSize dq ? ImageSize dq ?
ImageCodeType dd ? ImageCodeType dd ?
ImageDataType dd ? ImageDataType dd ?
UnLoad dq ? UnLoad DN ?
ends ends

File diff suppressed because it is too large Load Diff