2007-07-17 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Tue, 17 Jul 2007 15:52:34 +0000 (15:52 -0000)
committerZoltan Varga <vargaz@gmail.com>
Tue, 17 Jul 2007 15:52:34 +0000 (15:52 -0000)
* mini-amd64.c (mono_arch_find_imt_method): Handle mov reg,IMM64 case. Fixes
#82117.

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

mono/mini/ChangeLog
mono/mini/mini-amd64.c

index 4793011454523834226d7fbab0c5eaae7d1189ea..6f5a8262208702fd12494bf1f2e1841f1d8196f7 100644 (file)
@@ -1,5 +1,8 @@
 2007-07-17  Zoltan Varga  <vargaz@gmail.com>
 
+       * mini-amd64.c (mono_arch_find_imt_method): Handle mov reg,IMM64 case. Fixes
+       #82117.
+       
        * mini-amd64.c (mono_arch_find_imt_method): Add some debug code to help find out
        the cause of an assertion.
 
index b66ec6da0b7d4a9b53ba234363516fbfcfd77b1a..7fd7c131a75bc673eaa28f50e2345342537e9db8 100644 (file)
@@ -5549,17 +5549,20 @@ mono_arch_find_imt_method (gpointer *regs, guint8 *code)
                g_assert_not_reached ();
 
        /* Find the start of the mov instruction */
-       code -= 6;
-       if (!(code [0] == 0x41 && code [1] == 0xbb)) {
+       code -= 10;
+       if (code [0] == 0x49 && code [1] == 0xbb) {
+               return (MonoMethod*)*(gssize*)(code + 2);
+       } else if (code [4] == 0x41 && code [5] == 0xbb) {
+               return (MonoMethod*)(gssize)*(guint32*)(code + 6);
+       } else {
                int i;
 
                printf ("Unknown call sequence: ");
                for (i = -10; i < 20; ++i)
                        printf ("%x ", code [i]);
                g_assert_not_reached ();
+               return NULL;
        }
-
-       return (MonoMethod*)(gssize)*(guint32*)(code + 2);
 }
 
 MonoObject*