[interp] Fix interp logging (#17636)
[mono-project.git] / mono / mini / mini-cross-helpers.c
blob898e4b7dcbd7d306948b2dcbc6897c0c9d08e837
1 /**
2 * \file
3 */
5 #include "config.h"
7 #include <stdio.h>
9 #include "config.h"
11 #include "mini.h"
12 #include "mini-runtime.h"
13 #include "interp/interp.h"
14 #include "tasklets.h"
15 #include <mono/metadata/abi-details.h>
17 void
18 mono_dump_metadata_offsets (void);
20 void
21 mono_metadata_cross_helpers_run (void);
24 static void
25 mono_dump_jit_offsets (void)
27 #ifdef USED_CROSS_COMPILER_OFFSETS
28 g_print ("#error not using native offsets\n");
29 #else
30 mono_dump_metadata_offsets ();
32 g_print ("#ifndef DISABLE_JIT_OFFSETS\n");
33 g_print ("#define USED_CROSS_COMPILER_OFFSETS\n");
34 #define DISABLE_METADATA_OFFSETS
35 #define DECL_OFFSET2(struct,field,offset) this_should_not_happen
36 #define DECL_ALIGN2(type,size) this_should_not_happen
38 #define DECL_OFFSET(struct,field) g_print ("DECL_OFFSET2(%s,%s,%d)\n", #struct, #field, (int)MONO_STRUCT_OFFSET (struct, field));
39 #define DECL_ALIGN(type)
40 #define DECL_SIZE2(type,size) this_should_not_happen
41 #define DECL_SIZE(type)
42 #include <mono/metadata/object-offsets.h>
44 g_print ("#endif //disable jit check\n");
45 g_print ("#endif //cross compiler checks\n");
46 g_print ("#endif //gc check\n");
47 g_print ("#endif //os check\n");
48 g_print ("#endif //arch check\n");
49 g_print ("#endif //USED_CROSS_COMPILER_OFFSETS check\n");
50 #endif
54 * mono_cross_helpers_run:
56 * Check that the offsets given by object-offsets.h match the offsets
57 * on the host.
59 void
60 mono_cross_helpers_run (void)
62 #if defined (HAS_CROSS_COMPILER_OFFSETS) && !defined (MONO_CROSS_COMPILE)
63 gboolean is_broken = FALSE;
64 #endif
66 #ifndef USED_CROSS_COMPILER_OFFSETS
67 if (g_hasenv ("DUMP_CROSS_OFFSETS"))
68 mono_dump_jit_offsets ();
69 #endif
71 #if defined (HAS_CROSS_COMPILER_OFFSETS) && !defined (MONO_CROSS_COMPILE)
72 mono_metadata_cross_helpers_run ();
74 /* The metadata offsets are already checked above */
75 #define DISABLE_METADATA_OFFSETS
76 #define USE_CROSS_COMPILE_OFFSETS
77 #define DECL_OFFSET(struct,field) this_should_not_happen_for_cross_fields
78 #define DECL_OFFSET2(struct,field,offset) \
79 if ((int)G_STRUCT_OFFSET (struct, field) != offset) { \
80 g_print (#struct ":" #field " invalid struct offset %d (expected %d)\n", \
81 offset, \
82 (int)G_STRUCT_OFFSET (struct, field)); \
83 is_broken = TRUE; \
85 #define DECL_ALIGN(name,type) this_should_not_happen_for_cross_align
86 #define DECL_ALIGN2(name,size) \
87 if (MONO_ALIGN_ ## name != size) { \
88 g_print (#name ": invalid alignment %d (expected %d)\n", \
89 size, \
90 MONO_ALIGN_ ## name); \
91 is_broken = TRUE; \
93 #define DECL_SIZE(type) this_should_not_happen_for_cross_size
94 #define DECL_SIZE2(name,size) \
95 if (MONO_SIZEOF_ ## name != size) { \
96 g_print (#name ": invalid size %d (expected %d)\n", \
97 size, \
98 MONO_SIZEOF_ ## name); \
99 is_broken = TRUE; \
102 #include <mono/metadata/object-offsets.h>
104 g_assert (!is_broken);
105 #endif