[2020-02] Fix leak in assembly-specific dllmap lookups (#21053)
[mono-project.git] / mono / metadata / abi-details.h
blob37566f43301e626a56a8247c3d21c301b3014f96
1 /**
2 * \file
3 * Copyright 2014 Xamarin Inc
4 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
5 */
6 #ifndef __MONO_METADATA_ABI_DETAILS_H__
7 #define __MONO_METADATA_ABI_DETAILS_H__
9 #include <config.h>
10 #include <glib.h>
13 * This file defines macros to compute sizes/alignments/field offsets which depend on
14 * the ABI. It is needed during cross compiling since the generated code needs to
15 * contain offsets which correspond to the ABI of the target, not the host.
16 * It defines the following macros:
17 * - MONO_ABI_SIZEOF(type) for every basic type
18 * - MONO_ABI_ALIGNOF(type) for every basic type
19 * - MONO_STRUCT_OFFSET(struct, field) for various runtime structures
20 * When not cross compiling, these correspond to the host ABI (i.e. sizeof/offsetof).
21 * When cross compiling, these are defined in a generated header file which is
22 * generated by the offsets tool in tools/offsets-tool. The name of the file
23 * is given by the --with-cross-offsets= configure argument.
26 typedef enum {
27 MONO_ALIGN_gint8,
28 MONO_ALIGN_gint16,
29 MONO_ALIGN_gint32,
30 MONO_ALIGN_gint64,
31 MONO_ALIGN_float,
32 MONO_ALIGN_double,
33 MONO_ALIGN_gpointer,
34 MONO_ALIGN_COUNT
35 } CoreTypeAlign;
37 int mono_abi_alignment (CoreTypeAlign type);
39 #define MONO_ABI_ALIGNOF(type) mono_abi_alignment (MONO_ALIGN_ ## type)
40 #define MONO_ABI_SIZEOF(type) (MONO_STRUCT_SIZE (type))
41 #define MONO_CURRENT_ABI_SIZEOF(type) ((int)sizeof(type))
43 #undef DECL_OFFSET2
44 #define DECL_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field = -1,
45 #define DECL_OFFSET2(struct,field,offset) MONO_OFFSET_ ## struct ## _ ## field = offset,
46 #define DECL_ALIGN2(type,size)
47 #define DECL_SIZE(type) MONO_SIZEOF_ ##type = -1,
48 #define DECL_SIZE2(type,size) MONO_SIZEOF_ ##type = size,
51 enum {
52 #include "object-offsets.h"
55 #ifdef USED_CROSS_COMPILER_OFFSETS
56 #define MONO_STRUCT_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field
57 #define MONO_STRUCT_SIZE(struct) MONO_SIZEOF_ ## struct
58 #else
59 #if defined(HAS_CROSS_COMPILER_OFFSETS) || defined(MONO_CROSS_COMPILE)
60 #define MONO_STRUCT_OFFSET(struct,field) (MONO_OFFSET_ ## struct ## _ ## field == -1, G_STRUCT_OFFSET (struct,field))
61 #define MONO_STRUCT_SIZE(struct) (MONO_SIZEOF_ ## struct == -1, (int)sizeof(struct))
62 #else
63 #define MONO_STRUCT_OFFSET(struct,field) G_STRUCT_OFFSET (struct,field)
64 #define MONO_STRUCT_SIZE(struct) ((int)sizeof(struct))
65 #endif
66 #endif
68 // #define MONO_SIZEOF_MonoObject (2 * MONO_ABI_SIZEOF(gpointer))
69 #define MONO_SIZEOF_MonoObject (2 * MONO_SIZEOF_gpointer)
70 #endif