From 72f0bc05dc1cc7a3979a16f3b34a99cb17b1077f Mon Sep 17 00:00:00 2001 From: Lars-Ove Karlsson Date: Mon, 13 Jan 2025 13:03:40 +0100 Subject: [PATCH] Fixing some IAR alignment issues when keyword __packed has been redefined into a macro. When accepted, a backport to the version Zephyr uses will be made. Signed-off-by: Lars-Ove Karlsson --- core/alignment.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/core/alignment.h b/core/alignment.h index a17001dd91..33b865a119 100644 --- a/core/alignment.h +++ b/core/alignment.h @@ -48,10 +48,27 @@ * This results in a single load / store instruction (if unaligned access is supported). * According to that document, this is only supported on certain architectures. */ - #define UINT_UNALIGNED +#define UINT_UNALIGNED + +/* Some products, like Zephyr, defines __packed as a macro for attribute(packed) and + * that does not work with typedefs, so if __packed is defined, undef it for the + * typedefs and restore it afterwards. + */ +#ifdef __packed +#pragma push_macro("__packed") +#undef __packed +#define MBEDTLS_IAR_PACKED_MACRO_USED +#endif + typedef uint16_t __packed mbedtls_uint16_unaligned_t; typedef uint32_t __packed mbedtls_uint32_unaligned_t; typedef uint64_t __packed mbedtls_uint64_unaligned_t; + +#ifdef MBEDTLS_IAR_PACKED_MACRO_USED +#undef MBEDTLS_IAR_PACKED_MACRO_USED +#pragma pop_macro("__packed") +#endif + #elif defined(MBEDTLS_COMPILER_IS_GCC) && (MBEDTLS_GCC_VERSION >= 40504) && \ ((MBEDTLS_GCC_VERSION < 60300) || (!defined(MBEDTLS_EFFICIENT_UNALIGNED_ACCESS))) /*