src/cpu/sparc/vm/frame_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/sparc/vm/frame_sparc.cpp Thu Dec 17 17:51:58 2015
--- new/src/cpu/sparc/vm/frame_sparc.cpp Thu Dec 17 17:51:58 2015
*** 439,454 ****
--- 439,452 ----
intptr_t* frame::interpreter_frame_sender_sp() const {
assert(is_interpreted_frame(), "interpreted frame expected");
return fp();
}
#ifndef CC_INTERP
void frame::set_interpreter_frame_sender_sp(intptr_t* sender_sp) {
assert(is_interpreted_frame(), "interpreted frame expected");
Unimplemented();
}
#endif // CC_INTERP
frame frame::sender_for_entry_frame(RegisterMap *map) const {
assert(map != NULL, "map must be set");
// Java frame called from C; skip all C frames and return top C
// frame of that chunk as the sender
*** 598,610 ****
--- 596,605 ----
bool frame::is_valid_stack_pointer(intptr_t* valid_sp, intptr_t* sp) {
return next_younger_sp_or_null(valid_sp, sp) != NULL;
}
bool frame::is_interpreted_frame_valid(JavaThread* thread) const {
#ifdef CC_INTERP
// Is there anything to do?
#else
assert(is_interpreted_frame(), "Not an interpreted frame");
// These are reasonable sanity checks
if (fp() == 0 || (intptr_t(fp()) & (2*wordSize-1)) != 0) {
return false;
}
*** 652,662 ****
--- 647,656 ----
address locals = (address) *interpreter_frame_locals_addr();
if (locals > thread->stack_base() || locals < (address) fp()) return false;
// We'd have to be pretty unlucky to be mislead at this point
#endif /* CC_INTERP */
return true;
}
// Windows have been flushed on entry (but not marked). Capture the pc that
*** 710,727 ****
--- 704,715 ----
if (method->is_native()) {
// Prior to notifying the runtime of the method_exit the possible result
// value is saved to l_scratch and d_scratch.
#ifdef CC_INTERP
interpreterState istate = get_interpreterState();
intptr_t* l_scratch = (intptr_t*) &istate->_native_lresult;
intptr_t* d_scratch = (intptr_t*) &istate->_native_fresult;
#else /* CC_INTERP */
intptr_t* l_scratch = fp() + interpreter_frame_l_scratch_fp_offset;
intptr_t* d_scratch = fp() + interpreter_frame_d_scratch_fp_offset;
#endif /* CC_INTERP */
address l_addr = (address)l_scratch;
#ifdef _LP64
// On 64-bit the result for 1/8/16/32-bit result types is in the other
// word half
*** 729,745 ****
--- 717,729 ----
#endif
switch (type) {
case T_OBJECT:
case T_ARRAY: {
#ifdef CC_INTERP
*oop_result = istate->_oop_temp;
#else
oop obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
*oop_result = obj;
#endif // CC_INTERP
break;
}
case T_BOOLEAN : { jint* p = (jint*)l_addr; value_result->z = (jboolean)((*p) & 0x1); break; }
case T_BYTE : { jint* p = (jint*)l_addr; value_result->b = (jbyte)((*p) & 0xff); break; }
*** 795,816 ****
--- 779,798 ----
for (int w = 0; w < frame::register_save_words; w++) {
values.describe(frame_no, sp() + w, err_msg("register save area word %d", w), 1);
}
if (is_interpreted_frame()) {
#ifndef CC_INTERP
DESCRIBE_FP_OFFSET(interpreter_frame_d_scratch_fp);
DESCRIBE_FP_OFFSET(interpreter_frame_l_scratch_fp);
DESCRIBE_FP_OFFSET(interpreter_frame_padding);
DESCRIBE_FP_OFFSET(interpreter_frame_oop_temp);
// esp, according to Lesp (e.g. not depending on bci), if seems valid
intptr_t* esp = *interpreter_frame_esp_addr();
if ((esp >= sp()) && (esp < fp())) {
values.describe(-1, esp, "*Lesp");
}
#endif
}
if (!is_compiled_frame()) {
if (frame::callee_aggregate_return_pointer_words != 0) {
values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word");
src/cpu/sparc/vm/frame_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File