MSVC struct packing is not compatible with GCC. Add macro __rte_packed_begin which can be used to push existing pack value and set packing to 1-byte. Add macro __rte_packed_end to restore the pack value prior to the push.
Macro __rte_packed_end is deliberately utilized to trigger a MSVC compiler warning if no existing packing has been pushed allowing easy identification of locations where the __rte_packed_begin is missing. Macro __rte_packed will be removed in a subsequent patch. Signed-off-by: Andre Muezerie <andre...@linux.microsoft.com> --- lib/eal/include/rte_common.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h index 4d299f2b36..affdcaf3c1 100644 --- a/lib/eal/include/rte_common.h +++ b/lib/eal/include/rte_common.h @@ -108,6 +108,17 @@ typedef uint16_t unaligned_uint16_t; #define __rte_packed __attribute__((__packed__)) #endif +/** + * Force a structure to be packed + */ +#ifdef RTE_TOOLCHAIN_MSVC +#define __rte_packed_begin __pragma(pack(push, 1)) +#define __rte_packed_end __pragma(pack(pop)) +#else +#define __rte_packed_begin +#define __rte_packed_end __attribute__((__packed__)) +#endif + /** * Macro to mark a type that is not subject to type-based aliasing rules */ -- 2.34.1