From 450c33b588059e0289d5d8da0cd9c7a2d2d2dd51 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 18 Mar 2021 08:37:52 +0100 Subject: core/systemd: temporary backport for gnu-efi (see FS#70046) --- core/systemd/PKGBUILD | 14 ++++ core/systemd/systemd-gnu-efi.patch | 162 +++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 core/systemd/systemd-gnu-efi.patch (limited to 'core') diff --git a/core/systemd/PKGBUILD b/core/systemd/PKGBUILD index 5ca0e402..d39d338e 100644 --- a/core/systemd/PKGBUILD +++ b/core/systemd/PKGBUILD @@ -8,3 +8,17 @@ eval "$( s/meson test -C build/meson test -C build || true/ ' )" + +# compilation issues with gnu-efi 3.0.13 +# https://bugs.archlinux.org/task/70046?project=1&string=systemd+grub-efi&search_name=&type[0]=&sev[0]=&pri[0]=&due[0]=&reported[0]=&cat[0]=&status[0]=open&percent[0]=&opened=&dev=&closed=&duedatefrom=&duedateto=&changedfrom=&changedto=&openedfrom=&openedto=&closedfrom=&closedto=&order=dateopened&sort=desc +# https://github.com/systemd/systemd/pull/18987 +source+=('systemd-gnu-efi.patch') +sha512sums+=('e4e2bb0b0777a297a4c2b32b35a9a7c03e4de2ccf00f44454f1dcf0f441ba41f20d812d4771863612143a7e9b1df5e40e91b05e98de415e354b008fece3ca4da') + +eval "$( + declare -f prepare | \ + sed ' + /patch/ a \ + patch -p1 -i "$srcdir/systemd-gnu-efi.patch" + ' +)" diff --git a/core/systemd/systemd-gnu-efi.patch b/core/systemd/systemd-gnu-efi.patch new file mode 100644 index 00000000..d7a70f42 --- /dev/null +++ b/core/systemd/systemd-gnu-efi.patch @@ -0,0 +1,162 @@ +diff -rauN systemd/src/boot/efi/console.c systemd-gnu-efi-patch/src/boot/efi/console.c +--- systemd/src/boot/efi/console.c 2021-03-18 08:29:47.379875918 +0100 ++++ systemd-gnu-efi-patch/src/boot/efi/console.c 2021-03-18 08:31:44.879432904 +0100 +@@ -9,63 +9,8 @@ + #define SYSTEM_FONT_WIDTH 8 + #define SYSTEM_FONT_HEIGHT 19 + +-#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ +- { 0xdd9e7534, 0x7762, 0x4698, { 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa } } +- +-struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; +- +-typedef EFI_STATUS (EFIAPI *EFI_INPUT_RESET_EX)( +- struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, +- BOOLEAN ExtendedVerification +-); +- +-typedef UINT8 EFI_KEY_TOGGLE_STATE; +- +-typedef struct { +- UINT32 KeyShiftState; +- EFI_KEY_TOGGLE_STATE KeyToggleState; +-} EFI_KEY_STATE; +- +-typedef struct { +- EFI_INPUT_KEY Key; +- EFI_KEY_STATE KeyState; +-} EFI_KEY_DATA; +- +-typedef EFI_STATUS (EFIAPI *EFI_INPUT_READ_KEY_EX)( +- struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, +- EFI_KEY_DATA *KeyData +-); +- +-typedef EFI_STATUS (EFIAPI *EFI_SET_STATE)( +- struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, +- EFI_KEY_TOGGLE_STATE *KeyToggleState +-); +- +-typedef EFI_STATUS (EFIAPI *EFI_KEY_NOTIFY_FUNCTION)( +- EFI_KEY_DATA *KeyData +-); +- +-typedef EFI_STATUS (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY)( +- struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, +- EFI_KEY_DATA KeyData, +- EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, +- VOID **NotifyHandle +-); +- +-typedef EFI_STATUS (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY)( +- struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, +- VOID *NotificationHandle +-); +- +-typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL { +- EFI_INPUT_RESET_EX Reset; +- EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx; +- EFI_EVENT WaitForKeyEx; +- EFI_SET_STATE SetState; +- EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify; +- EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify; +-} EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; +- ++#define EFI_SIMPLE_TEXT_INPUT_EX_GUID &(EFI_GUID) EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID ++ + EFI_STATUS console_key_read(UINT64 *key, BOOLEAN wait) { + EFI_GUID EfiSimpleTextInputExProtocolGuid = EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID; + static EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInputEx; +diff -rauN systemd/src/boot/efi/console.h systemd-gnu-efi-patch/src/boot/efi/console.h +--- systemd/src/boot/efi/console.h 2021-03-18 08:29:47.379875918 +0100 ++++ systemd-gnu-efi-patch/src/boot/efi/console.h 2021-03-18 08:32:00.926039744 +0100 +@@ -1,12 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + #pragma once + +-#define EFI_SHIFT_STATE_VALID 0x80000000 +-#define EFI_RIGHT_CONTROL_PRESSED 0x00000004 +-#define EFI_LEFT_CONTROL_PRESSED 0x00000008 +-#define EFI_RIGHT_ALT_PRESSED 0x00000010 +-#define EFI_LEFT_ALT_PRESSED 0x00000020 +- ++#include "missing_efi.h" ++ + #define EFI_CONTROL_PRESSED (EFI_RIGHT_CONTROL_PRESSED|EFI_LEFT_CONTROL_PRESSED) + #define EFI_ALT_PRESSED (EFI_RIGHT_ALT_PRESSED|EFI_LEFT_ALT_PRESSED) + #define KEYPRESS(keys, scan, uni) ((((UINT64)keys) << 32) | (((UINT64)scan) << 16) | (uni)) +diff -rauN systemd/src/boot/efi/missing_efi.h systemd-gnu-efi-patch/src/boot/efi/missing_efi.h +--- systemd/src/boot/efi/missing_efi.h 2021-03-18 08:29:47.379875918 +0100 ++++ systemd-gnu-efi-patch/src/boot/efi/missing_efi.h 2021-03-18 08:33:21.632407838 +0100 +@@ -52,4 +52,71 @@ + EFI_RNG_GET_RNG GetRNG; + } EFI_RNG_PROTOCOL; + ++#ifndef EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID ++ ++#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ ++ { 0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa} } ++ ++#define EFI_SHIFT_STATE_VALID 0x80000000 ++#define EFI_RIGHT_CONTROL_PRESSED 0x00000004 ++#define EFI_LEFT_CONTROL_PRESSED 0x00000008 ++#define EFI_RIGHT_ALT_PRESSED 0x00000010 ++#define EFI_LEFT_ALT_PRESSED 0x00000020 ++ ++struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; ++ ++typedef EFI_STATUS (EFIAPI *EFI_INPUT_RESET_EX)( ++ struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, ++ BOOLEAN ExtendedVerification ++); ++ ++typedef UINT8 EFI_KEY_TOGGLE_STATE; ++ ++typedef struct { ++ UINT32 KeyShiftState; ++ EFI_KEY_TOGGLE_STATE KeyToggleState; ++} EFI_KEY_STATE; ++ ++typedef struct { ++ EFI_INPUT_KEY Key; ++ EFI_KEY_STATE KeyState; ++} EFI_KEY_DATA; ++ ++typedef EFI_STATUS (EFIAPI *EFI_INPUT_READ_KEY_EX)( ++ struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, ++ EFI_KEY_DATA *KeyData ++); ++ ++typedef EFI_STATUS (EFIAPI *EFI_SET_STATE)( ++ struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, ++ EFI_KEY_TOGGLE_STATE *KeyToggleState ++); ++ ++typedef EFI_STATUS (EFIAPI *EFI_KEY_NOTIFY_FUNCTION)( ++ EFI_KEY_DATA *KeyData ++); ++ ++typedef EFI_STATUS (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY)( ++ struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, ++ EFI_KEY_DATA KeyData, ++ EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, ++ VOID **NotifyHandle ++); ++ ++typedef EFI_STATUS (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY)( ++ struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, ++ VOID *NotificationHandle ++); ++ ++typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL { ++ EFI_INPUT_RESET_EX Reset; ++ EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx; ++ EFI_EVENT WaitForKeyEx; ++ EFI_SET_STATE SetState; ++ EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify; ++ EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify; ++} EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; ++ ++#endif ++ + #endif -- cgit v1.2.3-70-g09d2