# HG changeset patch # User ysuenaga # Date 1506686418 -32400 # Node ID 4011de22323190f48ad705872edf9546b00a91ba # Parent e05aff6beada5c2071e6c48d63d4b3e06d1eb6f0 8187402: UnknownOopException is occurred on Stack Memory window in HSDB Reviewed-by: sspitsyn, jgeorge diff -r e05aff6beada -r 4011de223231 src/hotspot/share/runtime/vmStructs.cpp --- a/src/hotspot/share/runtime/vmStructs.cpp Tue Sep 26 00:52:29 2017 -0700 +++ b/src/hotspot/share/runtime/vmStructs.cpp Fri Sep 29 21:00:18 2017 +0900 @@ -2726,8 +2726,12 @@ /* JVMCI */ \ /****************/ \ \ - declare_preprocessor_constant("INCLUDE_JVMCI", INCLUDE_JVMCI) - + declare_preprocessor_constant("INCLUDE_JVMCI", INCLUDE_JVMCI) \ + \ + /****************/ \ + /* VMRegImpl */ \ + /****************/ \ + declare_constant(VMRegImpl::stack_slot_size) //-------------------------------------------------------------------------------- // VM_LONG_CONSTANTS diff -r e05aff6beada -r 4011de223231 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/VMRegImpl.java --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/VMRegImpl.java Tue Sep 26 00:52:29 2017 -0700 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/VMRegImpl.java Fri Sep 29 21:00:18 2017 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ private static int stack0Val; private static Address stack0Addr; private static AddressField regNameField; + private static int stackSlotSize; static { VM.registerVMInitializedObserver(new Observer() { @@ -53,6 +54,7 @@ stack0Val = (int) stack0Addr.hashCode(); stack0 = new VMReg(stack0Val); regNameField = type.getAddressField("regName[0]"); + stackSlotSize = db.lookupIntConstant("VMRegImpl::stack_slot_size"); } public static VMReg getStack0() { @@ -67,4 +69,8 @@ long addrSize = VM.getVM().getAddressSize(); return CStringUtilities.getString(regName.getAddressAt(index * addrSize)); } + + public static int getStackSlotSize() { + return stackSlotSize; + } } diff -r e05aff6beada -r 4011de223231 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java Tue Sep 26 00:52:29 2017 -0700 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java Fri Sep 29 21:00:18 2017 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -430,7 +430,7 @@ // If it is passed in a register, it got spilled in the stub frame. return regMap.getLocation(reg); } else { - long spOffset = VM.getVM().getAddressSize() * reg.minus(stack0); + long spOffset = reg.reg2Stack() * VM.getVM().getVMRegImplInfo().getStackSlotSize(); return getUnextendedSP().addOffsetTo(spOffset); } } diff -r e05aff6beada -r 4011de223231 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMReg.java --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMReg.java Tue Sep 26 00:52:29 2017 -0700 +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VMReg.java Fri Sep 29 21:00:18 2017 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,4 +84,8 @@ public boolean greaterThanOrEqual(VMReg arg) { return value >= arg.value; } public int minus(VMReg arg) { return value - arg.value; } + + public int reg2Stack() { + return value - VM.getVM().getVMRegImplInfo().getStack0().getValue(); + } }