grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 4/5] efi: Remove x86_64 call wrappers


From: Ard Biesheuvel
Subject: [PATCH v4 4/5] efi: Remove x86_64 call wrappers
Date: Tue, 23 May 2023 17:31:44 +0200

The call wrappers are no longer needed now that GCC can generate
function calls using MS calling convention, so let's get rid of them.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 grub-core/Makefile.core.def          |   1 -
 grub-core/kern/x86_64/efi/callwrap.S | 129 --------------------
 include/grub/efi/api.h               |  73 -----------
 3 files changed, 203 deletions(-)

diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index c69c4a3321d27ecd..1d88c4d1c2555f7f 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -236,7 +236,6 @@ kernel = {
 
   x86_64 = kern/x86_64/dl.c;
   x86_64_xen = kern/x86_64/dl.c;
-  x86_64_efi = kern/x86_64/efi/callwrap.S;
   x86_64_efi = kern/i386/efi/init.c;
   x86_64_efi = bus/pci.c;
 
diff --git a/grub-core/kern/x86_64/efi/callwrap.S 
b/grub-core/kern/x86_64/efi/callwrap.S
deleted file mode 100644
index 1337fd9fc823f8a4..0000000000000000
--- a/grub-core/kern/x86_64/efi/callwrap.S
+++ /dev/null
@@ -1,129 +0,0 @@
-/* callwrap.S - wrapper for x86_64 efi calls */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2006,2007,2009  Free Software Foundation, Inc.
- *
- *  GRUB is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-#include <grub/symbol.h>
-
-/*
- * x86_64 uses registry to pass parameters. Unfortunately, gcc and efi use
- * different call conversion, so we need to do some conversion.
- *
- * gcc:
- *   %rdi,  %rsi,  %rdx,  %rcx, %r8, %r9, 8(%rsp), 16(%rsp), ...
- *
- * efi:
- *   %rcx,  %rdx,  %r8,  %r9,  32(%rsp), 40(%rsp), 48(%rsp), ...
- *
- */
-
-        .file   "callwrap.S"
-        .text
-
-FUNCTION(efi_wrap_0)
-       subq $40, %rsp
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_1)
-       subq $40, %rsp
-       mov  %rsi, %rcx
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_2)
-       subq $40, %rsp
-       mov  %rsi, %rcx
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_3)
-       subq $40, %rsp
-       mov  %rcx, %r8
-       mov  %rsi, %rcx
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_4)
-       subq $40, %rsp
-       mov %r8, %r9
-       mov %rcx, %r8
-       mov %rsi, %rcx
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_5)
-       subq $40, %rsp
-       mov %r9, 32(%rsp)
-       mov %r8, %r9
-       mov %rcx, %r8
-       mov %rsi, %rcx
-       call *%rdi
-       addq $40, %rsp
-       ret
-
-FUNCTION(efi_wrap_6)
-       subq $56, %rsp
-       mov 56+8(%rsp), %rax
-       mov %rax, 40(%rsp)
-       mov %r9, 32(%rsp)
-       mov %r8, %r9
-       mov %rcx, %r8
-       mov %rsi, %rcx
-       call *%rdi
-       addq $56, %rsp
-       ret
-
-FUNCTION(efi_wrap_7)
-       subq $88, %rsp
-       mov 88+16(%rsp), %rax
-       mov %rax, 48(%rsp)
-       mov 88+8(%rsp), %rax
-       mov %rax, 40(%rsp)
-       mov %r9, 32(%rsp)
-       mov %r8, %r9
-       mov %rcx, %r8
-       mov %rsi, %rcx
-       call *%rdi
-       addq $88, %rsp
-       ret
-
-FUNCTION(efi_wrap_10)
-       subq $88, %rsp
-       mov 88+40(%rsp), %rax
-       mov %rax, 72(%rsp)
-       mov 88+32(%rsp), %rax
-       mov %rax, 64(%rsp)
-       mov 88+24(%rsp), %rax
-       mov %rax, 56(%rsp)
-       mov 88+16(%rsp), %rax
-       mov %rax, 48(%rsp)
-       mov 88+8(%rsp), %rax
-       mov %rax, 40(%rsp)
-       mov %r9, 32(%rsp)
-       mov %r8, %r9
-       mov %rcx, %r8
-       mov %rsi, %rcx
-       call *%rdi
-       addq $88, %rsp
-       ret
diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
index ebfa6c40fba34eae..fb881ae12d5ae73a 100644
--- a/include/grub/efi/api.h
+++ b/include/grub/efi/api.h
@@ -1824,77 +1824,4 @@ struct initrd_media_device_path {
 } GRUB_PACKED;
 typedef struct initrd_media_device_path initrd_media_device_path_t;
 
-#if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \
-  || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \
-  || defined(__riscv) || defined (__loongarch__)
-
-#define efi_call_0(func)               (func)()
-#define efi_call_1(func, a)            (func)(a)
-#define efi_call_2(func, a, b)         (func)(a, b)
-#define efi_call_3(func, a, b, c)      (func)(a, b, c)
-#define efi_call_4(func, a, b, c, d)   (func)(a, b, c, d)
-#define efi_call_5(func, a, b, c, d, e)        (func)(a, b, c, d, e)
-#define efi_call_6(func, a, b, c, d, e, f) (func)(a, b, c, d, e, f)
-#define efi_call_7(func, a, b, c, d, e, f, g) (func)(a, b, c, d, e, f, g)
-#define efi_call_10(func, a, b, c, d, e, f, g, h, i, j)        (func)(a, b, c, 
d, e, f, g, h, i, j)
-
-#else
-
-#define efi_call_0(func) \
-  efi_wrap_0(func)
-#define efi_call_1(func, a) \
-  efi_wrap_1(func, (grub_uint64_t) (a))
-#define efi_call_2(func, a, b) \
-  efi_wrap_2(func, (grub_uint64_t) (a), (grub_uint64_t) (b))
-#define efi_call_3(func, a, b, c) \
-  efi_wrap_3(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-            (grub_uint64_t) (c))
-#define efi_call_4(func, a, b, c, d) \
-  efi_wrap_4(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-            (grub_uint64_t) (c), (grub_uint64_t) (d))
-#define efi_call_5(func, a, b, c, d, e)        \
-  efi_wrap_5(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-            (grub_uint64_t) (c), (grub_uint64_t) (d), (grub_uint64_t) (e))
-#define efi_call_6(func, a, b, c, d, e, f) \
-  efi_wrap_6(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-            (grub_uint64_t) (c), (grub_uint64_t) (d), (grub_uint64_t) (e), \
-            (grub_uint64_t) (f))
-#define efi_call_7(func, a, b, c, d, e, f, g) \
-  efi_wrap_7(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-            (grub_uint64_t) (c), (grub_uint64_t) (d), (grub_uint64_t) (e), \
-            (grub_uint64_t) (f), (grub_uint64_t) (g))
-#define efi_call_10(func, a, b, c, d, e, f, g, h, i, j) \
-  efi_wrap_10(func, (grub_uint64_t) (a), (grub_uint64_t) (b), \
-             (grub_uint64_t) (c), (grub_uint64_t) (d), (grub_uint64_t) (e), \
-             (grub_uint64_t) (f), (grub_uint64_t) (g), (grub_uint64_t) (h), \
-             (grub_uint64_t) (i), (grub_uint64_t) (j))
-
-grub_uint64_t EXPORT_FUNC(efi_wrap_0) (void *func);
-grub_uint64_t EXPORT_FUNC(efi_wrap_1) (void *func, grub_uint64_t arg1);
-grub_uint64_t EXPORT_FUNC(efi_wrap_2) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2);
-grub_uint64_t EXPORT_FUNC(efi_wrap_3) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2, grub_uint64_t arg3);
-grub_uint64_t EXPORT_FUNC(efi_wrap_4) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2, grub_uint64_t arg3,
-                                       grub_uint64_t arg4);
-grub_uint64_t EXPORT_FUNC(efi_wrap_5) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2, grub_uint64_t arg3,
-                                       grub_uint64_t arg4, grub_uint64_t arg5);
-grub_uint64_t EXPORT_FUNC(efi_wrap_6) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2, grub_uint64_t arg3,
-                                       grub_uint64_t arg4, grub_uint64_t arg5,
-                                       grub_uint64_t arg6);
-grub_uint64_t EXPORT_FUNC(efi_wrap_7) (void *func, grub_uint64_t arg1,
-                                       grub_uint64_t arg2, grub_uint64_t arg3,
-                                       grub_uint64_t arg4, grub_uint64_t arg5,
-                                       grub_uint64_t arg6, grub_uint64_t arg7);
-grub_uint64_t EXPORT_FUNC(efi_wrap_10) (void *func, grub_uint64_t arg1,
-                                        grub_uint64_t arg2, grub_uint64_t arg3,
-                                        grub_uint64_t arg4, grub_uint64_t arg5,
-                                        grub_uint64_t arg6, grub_uint64_t arg7,
-                                        grub_uint64_t arg8, grub_uint64_t arg9,
-                                        grub_uint64_t arg10);
-#endif
-
 #endif /* ! GRUB_EFI_API_HEADER */
-- 
2.39.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]