diff options
author | Maria Matejka <mq@ucw.cz> | 2022-05-30 16:48:17 +0200 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2022-05-30 16:48:17 +0200 |
commit | b7e2edd4419fecb09b8690f8731e172f0c24789c (patch) | |
tree | 41c80ab4b0d524ff34e207bf15e8d79191276a2c /lib/birdlib.h | |
parent | d7bec897ab772cdccce10b296d4efd48d9181297 (diff) | |
parent | 1d309c4ce6e95b68c64a8f007f6dd2f1830a5707 (diff) |
Merge commit '1d309c4ce6e95b68c64a8f007f6dd2f1830a5707' into haugesund
Diffstat (limited to 'lib/birdlib.h')
-rw-r--r-- | lib/birdlib.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/birdlib.h b/lib/birdlib.h index 6f0bab96..9b6e4a16 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -9,18 +9,30 @@ #ifndef _BIRD_BIRDLIB_H_ #define _BIRD_BIRDLIB_H_ +#include "sysdep/config.h" #include "lib/alloca.h" /* Ugly structure offset handling macros */ -struct align_probe { char x; long int y; }; - #define OFFSETOF(s, i) ((size_t) &((s *)0)->i) #define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i))) #define BIRD_ALIGN(s, a) (((s)+a-1)&~(a-1)) -#define CPU_STRUCT_ALIGN (sizeof(struct align_probe)) +#define CPU_STRUCT_ALIGN (MAX_(_Alignof(void*), _Alignof(u64))) #define BIRD_CPU_ALIGN(s) BIRD_ALIGN((s), CPU_STRUCT_ALIGN) +/* Structure item alignment macros */ + +#define PADDING_NAME(id) _padding_##id +#define PADDING_(id, sz) u8 PADDING_NAME(id)[sz] + +#if CPU_POINTER_ALIGNMENT == 4 +#define PADDING(id, n32, n64) PADDING_(id, n32) +#elif CPU_POINTER_ALIGNMENT == 8 +#define PADDING(id, n32, n64) PADDING_(id, n64) +#else +#error "Strange CPU pointer alignment: " CPU_POINTER_ALIGNMENT +#endif + /* Utility macros */ #define MIN_(a,b) (((a)<(b))?(a):(b)) |