Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com> --- arch/x86/insn-selector_32.brg | 7 ++++--- vm/class.c | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/arch/x86/insn-selector_32.brg b/arch/x86/insn-selector_32.brg index 6346454..9b918f6 100644 --- a/arch/x86/insn-selector_32.brg +++ b/arch/x86/insn-selector_32.brg @@ -834,7 +834,8 @@ reg: EXPR_CLASS_FIELD 1 * don't want the fixup if we're already inside the * initializer. */ mov_insn = memdisp_reg_insn(INSN_MOV_MEMDISP_REG, - (unsigned long) vmc->static_values + vmf->offset, out); + (unsigned long) vmc->static_values + + vmf->static_offset, out); } else { mov_insn = memdisp_reg_insn(INSN_MOV_MEMDISP_REG, (unsigned long) static_guard_page, out); @@ -848,8 +849,8 @@ reg: EXPR_CLASS_FIELD 1 if (expr->vm_type == J_LONG) { state->reg2 = get_var(s->b_parent); select_insn(s, tree, memdisp_reg_insn(INSN_MOV_MEMDISP_REG, - (unsigned long) vmc->static_values + vmf->offset + 4, - state->reg2)); + (unsigned long) vmc->static_values + + vmf->static_offset + 4, state->reg2)); } } diff --git a/vm/class.c b/vm/class.c index aecda8a..62d1a19 100644 --- a/vm/class.c +++ b/vm/class.c @@ -195,8 +195,7 @@ int vm_class_link(struct vm_class *vmc, const struct cafebabe_class *class) static_offset = 0; } - /* XXX: only static fields, right size, etc. */ - vmc->static_values = malloc(static_offset + class->fields_count * 8); + unsigned int static_size = 0; for (uint16_t i = 0; i < class->fields_count; ++i) { struct vm_field *vmf = &vmc->fields[i]; @@ -206,6 +205,16 @@ int vm_class_link(struct vm_class *vmc, const struct cafebabe_class *class) return -1; } + if (vm_field_is_static(vmf)) + static_size += 8; + } + + /* XXX: only static fields, right size, etc. */ + vmc->static_values = malloc(static_offset + static_size); + + for (uint16_t i = 0; i < class->fields_count; ++i) { + struct vm_field *vmf = &vmc->fields[i]; + if (vm_field_is_static(vmf)) { if (vm_field_init_static(vmf, static_offset)) { NOT_IMPLEMENTED; @@ -222,7 +231,7 @@ int vm_class_link(struct vm_class *vmc, const struct cafebabe_class *class) } vmc->object_size = offset; - vmc->static_size = static_offset; + vmc->static_size = static_offset + static_size; vmc->methods = malloc(sizeof(*vmc->methods) * class->methods_count); if (!vmc->methods) { -- 1.6.0.4 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel