From 57ce3ae33e4b694ec1a3621e607e8fe884093ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauri=20Kentt=C3=A4?= Date: Mon, 20 Nov 2023 16:29:23 +0200 Subject: [PATCH] Avoid using gnu-efi static global GUIDs --- src/main.c | 8 +++----- src/util.h | 8 ++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index 5ee3410..2697b61 100644 --- a/src/main.c +++ b/src/main.c @@ -28,8 +28,7 @@ static struct HackBGRT_config config = { static EFI_GRAPHICS_OUTPUT_PROTOCOL* GOP(void) { static EFI_GRAPHICS_OUTPUT_PROTOCOL* gop; if (!gop) { - EFI_GUID GraphicsOutputProtocolGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID; - LibLocateProtocol(&GraphicsOutputProtocolGuid, (VOID **)&gop); + LibLocateProtocol(TmpGuidPtr((EFI_GUID) EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID), (void**) &gop); } return gop; } @@ -130,9 +129,8 @@ ACPI_SDT_HEADER* CreateXsdt(ACPI_SDT_HEADER* xsdt0, UINTN entries) { */ static ACPI_BGRT* HandleAcpiTables(enum HackBGRT_action action, ACPI_BGRT* bgrt) { for (int i = 0; i < ST->NumberOfTableEntries; i++) { - EFI_GUID Acpi20TableGuid = ACPI_20_TABLE_GUID; EFI_GUID* vendor_guid = &ST->ConfigurationTable[i].VendorGuid; - if (!CompareGuid(vendor_guid, &AcpiTableGuid) && !CompareGuid(vendor_guid, &Acpi20TableGuid)) { + if (CompareMem(vendor_guid, TmpGuidPtr((EFI_GUID) ACPI_TABLE_GUID), sizeof(EFI_GUID)) != 0 && CompareMem(vendor_guid, TmpGuidPtr((EFI_GUID) ACPI_20_TABLE_GUID), sizeof(EFI_GUID)) != 0) { continue; } ACPI_20_RSDP* rsdp = (ACPI_20_RSDP *) ST->ConfigurationTable[i].VendorTable; @@ -411,7 +409,7 @@ EFI_STATUS EFIAPI EfiMain(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *ST_) { Log(0, L"HackBGRT version: %s\n", version); EFI_LOADED_IMAGE* image; - if (EFI_ERROR(BS->HandleProtocol(image_handle, &LoadedImageProtocol, (void**) &image))) { + if (EFI_ERROR(BS->HandleProtocol(image_handle, TmpGuidPtr((EFI_GUID) EFI_LOADED_IMAGE_PROTOCOL_GUID), (void**) &image))) { Log(config.debug, L"HackBGRT: LOADED_IMAGE_PROTOCOL failed.\n"); goto fail; } diff --git a/src/util.h b/src/util.h index 8ed7847..3785fd4 100644 --- a/src/util.h +++ b/src/util.h @@ -120,3 +120,11 @@ static inline void* LoadFile(EFI_FILE_HANDLE dir, const CHAR16* path, UINTN* siz return LoadFileWithPadding(dir, path, size_ptr, 0); } +/** + * Get a temporary pointer to GUID. + */ +static inline EFI_GUID* TmpGuidPtr(EFI_GUID guid) { + static EFI_GUID g; + g = guid; + return &g; +}