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:
parent
82a0fb328e
commit
4287d0832c
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user