Provide struct packing macros on GCC/clang out of the box

This commit is contained in:
Dirk Ziegelmeier 2016-12-29 09:28:28 +01:00
parent c1258e5c72
commit 3a8368ef04

View File

@ -209,54 +209,58 @@ extern "C" {
#endif #endif
/** Packed structs support. /** Packed structs support.
* Placed BEFORE declaration of a packed struct. \n * Placed BEFORE declaration of a packed struct.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: Nothing to do. * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_BEGIN #ifndef PACK_STRUCT_BEGIN
#define PACK_STRUCT_BEGIN #define PACK_STRUCT_BEGIN
#endif /* PACK_STRUCT_BEGIN */ #endif /* PACK_STRUCT_BEGIN */
/** Packed structs support. /** Packed structs support.
* Placed AFTER declaration of a packed struct. \n * Placed AFTER declaration of a packed struct.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: Nothing to do. * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_END #ifndef PACK_STRUCT_END
#define PACK_STRUCT_END #define PACK_STRUCT_END
#endif /* PACK_STRUCT_END */ #endif /* PACK_STRUCT_END */
/** Packed structs support. /** Packed structs support.
* Placed between end of declaration of a packed struct and trailing semicolon. \n * Placed between end of declaration of a packed struct and trailing semicolon.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: \#define PACK_STRUCT_STRUCT \_\_attribute\_\_((packed)) * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_STRUCT #ifndef PACK_STRUCT_STRUCT
#if defined(__GNUC__) || defined(__clang__)
#define PACK_STRUCT_STRUCT __attribute__((packed))
#else
#define PACK_STRUCT_STRUCT #define PACK_STRUCT_STRUCT
#endif
#endif /* PACK_STRUCT_STRUCT */ #endif /* PACK_STRUCT_STRUCT */
/** Packed structs support. /** Packed structs support.
* Wraps u32_t and u16_t members. \n * Wraps u32_t and u16_t members.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: Nothing to do. * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_FIELD #ifndef PACK_STRUCT_FIELD
#define PACK_STRUCT_FIELD(x) x #define PACK_STRUCT_FIELD(x) x
#endif /* PACK_STRUCT_FIELD */ #endif /* PACK_STRUCT_FIELD */
/** Packed structs support. /** Packed structs support.
* Wraps u8_t members, where some compilers warn that packing is not necessary. \n * Wraps u8_t members, where some compilers warn that packing is not necessary.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: Nothing to do. * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_FLD_8 #ifndef PACK_STRUCT_FLD_8
#define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x) #define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x)
#endif /* PACK_STRUCT_FLD_8 */ #endif /* PACK_STRUCT_FLD_8 */
/** Packed structs support. /** Packed structs support.
* Wraps members that are packed structs themselves, where some compilers warn that packing is not necessary. \n * Wraps members that are packed structs themselves, where some compilers warn that packing is not necessary.\n
* For examples of packed struct declarations, see include/lwip/prot/ subfolder. \n * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n
* Porting to GCC/clang: Nothing to do. * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here.
*/ */
#ifndef PACK_STRUCT_FLD_S #ifndef PACK_STRUCT_FLD_S
#define PACK_STRUCT_FLD_S(x) PACK_STRUCT_FIELD(x) #define PACK_STRUCT_FLD_S(x) PACK_STRUCT_FIELD(x)