X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fabi-details.h;h=cb0fb34bf953e559f4d66acea259b39b407cfc1a;hb=20a111a215c2ad93ab77068d2e81e21c886b9846;hp=01c741b35d7f3c8faba8931db0ed4d2995a90c86;hpb=8da27c63c37365e4467b2e780e3febcf59c8e0c7;p=mono.git diff --git a/mono/metadata/abi-details.h b/mono/metadata/abi-details.h index 01c741b35d7..cb0fb34bf95 100644 --- a/mono/metadata/abi-details.h +++ b/mono/metadata/abi-details.h @@ -8,8 +8,10 @@ #include #define MONO_ABI_ALIGNOF(type) MONO_ALIGN_ ## type -#define MONO_CURRENT_ABI_ALIGNOF(type) ((int)G_STRUCT_OFFSET(struct { char c; type x; }, x)) - +#define MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(type) typedef struct { char c; type x; } Mono_Align_Struct_ ##type; +#define MONO_CURRENT_ABI_ALIGNOF(type) ((int)G_STRUCT_OFFSET(Mono_Align_Struct_ ##type, x)) +#define MONO_ABI_SIZEOF(type) MONO_SIZEOF_ ## type +#define MONO_CURRENT_ABI_SIZEOF(type) ((int)sizeof(type)) #undef DECL_OFFSET #undef DECL_OFFSET2 @@ -17,6 +19,17 @@ #define DECL_OFFSET2(struct,field,offset) MONO_OFFSET_ ## struct ## _ ## field = offset, #define DECL_ALIGN(type) MONO_ALIGN_ ##type = MONO_CURRENT_ABI_ALIGNOF (type), #define DECL_ALIGN2(type,size) MONO_ALIGN_ ##type = size, +#define DECL_SIZE(type) MONO_SIZEOF_ ##type = MONO_CURRENT_ABI_SIZEOF (type), +#define DECL_SIZE2(type,size) MONO_SIZEOF_ ##type = size, + +/* Needed by MONO_CURRENT_ABI_ALIGNOF */ +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint8) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint16) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint32) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint64) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(float) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(double) +MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gpointer) enum { #include "object-offsets.h" @@ -25,7 +38,11 @@ enum { #ifdef USED_CROSS_COMPILER_OFFSETS #define MONO_STRUCT_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field #else +#if defined(HAS_CROSS_COMPILER_OFFSETS) || defined(MONO_CROSS_COMPILE) #define MONO_STRUCT_OFFSET(struct,field) (MONO_OFFSET_ ## struct ## _ ## field == -1, G_STRUCT_OFFSET (struct,field)) +#else +#define MONO_STRUCT_OFFSET(struct,field) G_STRUCT_OFFSET (struct,field) +#endif #endif #endif