--- old/src/cpu/sparc/vm/frame_sparc.cpp Tue Sep 6 17:46:21 2011 +++ new/src/cpu/sparc/vm/frame_sparc.cpp Tue Sep 6 17:46:20 2011 @@ -839,3 +839,9 @@ } #endif + +intptr_t *frame::initial_deoptimization_info() { + // unused... but returns fp() to minimize changes + return fp(); +} + --- old/src/cpu/x86/vm/frame_x86.cpp Tue Sep 6 17:46:22 2011 +++ new/src/cpu/x86/vm/frame_x86.cpp Tue Sep 6 17:46:22 2011 @@ -666,3 +666,9 @@ } #endif + +intptr_t *frame::initial_deoptimization_info() { + // used to reset the saved FP + return fp(); +} + --- old/src/cpu/zero/vm/frame_zero.cpp Tue Sep 6 17:46:24 2011 +++ new/src/cpu/zero/vm/frame_zero.cpp Tue Sep 6 17:46:24 2011 @@ -425,3 +425,9 @@ } #endif + +intptr_t *frame::initial_deoptimization_info() { + // unused... but returns fp() to minimize changes + return fp(); +} + --- old/src/share/vm/runtime/arguments.cpp Tue Sep 6 17:46:26 2011 +++ new/src/share/vm/runtime/arguments.cpp Tue Sep 6 17:46:26 2011 @@ -3018,9 +3018,6 @@ } #ifdef JAVASE_EMBEDDED - #ifdef PPC - UNSUPPORTED_OPTION(EnableInvokeDynamic, "Invoke dynamic"); - #endif UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); #endif --- old/src/share/vm/runtime/deoptimization.cpp Tue Sep 6 17:46:28 2011 +++ new/src/share/vm/runtime/deoptimization.cpp Tue Sep 6 17:46:28 2011 @@ -486,9 +486,10 @@ frame_sizes, frame_pcs, return_type); - // On some platforms, we need a way to pass fp to the unpacking code - // so the skeletal frames come out correct. - info->set_initial_fp((intptr_t) array->sender().fp()); + // On some platforms, we need a way to pass some platform dependent + // information to the unpacking code so the skeletal frames come out + // correct (initial fp value, unextended sp, ...) + info->set_initial_fp((intptr_t) array->sender().initial_deoptimization_info()); if (array->frames() > 1) { if (VerifyStack && TraceDeoptimization) { --- old/src/share/vm/runtime/frame.hpp Tue Sep 6 17:46:30 2011 +++ new/src/share/vm/runtime/frame.hpp Tue Sep 6 17:46:29 2011 @@ -221,6 +221,10 @@ // returns the stack pointer of the calling frame intptr_t* sender_sp() const; + // Deoptimization info, if needed (platform dependent). + // Stored in the initial_fp field of the unroll info, to be used by + // the platform dependent deoptimization blobs. + intptr_t *initial_deoptimization_info(); // Interpreter frames: