From: Ben Pfaff Date: Tue, 11 Mar 2014 06:49:29 +0000 (-0700) Subject: compiler: New macro for defining aligned structs. X-Git-Tag: sliver-openvswitch-2.2.90-1~6^2~119 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=0bdc6b84f2d31f050e1f6d6b8f9f95687f14f877;p=sliver-openvswitch.git compiler: New macro for defining aligned structs. This is broken out into a separate commit because it adds new MSVC specific code and I don't have MSVC around to test whether it's correct. CC: Gurucharan Shetty Signed-off-by: Ben Pfaff --- diff --git a/lib/compiler.h b/lib/compiler.h index e867d72f2..3b59813c9 100644 --- a/lib/compiler.h +++ b/lib/compiler.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -179,6 +179,20 @@ #define OVS_PACKED(DECL) __pragma(pack(push, 1)) DECL __pragma(pack(pop)) #endif +/* For defining a structure whose instances should aligned on an N-byte + * boundary. + * + * e.g. The following: + * OVS_ALIGNED_STRUCT(64, mystruct) { ... }; + * is equivalent to the following except that it specifies 64-byte alignment: + * struct mystruct { ... }; + */ +#ifndef _MSC_VER +#define OVS_ALIGNED_STRUCT(N, TAG) struct __attribute__((aligned(N))) TAG +#else +#define OVS_ALIGNED_STRUCT(N, TAG) __declspec(align(N)) struct TAG +#endif + #ifdef _MSC_VER #define CCALL __cdecl #pragma section(".CRT$XCU",read)