[PATCH 8/9] clang: efi payload: Silence unaligned access warning

Tom Rini trini at konsulko.com
Thu Apr 6 01:48:58 CEST 2023


When building with clang we see this warning:
field guid within 'struct efi_hii_keyboard_layout' is less aligned than 'efi_guid_t' and is usually due to 'struct efi_hii_keyboard_layout' being packed, which can lead to unaligned accesses [-Wunaligned-access]

Which is correct and true as EFI payloads are by specification allowed
to do unaligned access. And so to silence the warning here and only
here, we make use of #pragma to push/pop turning off the warning.

Signed-off-by: Tom Rini <trini at konsulko.com>
---
Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>
---
 include/efi_api.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/efi_api.h b/include/efi_api.h
index dc6e5ce236c9..f3bcbf593bea 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -1168,9 +1168,21 @@ struct efi_key_descriptor {
 	u16 affected_attribute;
 } __packed;
 
+/* The warniing:
+ * field guid within 'struct efi_hii_keyboard_layout' is less aligned than 'efi_guid_t' and is usually due to 'struct efi_hii_keyboard_layout' being packed, which can lead to unaligned accesses [-Wunaligned-access]
+ * is intentional due to EFI requiring unaligned access to be supported.
+ */
 struct efi_hii_keyboard_layout {
 	u16 layout_length;
+#ifdef CONFIG_CC_IS_CLANG
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunaligned-access"
+#endif
 	efi_guid_t guid;
+#ifdef CONFIG_CC_IS_CLANG
+#pragma clang diagnostic pop
+#endif
+
 	u32 layout_descriptor_string_offset;
 	u8 descriptor_count;
 	struct efi_key_descriptor descriptors[];
-- 
2.34.1



More information about the U-Boot mailing list