X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fgenmdesc.c;h=0cd3f3b5c815699c87ccd4a2beb6e9e55f633102;hb=214a610172fafd91135575a1ebaec3322295da4a;hp=02e07bde6d5faffe88bb506b14c9dfdb185b31be;hpb=5cddeea03868b5710598fe925f5cafa6029f0467;p=mono.git diff --git a/mono/mini/genmdesc.c b/mono/mini/genmdesc.c index 02e07bde6d5..0cd3f3b5c81 100644 --- a/mono/mini/genmdesc.c +++ b/mono/mini/genmdesc.c @@ -11,6 +11,11 @@ #include #include +#if defined(__native_client__) || defined(__native_client_codegen__) +volatile int __nacl_thread_suspension_needed = 0; +void __nacl_suspend_thread_if_needed() {} +#endif + #define MINI_OP(a,b,dest,src1,src2) b, #define MINI_OP3(a,b,dest,src1,src2,src3) b, /* keep in sync with the enum in mini.h */ @@ -43,7 +48,7 @@ typedef struct { char spec [MONO_INST_MAX]; } OpDesc; -static int nacl; +static int nacl = 0; static GHashTable *table; static GHashTable *template_table; @@ -75,6 +80,8 @@ load_file (const char *name) { line = 0; while ((str = fgets (buf, sizeof (buf), f))) { gboolean is_template = FALSE; + gboolean nacl_length_set = FALSE; + ++line; eat_whitespace (str); if (!str [0]) @@ -132,14 +139,24 @@ load_file (const char *name) { p += 7; */ } else if (strncmp (p, "len:", 4) == 0) { + unsigned long size; + char* endptr; p += 4; - desc->spec [MONO_INST_LEN] += strtoul (p, &p, 10); - } else if (strncmp (p, "nacl:", 5) == 0){ + size = strtoul (p, &endptr, 10); + if (size == 0 && p == endptr) + g_error ("Invalid length '%s' at line %d in %s\n", p, line, name); + p = endptr; + if (!nacl_length_set) { + desc->spec [MONO_INST_LEN] = size; + } + } else if (strncmp (p, "nacl:", 5) == 0) { unsigned long size; p += 5; size = strtoul (p, &p, 10); - if (nacl) - desc->spec [MONO_INST_LEN] += size; + if (nacl) { + desc->spec [MONO_INST_LEN] = size; + nacl_length_set = TRUE; + } } else if (strncmp (p, "template:", 9) == 0) { char *tname; int i; @@ -206,7 +223,7 @@ output_char (FILE *f, char c) { if (isalnum (c)) fprintf (f, "%c", c); else - fprintf (f, "\\x%x\" \"", c); + fprintf (f, "\\x%x\" \"", (guint8)c); } static void @@ -221,13 +238,13 @@ build_table (const char *fname, const char *name) { if (!(f = fopen (fname, "w"))) g_error ("Cannot open file '%s'", fname); fprintf (f, "/* File automatically generated by genmdesc, don't change */\n\n"); - fprintf (f, "const char %s [] = {\n", name); + fprintf (f, "const char mono_%s [] = {\n", name); fprintf (f, "\t\""); for (j = 0; j < MONO_INST_MAX; ++j) fprintf (f, "\\x0"); fprintf (f, "\"\t/* null entry */\n"); idx = 1; - g_string_append_printf (idx_array, "const guint16 %s_idx [] = {\n", name); + g_string_append_printf (idx_array, "const guint16 mono_%s_idx [] = {\n", name); for (i = OP_LOAD; i < OP_LAST; ++i) { desc = opcodes + i; @@ -298,7 +315,7 @@ main (int argc, char* argv []) return 1; } else { int i = 3; - if (strcmp (argv [1], "--nacl") == 0){ + if (strcmp (argv [1], "--nacl") == 0) { nacl = 1; i++; }