agent/src/share/classes/sun/jvm/hotspot/runtime/CompiledVFrame.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6706829 Cdiff agent/src/share/classes/sun/jvm/hotspot/runtime/CompiledVFrame.java

agent/src/share/classes/sun/jvm/hotspot/runtime/CompiledVFrame.java

Print this page

        

*** 204,213 **** --- 204,223 ---- // saved long to the int that the JVM wants. if (Assert.ASSERTS_ENABLED) { Assert.that( loc.isRegister(), "ints always saved to stack in 1 word" ); } return new StackValue(valueAddr.getJLongAt(0) & 0xFFFFFFFF); + } else if (loc.holdsNarrowOop()) { // Holds an narrow oop? + if (loc.isRegister() && VM.getVM().isBigEndian()) { + // The callee has no clue whether the register holds an narrow oop, + // long or is unused. He always saves a long. Here we know + // a long was saved, but we only want an narrow oop back. Narrow the + // saved long to the narrow oop that the JVM wants. + return new StackValue(valueAddr.getCompOopHandleAt(VM.getVM().getIntSize())); + } else { + return new StackValue(valueAddr.getCompOopHandleAt(0)); + } } else if( loc.holdsOop() ) { // Holds an oop? return new StackValue(valueAddr.getOopHandleAt(0)); } else if( loc.holdsDouble() ) { // Double value in a single stack slot return new StackValue(valueAddr.getJIntAt(0) & 0xFFFFFFFF);
agent/src/share/classes/sun/jvm/hotspot/runtime/CompiledVFrame.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File