Merge pull request #2894 from marek-safar/mono.security
[mono.git] / mono / metadata / abi-details.h
1 /*
2  * Copyright 2014 Xamarin Inc
3  * Licensed under the MIT license. See LICENSE file in the project root for full license information.
4  */
5 #ifndef __MONO_METADATA_ABI_DETAILS_H__
6 #define __MONO_METADATA_ABI_DETAILS_H__
7
8 #include <config.h>
9 #include <glib.h>
10
11 #define MONO_ABI_ALIGNOF(type) MONO_ALIGN_ ## type
12 #define MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(type) typedef struct { char c; type x; } Mono_Align_Struct_ ##type;
13 #define MONO_CURRENT_ABI_ALIGNOF(type) ((int)G_STRUCT_OFFSET(Mono_Align_Struct_ ##type, x))
14 #define MONO_ABI_SIZEOF(type) MONO_SIZEOF_ ## type
15 #define MONO_CURRENT_ABI_SIZEOF(type) ((int)sizeof(type))
16
17 #undef DECL_OFFSET
18 #undef DECL_OFFSET2
19 #define DECL_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field = -1,
20 #define DECL_OFFSET2(struct,field,offset) MONO_OFFSET_ ## struct ## _ ## field = offset,
21 #define DECL_ALIGN(type) MONO_ALIGN_ ##type = MONO_CURRENT_ABI_ALIGNOF (type),
22 #define DECL_ALIGN2(type,size) MONO_ALIGN_ ##type = size,
23 #define DECL_SIZE(type) MONO_SIZEOF_ ##type = MONO_CURRENT_ABI_SIZEOF (type),
24 #define DECL_SIZE2(type,size) MONO_SIZEOF_ ##type = size,
25
26 /* Needed by MONO_CURRENT_ABI_ALIGNOF */
27 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint8)
28 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint16)
29 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint32)
30 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gint64)
31 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(float)
32 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(double)
33 MONO_CURRENT_ABI_ALIGNOF_TYPEDEF(gpointer)
34
35 enum {
36 #include "object-offsets.h"
37 };
38
39 #ifdef USED_CROSS_COMPILER_OFFSETS
40 #define MONO_STRUCT_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field
41 #else
42 #if defined(HAS_CROSS_COMPILER_OFFSETS) || defined(MONO_CROSS_COMPILE)
43 #define MONO_STRUCT_OFFSET(struct,field) (MONO_OFFSET_ ## struct ## _ ## field == -1, G_STRUCT_OFFSET (struct,field))
44 #else
45 #define MONO_STRUCT_OFFSET(struct,field) G_STRUCT_OFFSET (struct,field)
46 #endif
47 #endif
48
49 #endif