From 28021d9e5cc4e8837fb8e060e222e93ed5b6963e Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Tue, 2 Sep 2008 11:50:22 +0000 Subject: [PATCH] In .: 2008-09-02 Rodrigo Kumpera * method-to-ir.c (initialize_array_data): Handle field with RVA from dynamic images. (Ported from trunk) svn path=/branches/mono-2-0/mono/; revision=112078 --- mono/mini/ChangeLog | 6 ++++++ mono/mini/mini.c | 21 +++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 80fd58a29e8ae..631446d8dfc36 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,3 +1,9 @@ +2008-09-02 Rodrigo Kumpera + + * method-to-ir.c (initialize_array_data): Handle field with RVA from + dynamic images. + (Ported from trunk) + 2008-08-29 Geoff Norton * aot-compiler.c: The Mach/ARM compiler doesn't understand the bss diff --git a/mono/mini/mini.c b/mono/mini/mini.c index a1c19888992dd..4066518d8c0c7 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -4427,14 +4427,19 @@ initialize_array_data (MonoMethod *method, gboolean aot, unsigned char *ip, Mono return NULL; *out_size = size; /*g_print ("optimized in %s: size: %d, numelems: %d\n", method->name, size, newarr->inst_newa_len->inst_c0);*/ - field_index = read32 (ip + 2) & 0xffffff; - mono_metadata_field_info (method->klass->image, field_index - 1, NULL, &rva, NULL); - data_ptr = mono_image_rva_map (method->klass->image, rva); - /*g_print ("field: 0x%08x, rva: %d, rva_ptr: %p\n", read32 (ip + 2), rva, data_ptr);*/ - /* for aot code we do the lookup on load */ - if (aot && data_ptr) - return GUINT_TO_POINTER (rva); - return data_ptr; + if (!method->klass->image->dynamic) { + field_index = read32 (ip + 2) & 0xffffff; + mono_metadata_field_info (method->klass->image, field_index - 1, NULL, &rva, NULL); + data_ptr = mono_image_rva_map (method->klass->image, rva); + /*g_print ("field: 0x%08x, rva: %d, rva_ptr: %p\n", read32 (ip + 2), rva, data_ptr);*/ + /* for aot code we do the lookup on load */ + if (aot && data_ptr) + return GUINT_TO_POINTER (rva); + } else { + /*FIXME is it possible to AOT a SRE assembly not meant to be saved? */ + g_assert (!aot); + data_ptr = field->data; + } return data_ptr; } return NULL; }