Tue Mar 18 11:50:14 CET 2008 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Tue, 18 Mar 2008 10:02:26 +0000 (10:02 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Tue, 18 Mar 2008 10:02:26 +0000 (10:02 -0000)
* mini.h, mini-trampolines.c, tramp-*.c: change the signature of
mono_arch_patch_callsite() to include the start of the managed method
to be able to perform bound checks.

svn path=/trunk/mono/; revision=98524

13 files changed:
mono/mini/ChangeLog
mono/mini/mini-trampolines.c
mono/mini/mini.h
mono/mini/tramp-alpha.c
mono/mini/tramp-amd64.c
mono/mini/tramp-arm.c
mono/mini/tramp-hppa.c
mono/mini/tramp-ia64.c
mono/mini/tramp-ppc.c
mono/mini/tramp-s390.c
mono/mini/tramp-s390x.c
mono/mini/tramp-sparc.c
mono/mini/tramp-x86.c

index 2bf9f742f76c2aeaa8e4c38ff036c16e88b38454..7fec1d45d962d93e8a6efea00580f6c00f5f34fa 100644 (file)
@@ -1,3 +1,10 @@
+
+Tue Mar 18 11:50:14 CET 2008 Paolo Molaro <lupus@ximian.com>
+
+       * mini.h, mini-trampolines.c, tramp-*.c: change the signature of
+       mono_arch_patch_callsite() to include the start of the managed method
+       to be able to perform bound checks.
+
 2008-03-17  Mark Probst  <mark.probst@gmail.com>
 
        * mini.c: Generic sharing for the isinst instruction.
index ffba86986da4cd27398234c9e326eef8ba8bdb59..948615123ea4012d95bde8717aad9926e12b60dc 100644 (file)
@@ -251,7 +251,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                                mono_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (addr));
 
                        if (mono_method_same_domain (ji, target_ji))
-                               mono_arch_patch_callsite (code, addr);
+                               mono_arch_patch_callsite (ji->code_start, code, addr);
                }
        }
 
index 0e16b5fda61a9041de51cf36ba84b0308811c398..9e66314fc26099a8f8aa906df98e4e1e9227d354 100644 (file)
@@ -1254,7 +1254,7 @@ void     mono_arch_create_vars                  (MonoCompile *cfg) MONO_INTERNAL
 void     mono_arch_save_unwind_info             (MonoCompile *cfg) MONO_INTERNAL;
 void     mono_arch_register_lowlevel_calls      (void) MONO_INTERNAL;
 gpointer mono_arch_get_unbox_trampoline         (MonoMethod *m, gpointer addr) MONO_INTERNAL;
-void     mono_arch_patch_callsite               (guint8 *code, guint8 *addr) MONO_INTERNAL;
+void     mono_arch_patch_callsite               (guint8 *method_start, guint8 *code, guint8 *addr) MONO_INTERNAL;
 void     mono_arch_patch_plt_entry              (guint8 *code, guint8 *addr) MONO_INTERNAL;
 void     mono_arch_nullify_class_init_trampoline(guint8 *code, gssize *regs) MONO_INTERNAL;
 void     mono_arch_nullify_plt_entry            (guint8 *code) MONO_INTERNAL;
index d15ef59812ad7a7b1bcd12e6df13cf078995bca3..0bdc22035cd891b66b2da37239052887fb7f0708 100644 (file)
@@ -523,7 +523,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code, gssize *regs)
 }
 
 void
-mono_arch_patch_callsite (guint8 *code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *code, guint8 *addr)
 {
   unsigned long *p = (unsigned int *)(code-12);
   
index 86368a4b4ee1c0c75f013b852c4a318847cf19ca..fcd74abb5801e09444082e5097ccf122a51d208b 100644 (file)
@@ -69,7 +69,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
  * points to the pc right after the call.
  */
 void
-mono_arch_patch_callsite (guint8 *orig_code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *orig_code, guint8 *addr)
 {
        guint8 *code;
        guint8 buf [16];
index b40b87fa64987a3f333d64165df3285bec649710..f9ec88d982922dd1765f70a13939fe7e68b26c64 100644 (file)
@@ -75,7 +75,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *code_ptr, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *code_ptr, guint8 *addr)
 {
        guint32 *code = (guint32*)code_ptr;
 
index 9928f351fc53d070d3ac6e6b7aa40b00abc78a4f..085f4916eb61cac34944a1927c0f480870985d16 100644 (file)
@@ -77,7 +77,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *p, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *p, guint8 *addr)
 {
        guint32 *code = (void *)p;
        /* Search for and patch the calling sequence
index a48b526b0ebf2254e45d225ef66a95ad613df72a..69a33a6b3241fe8f7356a29062d6e1f11dfcd6b6 100644 (file)
@@ -76,7 +76,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *code, guint8 *addr)
 {
        guint8 *callsite_begin;
        guint64 *callsite = (guint64*)(gpointer)(code - 16);
index ceabffafac4e90a4ba5280a98355cd981bde7ed5..73ff018fe8a1783cdef3e15b2322bd7e09491087 100644 (file)
@@ -85,7 +85,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *code_ptr, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *code_ptr, guint8 *addr)
 {
        guint32 *code = (guint32*)code_ptr;
        /* This is the 'blrl' instruction */
index c3235c5f753ac7d582cb27db1bddb5022e291389..a3be39a82dbd90997a4d8ceba0fa81f77672c859 100644 (file)
@@ -128,7 +128,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *method, gpointer addr)
 /*------------------------------------------------------------------*/
 
 void
-mono_arch_patch_callsite (guint8 *orig_code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *orig_code, guint8 *addr)
 {
        gint32 displace;
        unsigned short opcode;
index 14be13a39d843f80b9cf4f2c4b919e4c4c77e2af..ae83968e897115784fdfb46b0ae51eea87ccb21e 100644 (file)
@@ -128,7 +128,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *method, gpointer addr)
 /*------------------------------------------------------------------*/
 
 void
-mono_arch_patch_callsite (guint8 *orig_code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *orig_code, guint8 *addr)
 {
        gint32 displace;
        unsigned short opcode;
index b737df17c28e667b279c70e72187067df869fee6..8232743cd8b9e6e12f480ef7ab1a2e02e2191271 100644 (file)
@@ -58,7 +58,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *code, guint8 *addr)
 {
        if (sparc_inst_op (*(guint32*)code) == 0x1) {
                sparc_call_simple (code, (guint8*)addr - (guint8*)code);
index 7ae12b9cbf8e3c0592a8cb1cc5d651bab6920034..ce976aacf98fc5489a82cda44bc5e23d36bc05d7 100644 (file)
@@ -58,7 +58,7 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
 }
 
 void
-mono_arch_patch_callsite (guint8 *orig_code, guint8 *addr)
+mono_arch_patch_callsite (guint8 *method_start, guint8 *orig_code, guint8 *addr)
 {
        guint8 *code;
        guint8 buf [8];