Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2008-09-02 15:50:22 +0400
committerRodrigo Kumpera <kumpera@gmail.com>2008-09-02 15:50:22 +0400
commit28021d9e5cc4e8837fb8e060e222e93ed5b6963e (patch)
treedfc7650d0ff3affc7399606a5f64e308ea5ff830
parentd04c85fc8e05b7dcb3e3d5586030505928f17104 (diff)
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/ChangeLog6
-rw-r--r--mono/mini/mini.c21
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;
}