Signed-off-by: Vegard Nossum <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel