8189798: SA cleanup - part 1

Avoid varible redefinitions in SA, modify SA varible names to match hotspot ones

Reviewed-by: sspitsyn, coleenp, sballal
This commit is contained in:
Jini George 2017-11-09 12:12:32 +05:30
parent 2aecf1b321
commit 02b4fc7985
14 changed files with 78 additions and 159 deletions

View File

@ -57,6 +57,7 @@ int CompactibleFreeListSpace::_lockRank = Mutex::leaf + 3;
// Defaults are 0 so things will break badly if incorrectly initialized. // Defaults are 0 so things will break badly if incorrectly initialized.
size_t CompactibleFreeListSpace::IndexSetStart = 0; size_t CompactibleFreeListSpace::IndexSetStart = 0;
size_t CompactibleFreeListSpace::IndexSetStride = 0; size_t CompactibleFreeListSpace::IndexSetStride = 0;
size_t CompactibleFreeListSpace::_min_chunk_size_in_bytes = 0;
size_t MinChunkSize = 0; size_t MinChunkSize = 0;
@ -66,8 +67,8 @@ void CompactibleFreeListSpace::set_cms_values() {
// MinChunkSize should be a multiple of MinObjAlignment and be large enough // MinChunkSize should be a multiple of MinObjAlignment and be large enough
// for chunks to contain a FreeChunk. // for chunks to contain a FreeChunk.
size_t min_chunk_size_in_bytes = align_up(sizeof(FreeChunk), MinObjAlignmentInBytes); _min_chunk_size_in_bytes = align_up(sizeof(FreeChunk), MinObjAlignmentInBytes);
MinChunkSize = min_chunk_size_in_bytes / BytesPerWord; MinChunkSize = _min_chunk_size_in_bytes / BytesPerWord;
assert(IndexSetStart == 0 && IndexSetStride == 0, "already set"); assert(IndexSetStart == 0 && IndexSetStride == 0, "already set");
IndexSetStart = MinChunkSize; IndexSetStart = MinChunkSize;

View File

@ -118,6 +118,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
}; };
static size_t IndexSetStart; static size_t IndexSetStart;
static size_t IndexSetStride; static size_t IndexSetStride;
static size_t _min_chunk_size_in_bytes;
private: private:
enum FitStrategyOptions { enum FitStrategyOptions {
@ -134,6 +135,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// A lock protecting the free lists and free blocks; // A lock protecting the free lists and free blocks;
// mutable because of ubiquity of locking even for otherwise const methods // mutable because of ubiquity of locking even for otherwise const methods
mutable Mutex _freelistLock; mutable Mutex _freelistLock;
// Locking verifier convenience function // Locking verifier convenience function
void assert_locked() const PRODUCT_RETURN; void assert_locked() const PRODUCT_RETURN;
void assert_locked(const Mutex* lock) const PRODUCT_RETURN; void assert_locked(const Mutex* lock) const PRODUCT_RETURN;

View File

@ -30,7 +30,8 @@
static_field) \ static_field) \
nonstatic_field(CompactibleFreeListSpace, _collector, CMSCollector*) \ nonstatic_field(CompactibleFreeListSpace, _collector, CMSCollector*) \
nonstatic_field(CompactibleFreeListSpace, _bt, BlockOffsetArrayNonContigSpace) \ nonstatic_field(CompactibleFreeListSpace, _bt, BlockOffsetArrayNonContigSpace) \
\ static_field(CompactibleFreeListSpace, _min_chunk_size_in_bytes, size_t) \
nonstatic_field(CMSBitMap, _bmStartWord, HeapWord*) \
nonstatic_field(CMSBitMap, _bmWordSize, size_t) \ nonstatic_field(CMSBitMap, _bmWordSize, size_t) \
nonstatic_field(CMSBitMap, _shifter, const int) \ nonstatic_field(CMSBitMap, _shifter, const int) \
nonstatic_field(CMSBitMap, _bm, BitMapView) \ nonstatic_field(CMSBitMap, _bm, BitMapView) \
@ -63,6 +64,7 @@
declare_toplevel_type(LinearAllocBlock) declare_toplevel_type(LinearAllocBlock)
#define VM_INT_CONSTANTS_CMS(declare_constant) \ #define VM_INT_CONSTANTS_CMS(declare_constant) \
declare_constant(CompactibleFreeListSpace::IndexSetSize) \
declare_constant(Generation::ConcurrentMarkSweep) \ declare_constant(Generation::ConcurrentMarkSweep) \
#endif // SHARE_VM_GC_CMS_VMSTRUCTS_CMS_HPP #endif // SHARE_VM_GC_CMS_VMSTRUCTS_CMS_HPP

View File

@ -191,12 +191,12 @@ BasicLock* StackValue::resolve_monitor_lock(const frame* fr, Location location)
void StackValue::print_on(outputStream* st) const { void StackValue::print_on(outputStream* st) const {
switch(_type) { switch(_type) {
case T_INT: case T_INT:
st->print("%d (int) %f (float) %x (hex)", *(int *)&_i, *(float *)&_i, *(int *)&_i); st->print("%d (int) %f (float) %x (hex)", *(int *)&_integer_value, *(float *)&_integer_value, *(int *)&_integer_value);
break; break;
case T_OBJECT: case T_OBJECT:
_o()->print_value_on(st); _handle_value()->print_value_on(st);
st->print(" <" INTPTR_FORMAT ">", p2i((address)_o())); st->print(" <" INTPTR_FORMAT ">", p2i((address)_handle_value()));
break; break;
case T_CONFLICT: case T_CONFLICT:

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -31,63 +31,63 @@
class StackValue : public ResourceObj { class StackValue : public ResourceObj {
private: private:
BasicType _type; BasicType _type;
intptr_t _i; // Blank java stack slot value intptr_t _integer_value; // Blank java stack slot value
Handle _o; // Java stack slot value interpreted as a Handle Handle _handle_value; // Java stack slot value interpreted as a Handle
public: public:
StackValue(intptr_t value) { StackValue(intptr_t value) {
_type = T_INT; _type = T_INT;
_i = value; _integer_value = value;
} }
StackValue(Handle value, intptr_t scalar_replaced = 0) { StackValue(Handle value, intptr_t scalar_replaced = 0) {
_type = T_OBJECT; _type = T_OBJECT;
_i = scalar_replaced; _integer_value = scalar_replaced;
_o = value; _handle_value = value;
assert(_i == 0 || _o.is_null(), "not null object should not be marked as scalar replaced"); assert(_integer_value == 0 || _handle_value.is_null(), "not null object should not be marked as scalar replaced");
} }
StackValue() { StackValue() {
_type = T_CONFLICT; _type = T_CONFLICT;
_i = 0; _integer_value = 0;
} }
// Only used during deopt- preserve object type. // Only used during deopt- preserve object type.
StackValue(intptr_t o, BasicType t) { StackValue(intptr_t o, BasicType t) {
assert(t == T_OBJECT, "should not be used"); assert(t == T_OBJECT, "should not be used");
_type = t; _type = t;
_i = o; _integer_value = o;
} }
Handle get_obj() const { Handle get_obj() const {
assert(type() == T_OBJECT, "type check"); assert(type() == T_OBJECT, "type check");
return _o; return _handle_value;
} }
bool obj_is_scalar_replaced() const { bool obj_is_scalar_replaced() const {
assert(type() == T_OBJECT, "type check"); assert(type() == T_OBJECT, "type check");
return _i != 0; return _integer_value != 0;
} }
void set_obj(Handle value) { void set_obj(Handle value) {
assert(type() == T_OBJECT, "type check"); assert(type() == T_OBJECT, "type check");
_o = value; _handle_value = value;
} }
intptr_t get_int() const { intptr_t get_int() const {
assert(type() == T_INT, "type check"); assert(type() == T_INT, "type check");
return _i; return _integer_value;
} }
// For special case in deopt. // For special case in deopt.
intptr_t get_int(BasicType t) const { intptr_t get_int(BasicType t) const {
assert(t == T_OBJECT && type() == T_OBJECT, "type check"); assert(t == T_OBJECT && type() == T_OBJECT, "type check");
return _i; return _integer_value;
} }
void set_int(intptr_t value) { void set_int(intptr_t value) {
assert(type() == T_INT, "type check"); assert(type() == T_INT, "type check");
_i = value; _integer_value = value;
} }
BasicType type() const { return _type; } BasicType type() const { return _type; }
@ -95,11 +95,11 @@ class StackValue : public ResourceObj {
bool equal(StackValue *value) { bool equal(StackValue *value) {
if (_type != value->_type) return false; if (_type != value->_type) return false;
if (_type == T_OBJECT) if (_type == T_OBJECT)
return (_o == value->_o); return (_handle_value == value->_handle_value);
else { else {
assert(_type == T_INT, "sanity check"); assert(_type == T_INT, "sanity check");
// [phh] compare only low addressed portions of intptr_t slots // [phh] compare only low addressed portions of intptr_t slots
return (*(int *)&_i == *(int *)&value->_i); return (*(int *)&_integer_value == *(int *)&value->_integer_value);
} }
} }

View File

@ -2175,6 +2175,7 @@ typedef PaddedEnd<ObjectMonitor> PaddedObjectMonitor;
declare_toplevel_type(vframeArray) \ declare_toplevel_type(vframeArray) \
declare_toplevel_type(vframeArrayElement) \ declare_toplevel_type(vframeArrayElement) \
declare_toplevel_type(Annotations*) \ declare_toplevel_type(Annotations*) \
declare_type(OopMapValue, StackObj) \
\ \
/***************/ \ /***************/ \
/* Miscellaneous types */ \ /* Miscellaneous types */ \

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,8 +34,8 @@ import java.util.Observable;
import java.util.Observer; import java.util.Observer;
public class ImmutableOopMapPair { public class ImmutableOopMapPair {
private static CIntegerField pcField; private static CIntegerField pcOffsetField;
private static CIntegerField offsetField; private static CIntegerField oopmapOffsetField;
private static long classSize; private static long classSize;
static { static {
@ -57,18 +57,18 @@ public class ImmutableOopMapPair {
} }
public int getPC() { public int getPC() {
return (int) pcField.getValue(address); return (int) pcOffsetField.getValue(address);
} }
public int getOffset() { public int getOffset() {
return (int) offsetField.getValue(address); return (int) oopmapOffsetField.getValue(address);
} }
private static void initialize(TypeDataBase db) { private static void initialize(TypeDataBase db) {
Type type = db.lookupType("ImmutableOopMapPair"); Type type = db.lookupType("ImmutableOopMapPair");
pcField = type.getCIntegerField("_pc_offset"); pcOffsetField = type.getCIntegerField("_pc_offset");
offsetField = type.getCIntegerField("_oopmap_offset"); oopmapOffsetField = type.getCIntegerField("_oopmap_offset");
classSize = type.getSize(); classSize = type.getSize();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -41,10 +41,11 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
private static AddressField dictionaryField; private static AddressField dictionaryField;
private static long smallLinearAllocBlockFieldOffset; private static long smallLinearAllocBlockFieldOffset;
private int heapWordSize; // 4 for 32bit, 8 for 64 bits private int heapWordSize; // 4 for 32bit, 8 for 64 bits
private int IndexSetStart; // for small indexed list private int IndexSetStart; // for small indexed list
private int IndexSetSize; private int IndexSetSize;
private int IndexSetStride; private int IndexSetStride;
private static long MinChunkSizeInBytes;
static { static {
VM.registerVMInitializedObserver(new Observer() { VM.registerVMInitializedObserver(new Observer() {
@ -57,8 +58,6 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
private static synchronized void initialize(TypeDataBase db) { private static synchronized void initialize(TypeDataBase db) {
long sizeofFreeChunk = db.lookupType("FreeChunk").getSize(); long sizeofFreeChunk = db.lookupType("FreeChunk").getSize();
VM vm = VM.getVM(); VM vm = VM.getVM();
MinChunkSizeInBytes = numQuanta(sizeofFreeChunk, vm.getMinObjAlignmentInBytes()) *
vm.getMinObjAlignmentInBytes();
Type type = db.lookupType("CompactibleFreeListSpace"); Type type = db.lookupType("CompactibleFreeListSpace");
collectorField = type.getAddressField("_collector"); collectorField = type.getAddressField("_collector");
@ -66,6 +65,7 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
dictionaryField = type.getAddressField("_dictionary"); dictionaryField = type.getAddressField("_dictionary");
indexedFreeListField = type.getAddressField("_indexedFreeList[0]"); indexedFreeListField = type.getAddressField("_indexedFreeList[0]");
smallLinearAllocBlockFieldOffset = type.getField("_smallLinearAllocBlock").getOffset(); smallLinearAllocBlockFieldOffset = type.getField("_smallLinearAllocBlock").getOffset();
MinChunkSizeInBytes = (type.getCIntegerField("_min_chunk_size_in_bytes")).getValue();
} }
public CompactibleFreeListSpace(Address addr) { public CompactibleFreeListSpace(Address addr) {
@ -74,7 +74,7 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
heapWordSize = vm.getHeapWordSize(); heapWordSize = vm.getHeapWordSize();
IndexSetStart = vm.getMinObjAlignmentInBytes() / heapWordSize; IndexSetStart = vm.getMinObjAlignmentInBytes() / heapWordSize;
IndexSetStride = IndexSetStart; IndexSetStride = IndexSetStart;
IndexSetSize = 257; IndexSetSize = vm.getIndexSetSize();
} }
// Accessing block offset table // Accessing block offset table
@ -201,14 +201,8 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
// Unlike corresponding VM code, we operate on byte size rather than // Unlike corresponding VM code, we operate on byte size rather than
// HeapWord size for convenience. // HeapWord size for convenience.
private static long numQuanta(long x, long y) {
return ((x+y-1)/y);
}
public static long adjustObjectSizeInBytes(long sizeInBytes) { public static long adjustObjectSizeInBytes(long sizeInBytes) {
return Oop.alignObjectSize(Math.max(sizeInBytes, MinChunkSizeInBytes)); return Oop.alignObjectSize(Math.max(sizeInBytes, MinChunkSizeInBytes));
} }
// FIXME: should I read this directly from VM?
private static long MinChunkSizeInBytes;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,11 +42,11 @@ public class Arguments {
} }
public static String getJVMFlags() { public static String getJVMFlags() {
return buildString(jvmFlagsField, jvmFlagsCount); return buildString(jvmFlagsArrayField, numJvmFlags);
} }
public static String getJVMArgs() { public static String getJVMArgs() {
return buildString(jvmArgsField, jvmArgsCount); return buildString(jvmArgsArrayField, numJvmArgs);
} }
public static String getJavaCommand() { public static String getJavaCommand() {
@ -56,20 +56,20 @@ public class Arguments {
// Internals only below this point // Internals only below this point
// Fields // Fields
private static AddressField jvmFlagsField; private static AddressField jvmFlagsArrayField;
private static AddressField jvmArgsField; private static AddressField jvmArgsArrayField;
private static AddressField javaCommandField; private static AddressField javaCommandField;
private static long jvmFlagsCount; private static long numJvmFlags;
private static long jvmArgsCount; private static long numJvmArgs;
private static synchronized void initialize(TypeDataBase db) { private static synchronized void initialize(TypeDataBase db) {
Type argumentsType = db.lookupType("Arguments"); Type argumentsType = db.lookupType("Arguments");
jvmFlagsField = argumentsType.getAddressField("_jvm_flags_array"); jvmFlagsArrayField = argumentsType.getAddressField("_jvm_flags_array");
jvmArgsField = argumentsType.getAddressField("_jvm_args_array"); jvmArgsArrayField = argumentsType.getAddressField("_jvm_args_array");
javaCommandField = argumentsType.getAddressField("_java_command"); javaCommandField = argumentsType.getAddressField("_java_command");
jvmArgsCount = argumentsType.getCIntegerField("_num_jvm_args").getValue(); numJvmArgs = argumentsType.getCIntegerField("_num_jvm_args").getValue();
jvmFlagsCount = argumentsType.getCIntegerField("_num_jvm_flags").getValue(); numJvmFlags = argumentsType.getCIntegerField("_num_jvm_flags").getValue();
} }
private static String buildString(AddressField arrayField, long count) { private static String buildString(AddressField arrayField, long count) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2011, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,19 +39,19 @@ public class CompilerThread extends JavaThread {
}); });
} }
private static AddressField _env_field; private static AddressField envField;
private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
Type type = db.lookupType("CompilerThread"); Type type = db.lookupType("CompilerThread");
_env_field = type.getAddressField("_env"); envField = type.getAddressField("_env");
} }
private ciEnv _env; private ciEnv _env;
public synchronized ciEnv env() { public synchronized ciEnv env() {
if (_env == null) { if (_env == null) {
Address v = _env_field.getValue(this.getAddress()); Address v = envField.getValue(this.getAddress());
if (v != null) { if (v != null) {
_env = new ciEnv(v); _env = new ciEnv(v);
} }

View File

@ -1,87 +0,0 @@
/*
* Copyright (c) 2002, 2012, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package sun.jvm.hotspot.runtime;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.types.*;
public class JNIid extends VMObject {
private static MetadataField holder;
private static AddressField next;
private static CIntegerField offset;
private static MetadataField resolvedMethod;
private static MetadataField resolvedReceiver;
private ObjectHeap heap;
static {
VM.registerVMInitializedObserver(new Observer() {
public void update(Observable o, Object data) {
initialize(VM.getVM().getTypeDataBase());
}
});
}
private static synchronized void initialize(TypeDataBase db) {
// FIXME: JNIid has been removed as part of redesign of JNI method,
// field ID generation. Please refer to src/share/vm/prims/jniId.hpp/.cpp
// For now, commenting out the below code.
/***********************************************************
Type type = db.lookupType("JNIid");
holder = type.getOopField("_holder");
next = type.getAddressField("_next");
offset = type.getCIntegerField("_offset");
resolvedMethod = type.getOopField("_resolved_method");
resolvedReceiver = type.getOopField("_resolved_receiver");
***********************************************************/
}
public JNIid(Address addr, ObjectHeap heap) {
super(addr);
this.heap = heap;
}
public JNIid next() {
Address nextAddr = next.getValue(addr);
if (nextAddr == null) {
return null;
}
return new JNIid(nextAddr, heap);
}
public Klass holder() { return (Klass) holder.getValue(addr); }
public int offset() { return (int) offset.getValue(addr); }
public Method method() {
return ((InstanceKlass) holder()).getMethods().at(offset());
}
public Method resolvedMethod() { return (Method)resolvedMethod.getValue(addr); }
public Klass resolvedReceiver() { return (Klass) resolvedReceiver.getValue(addr); }
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2016, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -105,6 +105,7 @@ public class VM {
private int heapOopSize; private int heapOopSize;
private int klassPtrSize; private int klassPtrSize;
private int oopSize; private int oopSize;
private final int IndexSetSize;
/** This is only present in a non-core build */ /** This is only present in a non-core build */
private CodeCache codeCache; private CodeCache codeCache;
/** This is only present in a C1 build */ /** This is only present in a C1 build */
@ -376,6 +377,7 @@ public class VM {
bytesPerWord = db.lookupIntConstant("BytesPerWord").intValue(); bytesPerWord = db.lookupIntConstant("BytesPerWord").intValue();
heapWordSize = db.lookupIntConstant("HeapWordSize").intValue(); heapWordSize = db.lookupIntConstant("HeapWordSize").intValue();
oopSize = db.lookupIntConstant("oopSize").intValue(); oopSize = db.lookupIntConstant("oopSize").intValue();
IndexSetSize = db.lookupIntConstant("CompactibleFreeListSpace::IndexSetSize").intValue();
intType = db.lookupType("int"); intType = db.lookupType("int");
uintType = db.lookupType("uint"); uintType = db.lookupType("uint");
@ -594,6 +596,10 @@ public class VM {
return heapOopSize; return heapOopSize;
} }
public int getIndexSetSize() {
return IndexSetSize;
}
public int getKlassPtrSize() { public int getKlassPtrSize() {
return klassPtrSize; return klassPtrSize;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -43,7 +43,7 @@ public class Win32AMD64JavaThreadPDAccess implements JavaThreadPDAccess {
private static AddressField osThreadField; private static AddressField osThreadField;
// Field from OSThread // Field from OSThread
private static Field osThreadThreadIdField; private static Field threadIdField;
// This is currently unneeded but is being kept in case we change // This is currently unneeded but is being kept in case we change
// the currentFrameGuess algorithm // the currentFrameGuess algorithm
@ -64,7 +64,7 @@ public class Win32AMD64JavaThreadPDAccess implements JavaThreadPDAccess {
osThreadField = type.getAddressField("_osthread"); osThreadField = type.getAddressField("_osthread");
type = db.lookupType("OSThread"); type = db.lookupType("OSThread");
osThreadThreadIdField = type.getField("_thread_id"); threadIdField = type.getField("_thread_id");
} }
public Address getLastJavaFP(Address addr) { public Address getLastJavaFP(Address addr) {
@ -130,7 +130,7 @@ public class Win32AMD64JavaThreadPDAccess implements JavaThreadPDAccess {
Address osThreadAddr = osThreadField.getValue(addr); Address osThreadAddr = osThreadField.getValue(addr);
// Get the address of the thread_id within the OSThread // Get the address of the thread_id within the OSThread
Address threadIdAddr = Address threadIdAddr =
osThreadAddr.addOffsetTo(osThreadThreadIdField.getOffset()); osThreadAddr.addOffsetTo(threadIdField.getOffset());
JVMDebugger debugger = VM.getVM().getDebugger(); JVMDebugger debugger = VM.getVM().getDebugger();
return debugger.getThreadForIdentifierAddress(threadIdAddr); return debugger.getThreadForIdentifierAddress(threadIdAddr);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2013, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,7 +42,7 @@ public class Win32X86JavaThreadPDAccess implements JavaThreadPDAccess {
private static AddressField osThreadField; private static AddressField osThreadField;
// Field from OSThread // Field from OSThread
private static Field osThreadThreadIdField; private static Field threadIdField;
// This is currently unneeded but is being kept in case we change // This is currently unneeded but is being kept in case we change
// the currentFrameGuess algorithm // the currentFrameGuess algorithm
@ -63,7 +63,7 @@ public class Win32X86JavaThreadPDAccess implements JavaThreadPDAccess {
osThreadField = type.getAddressField("_osthread"); osThreadField = type.getAddressField("_osthread");
type = db.lookupType("OSThread"); type = db.lookupType("OSThread");
osThreadThreadIdField = type.getField("_thread_id"); threadIdField = type.getField("_thread_id");
} }
public Address getLastJavaFP(Address addr) { public Address getLastJavaFP(Address addr) {
@ -129,7 +129,7 @@ public class Win32X86JavaThreadPDAccess implements JavaThreadPDAccess {
Address osThreadAddr = osThreadField.getValue(addr); Address osThreadAddr = osThreadField.getValue(addr);
// Get the address of the thread_id within the OSThread // Get the address of the thread_id within the OSThread
Address threadIdAddr = Address threadIdAddr =
osThreadAddr.addOffsetTo(osThreadThreadIdField.getOffset()); osThreadAddr.addOffsetTo(threadIdField.getOffset());
JVMDebugger debugger = VM.getVM().getDebugger(); JVMDebugger debugger = VM.getVM().getDebugger();
return debugger.getThreadForIdentifierAddress(threadIdAddr); return debugger.getThreadForIdentifierAddress(threadIdAddr);
} }