All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] efi: Allow expression as func argument to efi_call_* macros on all platforms
@ 2023-02-21 18:20 Glenn Washburn
  2023-02-23 14:14 ` Daniel Kiper
  0 siblings, 1 reply; 2+ messages in thread
From: Glenn Washburn @ 2023-02-21 18:20 UTC (permalink / raw)
  To: grub-devel, Daniel Kiper; +Cc: Glenn Washburn

On EFI platforms where EFI calls do not require a wrapper (notably i386-efi
and arm64-efi), the func argument needs to be wrapped in parenthesis to
allow valid syntax when func is an expression which evaluates to a function
pointer. On EFI platforms that do need a wrapper, this was never an issue
because func is passed to the C function wrapper as an argument and thus
does not need parenthesis to be evaluated.

Signed-off-by: Glenn Washburn <development@efficientek.com>
---
This is not needed by the current GRUB code base. However, it is needed by
some local modifications I've made. Regardless, I think this makes the official
source better.

Glenn
---
 include/grub/efi/api.h | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
index ad2680341b..b4c4646651 100644
--- a/include/grub/efi/api.h
+++ b/include/grub/efi/api.h
@@ -1799,15 +1799,15 @@ typedef struct initrd_media_device_path initrd_media_device_path_t;
   || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \
   || defined(__riscv)
 
-#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)
+#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
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] efi: Allow expression as func argument to efi_call_* macros on all platforms
  2023-02-21 18:20 [PATCH] efi: Allow expression as func argument to efi_call_* macros on all platforms Glenn Washburn
@ 2023-02-23 14:14 ` Daniel Kiper
  0 siblings, 0 replies; 2+ messages in thread
From: Daniel Kiper @ 2023-02-23 14:14 UTC (permalink / raw)
  To: Glenn Washburn; +Cc: grub-devel

On Tue, Feb 21, 2023 at 12:20:32PM -0600, Glenn Washburn wrote:
> On EFI platforms where EFI calls do not require a wrapper (notably i386-efi
> and arm64-efi), the func argument needs to be wrapped in parenthesis to
> allow valid syntax when func is an expression which evaluates to a function
> pointer. On EFI platforms that do need a wrapper, this was never an issue
> because func is passed to the C function wrapper as an argument and thus
> does not need parenthesis to be evaluated.
>
> Signed-off-by: Glenn Washburn <development@efficientek.com>

Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>

Daniel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-02-23 14:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-21 18:20 [PATCH] efi: Allow expression as func argument to efi_call_* macros on all platforms Glenn Washburn
2023-02-23 14:14 ` Daniel Kiper

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.