X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-cross-helpers.c;h=e4cb111cc38994bdd1b10b5b9b7a1ac7bb93bb4c;hb=1cfd52452a4af3fd6eee32f45a8067926af8479e;hp=dede99f3ee9abba38dbfc55a6fdfafdd2e823ee9;hpb=cdd3d2b7c737aec0b69fac045a01b44884a1d21d;p=mono.git diff --git a/mono/mini/mini-cross-helpers.c b/mono/mini/mini-cross-helpers.c index dede99f3ee9..e4cb111cc38 100644 --- a/mono/mini/mini-cross-helpers.c +++ b/mono/mini/mini-cross-helpers.c @@ -1,13 +1,107 @@ +/** + * \file + */ + +#include "config.h" + +#include + #include "config.h" -#ifdef ENABLE_EXTENSION_MODULE -#include "../../../mono-extensions/mono/mini/mini-cross-helpers.c" +#include "mini.h" +#ifdef ENABLE_INTERPRETER +#include "interp/interp.h" +#endif +#include "tasklets.h" +#include + +void +mono_dump_metadata_offsets (void); + +void +mono_metadata_cross_helpers_run (void); + + +static void +mono_dump_jit_offsets (void) +{ +#ifdef USED_CROSS_COMPILER_OFFSETS + g_print ("#error not using native offsets\n"); #else + mono_dump_metadata_offsets (); -void mono_cross_helpers_run (void); + g_print ("#ifndef DISABLE_JIT_OFFSETS\n"); + g_print ("#define USED_CROSS_COMPILER_OFFSETS\n"); +#define DISABLE_METADATA_OFFSETS +#define DECL_OFFSET2(struct,field,offset) this_should_not_happen +#define DECL_ALIGN2(type,size) this_should_not_happen +#define DECL_OFFSET(struct,field) g_print ("DECL_OFFSET2(%s,%s,%d)\n", #struct, #field, (int)MONO_STRUCT_OFFSET (struct, field)); +#define DECL_ALIGN(type) +#define DECL_SIZE2(type,size) this_should_not_happen +#define DECL_SIZE(type) +#include + + g_print ("#endif //disable jit check\n"); + g_print ("#endif //cross compiler checks\n"); + g_print ("#endif //gc check\n"); + g_print ("#endif //os check\n"); + g_print ("#endif //arch check\n"); + g_print ("#endif //USED_CROSS_COMPILER_OFFSETS check\n"); +#endif +} + +/* + * mono_cross_helpers_run: + * + * Check that the offsets given by object-offsets.h match the offsets + * on the host. + */ void mono_cross_helpers_run (void) { -} +#if defined (HAS_CROSS_COMPILER_OFFSETS) && !defined (MONO_CROSS_COMPILE) + gboolean is_broken = FALSE; +#endif + +#ifndef USED_CROSS_COMPILER_OFFSETS + if (g_hasenv ("DUMP_CROSS_OFFSETS")) + mono_dump_jit_offsets (); +#endif + +#if defined (HAS_CROSS_COMPILER_OFFSETS) && !defined (MONO_CROSS_COMPILE) + mono_metadata_cross_helpers_run (); + + /* The metadata offsets are already checked above */ +#define DISABLE_METADATA_OFFSETS +#define USE_CROSS_COMPILE_OFFSETS +#define DECL_OFFSET(struct,field) this_should_not_happen_for_cross_fields +#define DECL_OFFSET2(struct,field,offset) \ + if ((int)G_STRUCT_OFFSET (struct, field) != offset) { \ + g_print (#struct ":" #field " invalid struct offset %d (expected %d)\n", \ + offset, \ + (int)G_STRUCT_OFFSET (struct, field)); \ + is_broken = TRUE; \ + } +#define DECL_ALIGN(name,type) this_should_not_happen_for_cross_align +#define DECL_ALIGN2(name,size) \ + if (MONO_ALIGN_ ## name != size) { \ + g_print (#name ": invalid alignment %d (expected %d)\n", \ + size, \ + MONO_ALIGN_ ## name); \ + is_broken = TRUE; \ + } +#define DECL_SIZE(type) this_should_not_happen_for_cross_size +#define DECL_SIZE2(name,size) \ + if (MONO_SIZEOF_ ## name != size) { \ + g_print (#name ": invalid size %d (expected %d)\n", \ + size, \ + MONO_SIZEOF_ ## name); \ + is_broken = TRUE; \ + } + +#include + + g_assert (!is_broken); #endif +}