fixup_vtable() was using old ->method_index field which is no longer valid.

Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 arch/x86/emit-code.c |    2 +-
 vm/class.c           |    4 ++++
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/arch/x86/emit-code.c b/arch/x86/emit-code.c
index a348ab3..009dbc9 100644
--- a/arch/x86/emit-code.c
+++ b/arch/x86/emit-code.c
@@ -405,7 +405,7 @@ static void fixup_vtable(struct compilation_unit *cu,
 {
        struct vm_class *vmc = objref->class;
 
-       vmc->vtable.native_ptr[cu->method->method_index] = target;
+       vmc->vtable.native_ptr[cu->method->virtual_index] = target;
 }
 
 #ifdef CONFIG_X86_32
diff --git a/vm/class.c b/vm/class.c
index 6629393..7ed79e8 100644
--- a/vm/class.c
+++ b/vm/class.c
@@ -102,6 +102,8 @@ setup_vtable(struct vm_class *vmc)
                                = vm_class_get_method_recursive(super,
                                        vmm->name, vmm->type);
                        if (vmm2) {
+                               vmm->virtual_index = vmm2->virtual_index;
+
                                vtable_setup_method(&vmc->vtable,
                                        vmm2->virtual_index,
                                        vm_method_trampoline_ptr(vmm));
@@ -109,6 +111,8 @@ setup_vtable(struct vm_class *vmc)
                        }
                }
 
+               vmm->virtual_index = super_vtable_size + vtable_size;
+
                vtable_setup_method(&vmc->vtable,
                        super_vtable_size + vtable_size,
                        vm_method_trampoline_ptr(vmm));
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to