diff options
author | Rodrigo Kumpera <kumpera@gmail.com> | 2008-09-02 15:50:22 +0400 |
---|---|---|
committer | Rodrigo Kumpera <kumpera@gmail.com> | 2008-09-02 15:50:22 +0400 |
commit | 28021d9e5cc4e8837fb8e060e222e93ed5b6963e (patch) | |
tree | dfc7650d0ff3affc7399606a5f64e308ea5ff830 | |
parent | d04c85fc8e05b7dcb3e3d5586030505928f17104 (diff) |
In .:mono-2-0-rc1
2008-09-02 Rodrigo Kumpera <rkumpera@novell.com>
* 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
-rw-r--r-- | mono/mini/ChangeLog | 6 | ||||
-rw-r--r-- | mono/mini/mini.c | 21 |
2 files changed, 19 insertions, 8 deletions
diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 80fd58a29e8..631446d8dfc 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,3 +1,9 @@ +2008-09-02 Rodrigo Kumpera <rkumpera@novell.com> + + * method-to-ir.c (initialize_array_data): Handle field with RVA from + dynamic images. + (Ported from trunk) + 2008-08-29 Geoff Norton <gnorton@novell.com> * 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 a1c19888992..4066518d8c0 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; } |