# HG changeset patch # User aph # Date 1395435448 0 # Node ID 9747f83d7a38205a4a26008ee767fd161e1856c2 # Parent 71fc00fc11be132b1e606facf88155dfcd164b2b Replace literal offsets for METHOD_SIZEOFPARAMETERS and ISTATE_NEXT_FRAME with correct symbolic names. Fix trace code not to dereference null pointers. Correct Helper_aputfield and helper_aastore not to use static _byte_map_base. Comment-out calls to TRACE. Make sure that ISTATE_METHOD and ISTATE_SELF_LINK are set even when JITting fails. diff -r 71fc00fc11be -r 9747f83d7a38 src/cpu/zero/vm/asm_helper.cpp --- a/src/cpu/zero/vm/asm_helper.cpp Mon Mar 17 13:40:34 2014 +0000 +++ b/src/cpu/zero/vm/asm_helper.cpp Fri Mar 21 20:57:28 2014 +0000 @@ -360,22 +360,16 @@ goto handle_exception; } } - oop* elem_loc = (oop*)(((address) arrayref->base(T_OBJECT)) + index * sizeof(oop)); - // *(oop*)(((address) arrayref->base(T_OBJECT)) + index * sizeof(oop)) = value; - *elem_loc = value; - // Mark the card - BarrierSet* bs = Universe::heap()->barrier_set(); - static volatile jbyte* _byte_map_base = (volatile jbyte*)(((CardTableModRefBS*)bs)->byte_map_base); - OrderAccess::release_store(&_byte_map_base[(uintptr_t)elem_loc >> CardTableModRefBS::card_shift], 0); + ((objArrayOopDesc *) arrayref)->obj_at_put(index, value); } handle_exception: return istate->thread()->pending_exception(); } -extern "C" void Helper_aputfield(oop obj) +extern "C" void Helper_aputfield(oop obj, oop val, int offset) { BarrierSet* bs = Universe::heap()->barrier_set(); - static volatile jbyte* _byte_map_base = (volatile jbyte*)(((CardTableModRefBS*)bs)->byte_map_base); + jbyte* _byte_map_base = (((CardTableModRefBS*)bs)->byte_map_base); OrderAccess::release_store(&_byte_map_base[(uintptr_t)obj >> CardTableModRefBS::card_shift], 0); } diff -r 71fc00fc11be -r 9747f83d7a38 src/cpu/zero/vm/cppInterpreter_arm.S --- a/src/cpu/zero/vm/cppInterpreter_arm.S Mon Mar 17 13:40:34 2014 +0000 +++ b/src/cpu/zero/vm/cppInterpreter_arm.S Fri Mar 21 20:57:28 2014 +0000 @@ -526,10 +526,13 @@ mrs r4, cpsr mov r0, jpc ldr r1, [thread, #THREAD_TOP_ZERO_FRAME] + cmp r1, #0 sub r1, r1, #ISTATE_NEXT_FRAME + beq 0f + DECACHE_JPC ldr r2, =my_trace blx r2 - msr cpsr, r4 +0: msr cpsr, r4 ldmfd sp!, {r0, r1, r2, r3, r4, lr, ip} .endm @@ -861,7 +864,7 @@ SLOW_ENTRY empty_entry: - ldrh r3, [r0, #42] + ldrh r3, [r0, #METHOD_SIZEOFPARAMETERS] ldr r1, [r2, #THREAD_JAVA_SP] add r1, r1, r3, lsl #2 str r1, [r2, #THREAD_JAVA_SP] @@ -870,7 +873,7 @@ FAST_ENTRY fast_empty_entry: - ldrh r3, [r0, #42] + ldrh r3, [r0, #METHOD_SIZEOFPARAMETERS] ldr r1, [thread, #THREAD_JAVA_SP] add r1, r1, r3, lsl #2 str r1, [thread, #THREAD_JAVA_SP] @@ -1072,7 +1075,7 @@ ldr r1, [thread, #THREAD_STACK_SIZE] ldr r3, [thread, #THREAD_STACK_BASE] - add r0, r9, #72 + add r0, r9, #ISTATE_NEXT_FRAME rsb r3, r1, r3 rsb r3, r3, arm_sp @@ -1095,7 +1098,7 @@ str r5, [thread, #THREAD_LAST_JAVA_FP] ldr r5, [thread, #THREAD_JAVA_SP] str r5, [thread, #THREAD_LAST_JAVA_SP] - ldr r11, [r11, #-72 + ISTATE_METHOD] + ldr r11, [r11, #-ISTATE_NEXT_FRAME + ISTATE_METHOD] cmp r1, #0 bne .fast_native_entry_exception ldr r5, [r11, #METHOD_SIGNATUREHANDLER] @@ -1118,7 +1121,7 @@ ldr r11, [thread, #THREAD_TOP_ZERO_FRAME] ldr r1, [thread, #THREAD_PENDING_EXC] mov r3, #0 - ldr r11, [r11, #-72 + ISTATE_METHOD] + ldr r11, [r11, #-ISTATE_NEXT_FRAME + ISTATE_METHOD] cmp r1, #0 str r3, [thread, #THREAD_LAST_JAVA_SP] str r3, [thread, #THREAD_LAST_JAVA_FP] @@ -3340,12 +3343,12 @@ str locals, [istate, #ISTATE_LOCALS] USEC cmp r3, lr str constpool, [istate, #ISTATE_CONSTANTS] + str tmp1, [istate, #ISTATE_METHOD] + str istate, [istate, #ISTATE_SELF_LINK] USEC bcs method_entry_freq_count_overflow DISPATCH_NEXT DISPATCH_NEXT DISPATCH_NEXT - str tmp1, [istate, #ISTATE_METHOD] - str istate, [istate, #ISTATE_SELF_LINK] @ mov lr, #0 @ str lr, [istate, #ISTATE_PREV_LINK] @ str lr, [istate, #ISTATE_CALLEE]