1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 11:55:44 +03:00

src/boot/efi/linux: elide __attribute__((regparm(0))) on non-i386

This attribute is x86_32-only, so when building on non-intel archs it
generates a compiler warning.  When building with -Werror this turns
into an error, so only include the attribute on i386 arch builds.
This commit is contained in:
Dan Streetman 2019-08-13 07:02:33 -04:00
parent 82a0fb328e
commit 4287d0832c

View File

@ -6,24 +6,24 @@
#include "linux.h"
#include "util.h"
#ifdef __x86_64__
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params);
static VOID linux_efi_handover(EFI_HANDLE image, struct boot_params *params) {
handover_f handover;
asm volatile ("cli");
handover = (handover_f)((UINTN)params->hdr.code32_start + 512 + params->hdr.handover_offset);
handover(image, ST, params);
}
#ifdef __i386__
#define __regparm0__ __attribute__((regparm(0)))
#else
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params) __attribute__((regparm(0)));
#define __regparm0__
#endif
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params) __regparm0__;
static VOID linux_efi_handover(EFI_HANDLE image, struct boot_params *params) {
handover_f handover;
UINTN start = (UINTN)params->hdr.code32_start;
handover = (handover_f)((UINTN)params->hdr.code32_start + params->hdr.handover_offset);
#ifdef __x86_64__
asm volatile ("cli");
start += 512;
#endif
handover = (handover_f)(start + params->hdr.handover_offset);
handover(image, ST, params);
}
#endif
EFI_STATUS linux_exec(EFI_HANDLE *image,
CHAR8 *cmdline, UINTN cmdline_len,