mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 22:34:27 +02:00
Merge
This commit is contained in:
commit
c2ed47a76e
20 changed files with 232 additions and 109 deletions
|
@ -1213,6 +1213,7 @@ public class CommandProcessor {
|
||||||
}
|
}
|
||||||
HotSpotTypeDataBase db = (HotSpotTypeDataBase)agent.getTypeDataBase();
|
HotSpotTypeDataBase db = (HotSpotTypeDataBase)agent.getTypeDataBase();
|
||||||
if (t.countTokens() == 1) {
|
if (t.countTokens() == 1) {
|
||||||
|
String name = t.nextToken();
|
||||||
out.println("intConstant " + name + " " + db.lookupIntConstant(name));
|
out.println("intConstant " + name + " " + db.lookupIntConstant(name));
|
||||||
} else if (t.countTokens() == 0) {
|
} else if (t.countTokens() == 0) {
|
||||||
Iterator i = db.getIntConstants();
|
Iterator i = db.getIntConstants();
|
||||||
|
@ -1235,6 +1236,7 @@ public class CommandProcessor {
|
||||||
}
|
}
|
||||||
HotSpotTypeDataBase db = (HotSpotTypeDataBase)agent.getTypeDataBase();
|
HotSpotTypeDataBase db = (HotSpotTypeDataBase)agent.getTypeDataBase();
|
||||||
if (t.countTokens() == 1) {
|
if (t.countTokens() == 1) {
|
||||||
|
String name = t.nextToken();
|
||||||
out.println("longConstant " + name + " " + db.lookupLongConstant(name));
|
out.println("longConstant " + name + " " + db.lookupLongConstant(name));
|
||||||
} else if (t.countTokens() == 0) {
|
} else if (t.countTokens() == 0) {
|
||||||
Iterator i = db.getLongConstants();
|
Iterator i = db.getLongConstants();
|
||||||
|
|
|
@ -4,9 +4,9 @@ It's main purpose is to recreate output similar to
|
||||||
requires a 1.5 JDK to build and simply typing make should build it.
|
requires a 1.5 JDK to build and simply typing make should build it.
|
||||||
|
|
||||||
It produces a jar file, logc.jar, that can be run on the
|
It produces a jar file, logc.jar, that can be run on the
|
||||||
hotspot.log from LogCompilation output like this:
|
HotSpot log (by default, hotspot_pid{pid}.log) from LogCompilation output like this:
|
||||||
|
|
||||||
java -jar logc.jar hotspot.log
|
java -jar logc.jar hotspot_pid1234.log
|
||||||
|
|
||||||
This will produce something like the normal PrintCompilation output.
|
This will produce something like the normal PrintCompilation output.
|
||||||
Adding the -i option with also report inlining like PrintInlining.
|
Adding the -i option with also report inlining like PrintInlining.
|
||||||
|
|
|
@ -1319,6 +1319,25 @@ static void clear_pending_exception_if_not_oom(TRAPS) {
|
||||||
// The CHECK at the caller will propagate the exception out
|
// The CHECK at the caller will propagate the exception out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the given method should be compiled when doing compile-the-world.
|
||||||
|
*
|
||||||
|
* TODO: This should be a private method in a CompileTheWorld class.
|
||||||
|
*/
|
||||||
|
static bool can_be_compiled(methodHandle m, int comp_level) {
|
||||||
|
assert(CompileTheWorld, "must be");
|
||||||
|
|
||||||
|
// It's not valid to compile a native wrapper for MethodHandle methods
|
||||||
|
// that take a MemberName appendix since the bytecode signature is not
|
||||||
|
// correct.
|
||||||
|
vmIntrinsics::ID iid = m->intrinsic_id();
|
||||||
|
if (MethodHandles::is_signature_polymorphic(iid) && MethodHandles::has_member_arg(iid)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CompilationPolicy::can_be_compiled(m, comp_level);
|
||||||
|
}
|
||||||
|
|
||||||
void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
||||||
int len = (int)strlen(name);
|
int len = (int)strlen(name);
|
||||||
if (len > 6 && strcmp(".class", name + len - 6) == 0) {
|
if (len > 6 && strcmp(".class", name + len - 6) == 0) {
|
||||||
|
@ -1362,8 +1381,7 @@ void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
||||||
int comp_level = CompilationPolicy::policy()->initial_compile_level();
|
int comp_level = CompilationPolicy::policy()->initial_compile_level();
|
||||||
for (int n = 0; n < k->methods()->length(); n++) {
|
for (int n = 0; n < k->methods()->length(); n++) {
|
||||||
methodHandle m (THREAD, k->methods()->at(n));
|
methodHandle m (THREAD, k->methods()->at(n));
|
||||||
if (CompilationPolicy::can_be_compiled(m, comp_level)) {
|
if (can_be_compiled(m, comp_level)) {
|
||||||
|
|
||||||
if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
|
if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
|
||||||
// Give sweeper a chance to keep up with CTW
|
// Give sweeper a chance to keep up with CTW
|
||||||
VM_ForceSafepoint op;
|
VM_ForceSafepoint op;
|
||||||
|
@ -1375,7 +1393,7 @@ void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
||||||
methodHandle(), 0, "CTW", THREAD);
|
methodHandle(), 0, "CTW", THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
clear_pending_exception_if_not_oom(CHECK);
|
clear_pending_exception_if_not_oom(CHECK);
|
||||||
tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name()->as_C_string());
|
tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name_and_sig_as_C_string());
|
||||||
} else {
|
} else {
|
||||||
_compile_the_world_method_counter++;
|
_compile_the_world_method_counter++;
|
||||||
}
|
}
|
||||||
|
@ -1391,11 +1409,13 @@ void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
|
||||||
methodHandle(), 0, "CTW", THREAD);
|
methodHandle(), 0, "CTW", THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
clear_pending_exception_if_not_oom(CHECK);
|
clear_pending_exception_if_not_oom(CHECK);
|
||||||
tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name()->as_C_string());
|
tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name_and_sig_as_C_string());
|
||||||
} else {
|
} else {
|
||||||
_compile_the_world_method_counter++;
|
_compile_the_world_method_counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
tty->print_cr("CompileTheWorld (%d) : Skipping method: %s", _compile_the_world_class_counter, m->name_and_sig_as_C_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
nmethod* nm = m->code();
|
nmethod* nm = m->code();
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
|
|
||||||
class PtrQueueSet;
|
class PtrQueueSet;
|
||||||
class PtrQueue VALUE_OBJ_CLASS_SPEC {
|
class PtrQueue VALUE_OBJ_CLASS_SPEC {
|
||||||
|
friend class VMStructs;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// The ptr queue set to which this queue belongs.
|
// The ptr queue set to which this queue belongs.
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#define VM_STRUCTS_G1(nonstatic_field, static_field) \
|
#define VM_STRUCTS_G1(nonstatic_field, static_field) \
|
||||||
\
|
\
|
||||||
static_field(HeapRegion, GrainBytes, size_t) \
|
static_field(HeapRegion, GrainBytes, size_t) \
|
||||||
|
static_field(HeapRegion, LogOfHRGrainBytes, int) \
|
||||||
\
|
\
|
||||||
nonstatic_field(HeapRegionSeq, _regions, HeapRegion**) \
|
nonstatic_field(HeapRegionSeq, _regions, HeapRegion**) \
|
||||||
nonstatic_field(HeapRegionSeq, _length, uint) \
|
nonstatic_field(HeapRegionSeq, _length, uint) \
|
||||||
|
|
|
@ -602,7 +602,7 @@ oop Universe::gen_out_of_memory_error(oop default_err) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static intptr_t non_oop_bits = 0;
|
intptr_t Universe::_non_oop_bits = 0;
|
||||||
|
|
||||||
void* Universe::non_oop_word() {
|
void* Universe::non_oop_word() {
|
||||||
// Neither the high bits nor the low bits of this value is allowed
|
// Neither the high bits nor the low bits of this value is allowed
|
||||||
|
@ -616,11 +616,11 @@ void* Universe::non_oop_word() {
|
||||||
// Using the OS-supplied non-memory-address word (usually 0 or -1)
|
// Using the OS-supplied non-memory-address word (usually 0 or -1)
|
||||||
// will take care of the high bits, however many there are.
|
// will take care of the high bits, however many there are.
|
||||||
|
|
||||||
if (non_oop_bits == 0) {
|
if (_non_oop_bits == 0) {
|
||||||
non_oop_bits = (intptr_t)os::non_memory_address_word() | 1;
|
_non_oop_bits = (intptr_t)os::non_memory_address_word() | 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void*)non_oop_bits;
|
return (void*)_non_oop_bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
jint universe_init() {
|
jint universe_init() {
|
||||||
|
|
|
@ -179,6 +179,8 @@ class Universe: AllStatic {
|
||||||
// The particular choice of collected heap.
|
// The particular choice of collected heap.
|
||||||
static CollectedHeap* _collectedHeap;
|
static CollectedHeap* _collectedHeap;
|
||||||
|
|
||||||
|
static intptr_t _non_oop_bits;
|
||||||
|
|
||||||
// For UseCompressedOops.
|
// For UseCompressedOops.
|
||||||
static struct NarrowPtrStruct _narrow_oop;
|
static struct NarrowPtrStruct _narrow_oop;
|
||||||
// For UseCompressedKlassPointers.
|
// For UseCompressedKlassPointers.
|
||||||
|
|
|
@ -150,6 +150,8 @@ class klassVtable : public ResourceObj {
|
||||||
// from_compiled_code_entry_point -> nmethod entry point
|
// from_compiled_code_entry_point -> nmethod entry point
|
||||||
// from_interpreter_entry_point -> i2cadapter
|
// from_interpreter_entry_point -> i2cadapter
|
||||||
class vtableEntry VALUE_OBJ_CLASS_SPEC {
|
class vtableEntry VALUE_OBJ_CLASS_SPEC {
|
||||||
|
friend class VMStructs;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// size in words
|
// size in words
|
||||||
static int size() {
|
static int size() {
|
||||||
|
|
|
@ -72,6 +72,8 @@ class ProfileData;
|
||||||
//
|
//
|
||||||
// Overlay for generic profiling data.
|
// Overlay for generic profiling data.
|
||||||
class DataLayout VALUE_OBJ_CLASS_SPEC {
|
class DataLayout VALUE_OBJ_CLASS_SPEC {
|
||||||
|
friend class VMStructs;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Every data layout begins with a header. This header
|
// Every data layout begins with a header. This header
|
||||||
// contains a tag, which is used to indicate the size/layout
|
// contains a tag, which is used to indicate the size/layout
|
||||||
|
|
|
@ -122,40 +122,23 @@ double LRG::score() const {
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRG_List::LRG_List( uint max ) : _cnt(max), _max(max), _lidxs(NEW_RESOURCE_ARRAY(uint,max)) {
|
|
||||||
memset( _lidxs, 0, sizeof(uint)*max );
|
|
||||||
}
|
|
||||||
|
|
||||||
void LRG_List::extend( uint nidx, uint lidx ) {
|
|
||||||
_nesting.check();
|
|
||||||
if( nidx >= _max ) {
|
|
||||||
uint size = 16;
|
|
||||||
while( size <= nidx ) size <<=1;
|
|
||||||
_lidxs = REALLOC_RESOURCE_ARRAY( uint, _lidxs, _max, size );
|
|
||||||
_max = size;
|
|
||||||
}
|
|
||||||
while( _cnt <= nidx )
|
|
||||||
_lidxs[_cnt++] = 0;
|
|
||||||
_lidxs[nidx] = lidx;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUMBUCKS 3
|
#define NUMBUCKS 3
|
||||||
|
|
||||||
// Straight out of Tarjan's union-find algorithm
|
// Straight out of Tarjan's union-find algorithm
|
||||||
uint LiveRangeMap::find_compress(uint lrg) {
|
uint LiveRangeMap::find_compress(uint lrg) {
|
||||||
uint cur = lrg;
|
uint cur = lrg;
|
||||||
uint next = _uf_map[cur];
|
uint next = _uf_map.at(cur);
|
||||||
while (next != cur) { // Scan chain of equivalences
|
while (next != cur) { // Scan chain of equivalences
|
||||||
assert( next < cur, "always union smaller");
|
assert( next < cur, "always union smaller");
|
||||||
cur = next; // until find a fixed-point
|
cur = next; // until find a fixed-point
|
||||||
next = _uf_map[cur];
|
next = _uf_map.at(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Core of union-find algorithm: update chain of
|
// Core of union-find algorithm: update chain of
|
||||||
// equivalences to be equal to the root.
|
// equivalences to be equal to the root.
|
||||||
while (lrg != next) {
|
while (lrg != next) {
|
||||||
uint tmp = _uf_map[lrg];
|
uint tmp = _uf_map.at(lrg);
|
||||||
_uf_map.map(lrg, next);
|
_uf_map.at_put(lrg, next);
|
||||||
lrg = tmp;
|
lrg = tmp;
|
||||||
}
|
}
|
||||||
return lrg;
|
return lrg;
|
||||||
|
@ -165,10 +148,10 @@ uint LiveRangeMap::find_compress(uint lrg) {
|
||||||
void LiveRangeMap::reset_uf_map(uint max_lrg_id) {
|
void LiveRangeMap::reset_uf_map(uint max_lrg_id) {
|
||||||
_max_lrg_id= max_lrg_id;
|
_max_lrg_id= max_lrg_id;
|
||||||
// Force the Union-Find mapping to be at least this large
|
// Force the Union-Find mapping to be at least this large
|
||||||
_uf_map.extend(_max_lrg_id, 0);
|
_uf_map.at_put_grow(_max_lrg_id, 0);
|
||||||
// Initialize it to be the ID mapping.
|
// Initialize it to be the ID mapping.
|
||||||
for (uint i = 0; i < _max_lrg_id; ++i) {
|
for (uint i = 0; i < _max_lrg_id; ++i) {
|
||||||
_uf_map.map(i, i);
|
_uf_map.at_put(i, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,12 +159,12 @@ void LiveRangeMap::reset_uf_map(uint max_lrg_id) {
|
||||||
// the Union-Find mapping after this call.
|
// the Union-Find mapping after this call.
|
||||||
void LiveRangeMap::compress_uf_map_for_nodes() {
|
void LiveRangeMap::compress_uf_map_for_nodes() {
|
||||||
// For all Nodes, compress mapping
|
// For all Nodes, compress mapping
|
||||||
uint unique = _names.Size();
|
uint unique = _names.length();
|
||||||
for (uint i = 0; i < unique; ++i) {
|
for (uint i = 0; i < unique; ++i) {
|
||||||
uint lrg = _names[i];
|
uint lrg = _names.at(i);
|
||||||
uint compressed_lrg = find(lrg);
|
uint compressed_lrg = find(lrg);
|
||||||
if (lrg != compressed_lrg) {
|
if (lrg != compressed_lrg) {
|
||||||
_names.map(i, compressed_lrg);
|
_names.at_put(i, compressed_lrg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,11 +181,11 @@ uint LiveRangeMap::find_const(uint lrg) const {
|
||||||
return lrg;
|
return lrg;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint next = _uf_map[lrg];
|
uint next = _uf_map.at(lrg);
|
||||||
while (next != lrg) { // Scan chain of equivalences
|
while (next != lrg) { // Scan chain of equivalences
|
||||||
assert(next < lrg, "always union smaller");
|
assert(next < lrg, "always union smaller");
|
||||||
lrg = next; // until find a fixed-point
|
lrg = next; // until find a fixed-point
|
||||||
next = _uf_map[lrg];
|
next = _uf_map.at(lrg);
|
||||||
}
|
}
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
@ -215,7 +198,7 @@ PhaseChaitin::PhaseChaitin(uint unique, PhaseCFG &cfg, Matcher &matcher)
|
||||||
NULL
|
NULL
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
, _lrg_map(unique)
|
, _lrg_map(Thread::current()->resource_area(), unique)
|
||||||
, _live(0)
|
, _live(0)
|
||||||
, _spilled_once(Thread::current()->resource_area())
|
, _spilled_once(Thread::current()->resource_area())
|
||||||
, _spilled_twice(Thread::current()->resource_area())
|
, _spilled_twice(Thread::current()->resource_area())
|
||||||
|
@ -692,6 +675,7 @@ void PhaseChaitin::de_ssa() {
|
||||||
_lrg_map.map(n->_idx, rm.is_NotEmpty() ? lr_counter++ : 0);
|
_lrg_map.map(n->_idx, rm.is_NotEmpty() ? lr_counter++ : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset the Union-Find mapping to be identity
|
// Reset the Union-Find mapping to be identity
|
||||||
_lrg_map.reset_uf_map(lr_counter);
|
_lrg_map.reset_uf_map(lr_counter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -283,8 +283,8 @@ private:
|
||||||
|
|
||||||
// Straight out of Tarjan's union-find algorithm
|
// Straight out of Tarjan's union-find algorithm
|
||||||
uint find_compress(const Node *node) {
|
uint find_compress(const Node *node) {
|
||||||
uint lrg_id = find_compress(_names[node->_idx]);
|
uint lrg_id = find_compress(_names.at(node->_idx));
|
||||||
_names.map(node->_idx, lrg_id);
|
_names.at_put(node->_idx, lrg_id);
|
||||||
return lrg_id;
|
return lrg_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,40 +305,40 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
uint size() const {
|
uint size() const {
|
||||||
return _names.Size();
|
return _names.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint live_range_id(uint idx) const {
|
uint live_range_id(uint idx) const {
|
||||||
return _names[idx];
|
return _names.at(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint live_range_id(const Node *node) const {
|
uint live_range_id(const Node *node) const {
|
||||||
return _names[node->_idx];
|
return _names.at(node->_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint uf_live_range_id(uint lrg_id) const {
|
uint uf_live_range_id(uint lrg_id) const {
|
||||||
return _uf_map[lrg_id];
|
return _uf_map.at(lrg_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void map(uint idx, uint lrg_id) {
|
void map(uint idx, uint lrg_id) {
|
||||||
_names.map(idx, lrg_id);
|
_names.at_put(idx, lrg_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uf_map(uint dst_lrg_id, uint src_lrg_id) {
|
void uf_map(uint dst_lrg_id, uint src_lrg_id) {
|
||||||
_uf_map.map(dst_lrg_id, src_lrg_id);
|
_uf_map.at_put(dst_lrg_id, src_lrg_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void extend(uint idx, uint lrg_id) {
|
void extend(uint idx, uint lrg_id) {
|
||||||
_names.extend(idx, lrg_id);
|
_names.at_put_grow(idx, lrg_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uf_extend(uint dst_lrg_id, uint src_lrg_id) {
|
void uf_extend(uint dst_lrg_id, uint src_lrg_id) {
|
||||||
_uf_map.extend(dst_lrg_id, src_lrg_id);
|
_uf_map.at_put_grow(dst_lrg_id, src_lrg_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveRangeMap(uint unique)
|
LiveRangeMap(Arena* arena, uint unique)
|
||||||
: _names(unique)
|
: _names(arena, unique, unique, 0)
|
||||||
, _uf_map(unique)
|
, _uf_map(arena, unique, unique, 0)
|
||||||
, _max_lrg_id(0) {}
|
, _max_lrg_id(0) {}
|
||||||
|
|
||||||
uint find_id( const Node *n ) {
|
uint find_id( const Node *n ) {
|
||||||
|
@ -355,14 +355,14 @@ public:
|
||||||
void compress_uf_map_for_nodes();
|
void compress_uf_map_for_nodes();
|
||||||
|
|
||||||
uint find(uint lidx) {
|
uint find(uint lidx) {
|
||||||
uint uf_lidx = _uf_map[lidx];
|
uint uf_lidx = _uf_map.at(lidx);
|
||||||
return (uf_lidx == lidx) ? uf_lidx : find_compress(lidx);
|
return (uf_lidx == lidx) ? uf_lidx : find_compress(lidx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert a Node into a Live Range Index - a lidx
|
// Convert a Node into a Live Range Index - a lidx
|
||||||
uint find(const Node *node) {
|
uint find(const Node *node) {
|
||||||
uint lidx = live_range_id(node);
|
uint lidx = live_range_id(node);
|
||||||
uint uf_lidx = _uf_map[lidx];
|
uint uf_lidx = _uf_map.at(lidx);
|
||||||
return (uf_lidx == lidx) ? uf_lidx : find_compress(node);
|
return (uf_lidx == lidx) ? uf_lidx : find_compress(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,10 +371,10 @@ public:
|
||||||
|
|
||||||
// Like Find above, but no path compress, so bad asymptotic behavior
|
// Like Find above, but no path compress, so bad asymptotic behavior
|
||||||
uint find_const(const Node *node) const {
|
uint find_const(const Node *node) const {
|
||||||
if(node->_idx >= _names.Size()) {
|
if(node->_idx >= (uint)_names.length()) {
|
||||||
return 0; // not mapped, usual for debug dump
|
return 0; // not mapped, usual for debug dump
|
||||||
}
|
}
|
||||||
return find_const(_names[node->_idx]);
|
return find_const(_names.at(node->_idx));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
|
|
||||||
class LoopTree;
|
class LoopTree;
|
||||||
class LRG;
|
class LRG;
|
||||||
class LRG_List;
|
|
||||||
class Matcher;
|
class Matcher;
|
||||||
class PhaseIFG;
|
class PhaseIFG;
|
||||||
class PhaseCFG;
|
class PhaseCFG;
|
||||||
|
|
|
@ -91,7 +91,7 @@ void PhaseLive::compute(uint maxlrg) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint r = _names[n->_idx];
|
uint r = _names.at(n->_idx);
|
||||||
assert(!def_outside->member(r), "Use of external LRG overlaps the same LRG defined in this block");
|
assert(!def_outside->member(r), "Use of external LRG overlaps the same LRG defined in this block");
|
||||||
def->insert( r );
|
def->insert( r );
|
||||||
use->remove( r );
|
use->remove( r );
|
||||||
|
@ -100,7 +100,7 @@ void PhaseLive::compute(uint maxlrg) {
|
||||||
Node *nk = n->in(k);
|
Node *nk = n->in(k);
|
||||||
uint nkidx = nk->_idx;
|
uint nkidx = nk->_idx;
|
||||||
if (_cfg.get_block_for_node(nk) != block) {
|
if (_cfg.get_block_for_node(nk) != block) {
|
||||||
uint u = _names[nkidx];
|
uint u = _names.at(nkidx);
|
||||||
use->insert(u);
|
use->insert(u);
|
||||||
DEBUG_ONLY(def_outside->insert(u);)
|
DEBUG_ONLY(def_outside->insert(u);)
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ void PhaseLive::compute(uint maxlrg) {
|
||||||
#endif
|
#endif
|
||||||
// Remove anything defined by Phis and the block start instruction
|
// Remove anything defined by Phis and the block start instruction
|
||||||
for (uint k = i; k > 0; k--) {
|
for (uint k = i; k > 0; k--) {
|
||||||
uint r = _names[block->get_node(k - 1)->_idx];
|
uint r = _names.at(block->get_node(k - 1)->_idx);
|
||||||
def->insert(r);
|
def->insert(r);
|
||||||
use->remove(r);
|
use->remove(r);
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ void PhaseLive::compute(uint maxlrg) {
|
||||||
|
|
||||||
// PhiNode uses go in the live-out set of prior blocks.
|
// PhiNode uses go in the live-out set of prior blocks.
|
||||||
for (uint k = i; k > 0; k--) {
|
for (uint k = i; k > 0; k--) {
|
||||||
add_liveout(p, _names[block->get_node(k-1)->in(l)->_idx], first_pass);
|
add_liveout(p, _names.at(block->get_node(k-1)->in(l)->_idx), first_pass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
freeset(block);
|
freeset(block);
|
||||||
|
@ -256,7 +256,7 @@ void PhaseLive::dump( const Block *b ) const {
|
||||||
tty->print("LiveOut: "); _live[b->_pre_order-1].dump();
|
tty->print("LiveOut: "); _live[b->_pre_order-1].dump();
|
||||||
uint cnt = b->number_of_nodes();
|
uint cnt = b->number_of_nodes();
|
||||||
for( uint i=0; i<cnt; i++ ) {
|
for( uint i=0; i<cnt; i++ ) {
|
||||||
tty->print("L%d/", _names[b->get_node(i)->_idx] );
|
tty->print("L%d/", _names.at(b->get_node(i)->_idx));
|
||||||
b->get_node(i)->dump();
|
b->get_node(i)->dump();
|
||||||
}
|
}
|
||||||
tty->print("\n");
|
tty->print("\n");
|
||||||
|
|
|
@ -40,27 +40,7 @@ class IndexSet;
|
||||||
//------------------------------LRG_List---------------------------------------
|
//------------------------------LRG_List---------------------------------------
|
||||||
// Map Node indices to Live RanGe indices.
|
// Map Node indices to Live RanGe indices.
|
||||||
// Array lookup in the optimized case.
|
// Array lookup in the optimized case.
|
||||||
class LRG_List : public ResourceObj {
|
typedef GrowableArray<uint> LRG_List;
|
||||||
friend class VMStructs;
|
|
||||||
uint _cnt, _max;
|
|
||||||
uint* _lidxs;
|
|
||||||
ReallocMark _nesting; // assertion check for reallocations
|
|
||||||
public:
|
|
||||||
LRG_List( uint max );
|
|
||||||
|
|
||||||
uint lookup( uint nidx ) const {
|
|
||||||
return _lidxs[nidx];
|
|
||||||
}
|
|
||||||
uint operator[] (uint nidx) const { return lookup(nidx); }
|
|
||||||
|
|
||||||
void map( uint nidx, uint lidx ) {
|
|
||||||
assert( nidx < _cnt, "oob" );
|
|
||||||
_lidxs[nidx] = lidx;
|
|
||||||
}
|
|
||||||
void extend( uint nidx, uint lidx );
|
|
||||||
|
|
||||||
uint Size() const { return _cnt; }
|
|
||||||
};
|
|
||||||
|
|
||||||
//------------------------------PhaseLive--------------------------------------
|
//------------------------------PhaseLive--------------------------------------
|
||||||
// Compute live-in/live-out
|
// Compute live-in/live-out
|
||||||
|
|
|
@ -3326,6 +3326,33 @@ static char* get_shared_archive_path() {
|
||||||
return shared_archive_path;
|
return shared_archive_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef PRODUCT
|
||||||
|
// Determine whether LogVMOutput should be implicitly turned on.
|
||||||
|
static bool use_vm_log() {
|
||||||
|
if (LogCompilation || !FLAG_IS_DEFAULT(LogFile) ||
|
||||||
|
PrintCompilation || PrintInlining || PrintDependencies || PrintNativeNMethods ||
|
||||||
|
PrintDebugInfo || PrintRelocations || PrintNMethods || PrintExceptionHandlers ||
|
||||||
|
PrintAssembly || TraceDeoptimization || TraceDependencies ||
|
||||||
|
(VerifyDependencies && FLAG_IS_CMDLINE(VerifyDependencies))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef COMPILER1
|
||||||
|
if (PrintC1Statistics) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif // COMPILER1
|
||||||
|
|
||||||
|
#ifdef COMPILER2
|
||||||
|
if (PrintOptoAssembly || PrintOptoStatistics) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif // COMPILER2
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif // PRODUCT
|
||||||
|
|
||||||
// Parse entry point called from JNI_CreateJavaVM
|
// Parse entry point called from JNI_CreateJavaVM
|
||||||
|
|
||||||
jint Arguments::parse(const JavaVMInitArgs* args) {
|
jint Arguments::parse(const JavaVMInitArgs* args) {
|
||||||
|
@ -3617,7 +3644,13 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
|
||||||
NmethodSweepFraction = 1;
|
NmethodSweepFraction = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
if (!LogVMOutput && FLAG_IS_DEFAULT(LogVMOutput)) {
|
||||||
|
if (use_vm_log()) {
|
||||||
|
LogVMOutput = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // PRODUCT
|
||||||
|
|
||||||
if (PrintCommandLineFlags) {
|
if (PrintCommandLineFlags) {
|
||||||
CommandLineFlags::printSetFlags(tty);
|
CommandLineFlags::printSetFlags(tty);
|
||||||
|
|
|
@ -1751,7 +1751,7 @@ int Deoptimization::trap_state_set_recompiled(int trap_state, bool z) {
|
||||||
else return trap_state & ~DS_RECOMPILE_BIT;
|
else return trap_state & ~DS_RECOMPILE_BIT;
|
||||||
}
|
}
|
||||||
//---------------------------format_trap_state---------------------------------
|
//---------------------------format_trap_state---------------------------------
|
||||||
// This is used for debugging and diagnostics, including hotspot.log output.
|
// This is used for debugging and diagnostics, including LogFile output.
|
||||||
const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
|
const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
|
||||||
int trap_state) {
|
int trap_state) {
|
||||||
DeoptReason reason = trap_state_reason(trap_state);
|
DeoptReason reason = trap_state_reason(trap_state);
|
||||||
|
@ -1828,7 +1828,7 @@ const char* Deoptimization::trap_action_name(int action) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is used for debugging and diagnostics, including hotspot.log output.
|
// This is used for debugging and diagnostics, including LogFile output.
|
||||||
const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
|
const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
|
||||||
int trap_request) {
|
int trap_request) {
|
||||||
jint unloaded_class_index = trap_request_index(trap_request);
|
jint unloaded_class_index = trap_request_index(trap_request);
|
||||||
|
|
|
@ -880,7 +880,7 @@ class CommandLineFlags {
|
||||||
"stay alive at the expense of JVM performance") \
|
"stay alive at the expense of JVM performance") \
|
||||||
\
|
\
|
||||||
diagnostic(bool, LogCompilation, false, \
|
diagnostic(bool, LogCompilation, false, \
|
||||||
"Log compilation activity in detail to hotspot.log or LogFile") \
|
"Log compilation activity in detail to LogFile") \
|
||||||
\
|
\
|
||||||
product(bool, PrintCompilation, false, \
|
product(bool, PrintCompilation, false, \
|
||||||
"Print compilations") \
|
"Print compilations") \
|
||||||
|
@ -2498,16 +2498,17 @@ class CommandLineFlags {
|
||||||
"Print all VM flags with default values and descriptions and exit")\
|
"Print all VM flags with default values and descriptions and exit")\
|
||||||
\
|
\
|
||||||
diagnostic(bool, SerializeVMOutput, true, \
|
diagnostic(bool, SerializeVMOutput, true, \
|
||||||
"Use a mutex to serialize output to tty and hotspot.log") \
|
"Use a mutex to serialize output to tty and LogFile") \
|
||||||
\
|
\
|
||||||
diagnostic(bool, DisplayVMOutput, true, \
|
diagnostic(bool, DisplayVMOutput, true, \
|
||||||
"Display all VM output on the tty, independently of LogVMOutput") \
|
"Display all VM output on the tty, independently of LogVMOutput") \
|
||||||
\
|
\
|
||||||
diagnostic(bool, LogVMOutput, trueInDebug, \
|
diagnostic(bool, LogVMOutput, false, \
|
||||||
"Save VM output to hotspot.log, or to LogFile") \
|
"Save VM output to LogFile") \
|
||||||
\
|
\
|
||||||
diagnostic(ccstr, LogFile, NULL, \
|
diagnostic(ccstr, LogFile, NULL, \
|
||||||
"If LogVMOutput is on, save VM output to this file [hotspot.log]") \
|
"If LogVMOutput or LogCompilation is on, save VM output to " \
|
||||||
|
"this file [default: ./hotspot_pid%p.log] (%p replaced with pid)") \
|
||||||
\
|
\
|
||||||
product(ccstr, ErrorFile, NULL, \
|
product(ccstr, ErrorFile, NULL, \
|
||||||
"If an error occurs, save the error data to this file " \
|
"If an error occurs, save the error data to this file " \
|
||||||
|
|
|
@ -91,6 +91,8 @@ const bool ExecMem = true;
|
||||||
typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread);
|
typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread);
|
||||||
|
|
||||||
class os: AllStatic {
|
class os: AllStatic {
|
||||||
|
friend class VMStructs;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum { page_sizes_max = 9 }; // Size of _page_sizes array (8 plus a sentinel)
|
enum { page_sizes_max = 9 }; // Size of _page_sizes array (8 plus a sentinel)
|
||||||
|
|
||||||
|
|
|
@ -330,11 +330,13 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(Klass, _java_mirror, oop) \
|
nonstatic_field(Klass, _java_mirror, oop) \
|
||||||
nonstatic_field(Klass, _modifier_flags, jint) \
|
nonstatic_field(Klass, _modifier_flags, jint) \
|
||||||
nonstatic_field(Klass, _super, Klass*) \
|
nonstatic_field(Klass, _super, Klass*) \
|
||||||
|
nonstatic_field(Klass, _subklass, Klass*) \
|
||||||
nonstatic_field(Klass, _layout_helper, jint) \
|
nonstatic_field(Klass, _layout_helper, jint) \
|
||||||
nonstatic_field(Klass, _name, Symbol*) \
|
nonstatic_field(Klass, _name, Symbol*) \
|
||||||
nonstatic_field(Klass, _access_flags, AccessFlags) \
|
nonstatic_field(Klass, _access_flags, AccessFlags) \
|
||||||
nonstatic_field(Klass, _subklass, Klass*) \
|
nonstatic_field(Klass, _prototype_header, markOop) \
|
||||||
nonstatic_field(Klass, _next_sibling, Klass*) \
|
nonstatic_field(Klass, _next_sibling, Klass*) \
|
||||||
|
nonstatic_field(vtableEntry, _method, Method*) \
|
||||||
nonstatic_field(MethodData, _size, int) \
|
nonstatic_field(MethodData, _size, int) \
|
||||||
nonstatic_field(MethodData, _method, Method*) \
|
nonstatic_field(MethodData, _method, Method*) \
|
||||||
nonstatic_field(MethodData, _data_size, int) \
|
nonstatic_field(MethodData, _data_size, int) \
|
||||||
|
@ -342,10 +344,15 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(MethodData, _nof_decompiles, uint) \
|
nonstatic_field(MethodData, _nof_decompiles, uint) \
|
||||||
nonstatic_field(MethodData, _nof_overflow_recompiles, uint) \
|
nonstatic_field(MethodData, _nof_overflow_recompiles, uint) \
|
||||||
nonstatic_field(MethodData, _nof_overflow_traps, uint) \
|
nonstatic_field(MethodData, _nof_overflow_traps, uint) \
|
||||||
|
nonstatic_field(MethodData, _trap_hist._array[0], u1) \
|
||||||
nonstatic_field(MethodData, _eflags, intx) \
|
nonstatic_field(MethodData, _eflags, intx) \
|
||||||
nonstatic_field(MethodData, _arg_local, intx) \
|
nonstatic_field(MethodData, _arg_local, intx) \
|
||||||
nonstatic_field(MethodData, _arg_stack, intx) \
|
nonstatic_field(MethodData, _arg_stack, intx) \
|
||||||
nonstatic_field(MethodData, _arg_returned, intx) \
|
nonstatic_field(MethodData, _arg_returned, intx) \
|
||||||
|
nonstatic_field(DataLayout, _header._struct._tag, u1) \
|
||||||
|
nonstatic_field(DataLayout, _header._struct._flags, u1) \
|
||||||
|
nonstatic_field(DataLayout, _header._struct._bci, u2) \
|
||||||
|
nonstatic_field(DataLayout, _cells[0], intptr_t) \
|
||||||
nonstatic_field(MethodCounters, _interpreter_invocation_count, int) \
|
nonstatic_field(MethodCounters, _interpreter_invocation_count, int) \
|
||||||
nonstatic_field(MethodCounters, _interpreter_throwout_count, u2) \
|
nonstatic_field(MethodCounters, _interpreter_throwout_count, u2) \
|
||||||
nonstatic_field(MethodCounters, _number_of_breakpoints, u2) \
|
nonstatic_field(MethodCounters, _number_of_breakpoints, u2) \
|
||||||
|
@ -357,6 +364,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(Method, _access_flags, AccessFlags) \
|
nonstatic_field(Method, _access_flags, AccessFlags) \
|
||||||
nonstatic_field(Method, _vtable_index, int) \
|
nonstatic_field(Method, _vtable_index, int) \
|
||||||
nonstatic_field(Method, _method_size, u2) \
|
nonstatic_field(Method, _method_size, u2) \
|
||||||
|
nonstatic_field(Method, _intrinsic_id, u1) \
|
||||||
nonproduct_nonstatic_field(Method, _compiled_invocation_count, int) \
|
nonproduct_nonstatic_field(Method, _compiled_invocation_count, int) \
|
||||||
volatile_nonstatic_field(Method, _code, nmethod*) \
|
volatile_nonstatic_field(Method, _code, nmethod*) \
|
||||||
nonstatic_field(Method, _i2i_entry, address) \
|
nonstatic_field(Method, _i2i_entry, address) \
|
||||||
|
@ -443,12 +451,19 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
static_field(Universe, _bootstrapping, bool) \
|
static_field(Universe, _bootstrapping, bool) \
|
||||||
static_field(Universe, _fully_initialized, bool) \
|
static_field(Universe, _fully_initialized, bool) \
|
||||||
static_field(Universe, _verify_count, int) \
|
static_field(Universe, _verify_count, int) \
|
||||||
|
static_field(Universe, _non_oop_bits, intptr_t) \
|
||||||
static_field(Universe, _narrow_oop._base, address) \
|
static_field(Universe, _narrow_oop._base, address) \
|
||||||
static_field(Universe, _narrow_oop._shift, int) \
|
static_field(Universe, _narrow_oop._shift, int) \
|
||||||
static_field(Universe, _narrow_oop._use_implicit_null_checks, bool) \
|
static_field(Universe, _narrow_oop._use_implicit_null_checks, bool) \
|
||||||
static_field(Universe, _narrow_klass._base, address) \
|
static_field(Universe, _narrow_klass._base, address) \
|
||||||
static_field(Universe, _narrow_klass._shift, int) \
|
static_field(Universe, _narrow_klass._shift, int) \
|
||||||
\
|
\
|
||||||
|
/******/ \
|
||||||
|
/* os */ \
|
||||||
|
/******/ \
|
||||||
|
\
|
||||||
|
static_field(os, _polling_page, address) \
|
||||||
|
\
|
||||||
/**********************************************************************************/ \
|
/**********************************************************************************/ \
|
||||||
/* Generation and Space hierarchies */ \
|
/* Generation and Space hierarchies */ \
|
||||||
/**********************************************************************************/ \
|
/**********************************************************************************/ \
|
||||||
|
@ -456,6 +471,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
unchecked_nonstatic_field(ageTable, sizes, sizeof(ageTable::sizes)) \
|
unchecked_nonstatic_field(ageTable, sizes, sizeof(ageTable::sizes)) \
|
||||||
\
|
\
|
||||||
nonstatic_field(BarrierSet, _max_covered_regions, int) \
|
nonstatic_field(BarrierSet, _max_covered_regions, int) \
|
||||||
|
nonstatic_field(BarrierSet, _kind, BarrierSet::Name) \
|
||||||
nonstatic_field(BlockOffsetTable, _bottom, HeapWord*) \
|
nonstatic_field(BlockOffsetTable, _bottom, HeapWord*) \
|
||||||
nonstatic_field(BlockOffsetTable, _end, HeapWord*) \
|
nonstatic_field(BlockOffsetTable, _end, HeapWord*) \
|
||||||
\
|
\
|
||||||
|
@ -495,6 +511,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(CollectedHeap, _barrier_set, BarrierSet*) \
|
nonstatic_field(CollectedHeap, _barrier_set, BarrierSet*) \
|
||||||
nonstatic_field(CollectedHeap, _defer_initial_card_mark, bool) \
|
nonstatic_field(CollectedHeap, _defer_initial_card_mark, bool) \
|
||||||
nonstatic_field(CollectedHeap, _is_gc_active, bool) \
|
nonstatic_field(CollectedHeap, _is_gc_active, bool) \
|
||||||
|
nonstatic_field(CollectedHeap, _total_collections, unsigned int) \
|
||||||
nonstatic_field(CompactibleSpace, _compaction_top, HeapWord*) \
|
nonstatic_field(CompactibleSpace, _compaction_top, HeapWord*) \
|
||||||
nonstatic_field(CompactibleSpace, _first_dead, HeapWord*) \
|
nonstatic_field(CompactibleSpace, _first_dead, HeapWord*) \
|
||||||
nonstatic_field(CompactibleSpace, _end_of_live, HeapWord*) \
|
nonstatic_field(CompactibleSpace, _end_of_live, HeapWord*) \
|
||||||
|
@ -552,6 +569,11 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(ThreadLocalAllocBuffer, _desired_size, size_t) \
|
nonstatic_field(ThreadLocalAllocBuffer, _desired_size, size_t) \
|
||||||
nonstatic_field(ThreadLocalAllocBuffer, _refill_waste_limit, size_t) \
|
nonstatic_field(ThreadLocalAllocBuffer, _refill_waste_limit, size_t) \
|
||||||
static_field(ThreadLocalAllocBuffer, _target_refills, unsigned) \
|
static_field(ThreadLocalAllocBuffer, _target_refills, unsigned) \
|
||||||
|
nonstatic_field(ThreadLocalAllocBuffer, _number_of_refills, unsigned) \
|
||||||
|
nonstatic_field(ThreadLocalAllocBuffer, _fast_refill_waste, unsigned) \
|
||||||
|
nonstatic_field(ThreadLocalAllocBuffer, _slow_refill_waste, unsigned) \
|
||||||
|
nonstatic_field(ThreadLocalAllocBuffer, _gc_waste, unsigned) \
|
||||||
|
nonstatic_field(ThreadLocalAllocBuffer, _slow_allocations, unsigned) \
|
||||||
nonstatic_field(VirtualSpace, _low_boundary, char*) \
|
nonstatic_field(VirtualSpace, _low_boundary, char*) \
|
||||||
nonstatic_field(VirtualSpace, _high_boundary, char*) \
|
nonstatic_field(VirtualSpace, _high_boundary, char*) \
|
||||||
nonstatic_field(VirtualSpace, _low, char*) \
|
nonstatic_field(VirtualSpace, _low, char*) \
|
||||||
|
@ -713,6 +735,13 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
\
|
\
|
||||||
static_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \
|
static_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \
|
||||||
\
|
\
|
||||||
|
/**********/ \
|
||||||
|
/* Arrays */ \
|
||||||
|
/**********/ \
|
||||||
|
\
|
||||||
|
nonstatic_field(Array<Klass*>, _length, int) \
|
||||||
|
nonstatic_field(Array<Klass*>, _data[0], Klass*) \
|
||||||
|
\
|
||||||
/*******************/ \
|
/*******************/ \
|
||||||
/* GrowableArrays */ \
|
/* GrowableArrays */ \
|
||||||
/*******************/ \
|
/*******************/ \
|
||||||
|
@ -763,7 +792,20 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
/* StubRoutines (NOTE: incomplete) */ \
|
/* StubRoutines (NOTE: incomplete) */ \
|
||||||
/***********************************/ \
|
/***********************************/ \
|
||||||
\
|
\
|
||||||
|
static_field(StubRoutines, _verify_oop_count, jint) \
|
||||||
static_field(StubRoutines, _call_stub_return_address, address) \
|
static_field(StubRoutines, _call_stub_return_address, address) \
|
||||||
|
static_field(StubRoutines, _aescrypt_encryptBlock, address) \
|
||||||
|
static_field(StubRoutines, _aescrypt_decryptBlock, address) \
|
||||||
|
static_field(StubRoutines, _cipherBlockChaining_encryptAESCrypt, address) \
|
||||||
|
static_field(StubRoutines, _cipherBlockChaining_decryptAESCrypt, address) \
|
||||||
|
static_field(StubRoutines, _updateBytesCRC32, address) \
|
||||||
|
static_field(StubRoutines, _crc_table_adr, address) \
|
||||||
|
\
|
||||||
|
/*****************/ \
|
||||||
|
/* SharedRuntime */ \
|
||||||
|
/*****************/ \
|
||||||
|
\
|
||||||
|
static_field(SharedRuntime, _ic_miss_blob, RuntimeStub*) \
|
||||||
\
|
\
|
||||||
/***************************************/ \
|
/***************************************/ \
|
||||||
/* PcDesc and other compiled code info */ \
|
/* PcDesc and other compiled code info */ \
|
||||||
|
@ -853,6 +895,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
volatile_nonstatic_field(Thread, _suspend_flags, uint32_t) \
|
volatile_nonstatic_field(Thread, _suspend_flags, uint32_t) \
|
||||||
nonstatic_field(Thread, _active_handles, JNIHandleBlock*) \
|
nonstatic_field(Thread, _active_handles, JNIHandleBlock*) \
|
||||||
nonstatic_field(Thread, _tlab, ThreadLocalAllocBuffer) \
|
nonstatic_field(Thread, _tlab, ThreadLocalAllocBuffer) \
|
||||||
|
nonstatic_field(Thread, _allocated_bytes, jlong) \
|
||||||
nonstatic_field(Thread, _current_pending_monitor, ObjectMonitor*) \
|
nonstatic_field(Thread, _current_pending_monitor, ObjectMonitor*) \
|
||||||
nonstatic_field(Thread, _current_pending_monitor_is_from_java, bool) \
|
nonstatic_field(Thread, _current_pending_monitor_is_from_java, bool) \
|
||||||
nonstatic_field(Thread, _current_waiting_monitor, ObjectMonitor*) \
|
nonstatic_field(Thread, _current_waiting_monitor, ObjectMonitor*) \
|
||||||
|
@ -866,6 +909,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(JavaThread, _pending_async_exception, oop) \
|
nonstatic_field(JavaThread, _pending_async_exception, oop) \
|
||||||
volatile_nonstatic_field(JavaThread, _exception_oop, oop) \
|
volatile_nonstatic_field(JavaThread, _exception_oop, oop) \
|
||||||
volatile_nonstatic_field(JavaThread, _exception_pc, address) \
|
volatile_nonstatic_field(JavaThread, _exception_pc, address) \
|
||||||
|
volatile_nonstatic_field(JavaThread, _is_method_handle_return, int) \
|
||||||
nonstatic_field(JavaThread, _is_compiling, bool) \
|
nonstatic_field(JavaThread, _is_compiling, bool) \
|
||||||
nonstatic_field(JavaThread, _special_runtime_exit_condition, JavaThread::AsyncRequests) \
|
nonstatic_field(JavaThread, _special_runtime_exit_condition, JavaThread::AsyncRequests) \
|
||||||
nonstatic_field(JavaThread, _saved_exception_pc, address) \
|
nonstatic_field(JavaThread, _saved_exception_pc, address) \
|
||||||
|
@ -875,6 +919,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(JavaThread, _stack_size, size_t) \
|
nonstatic_field(JavaThread, _stack_size, size_t) \
|
||||||
nonstatic_field(JavaThread, _vframe_array_head, vframeArray*) \
|
nonstatic_field(JavaThread, _vframe_array_head, vframeArray*) \
|
||||||
nonstatic_field(JavaThread, _vframe_array_last, vframeArray*) \
|
nonstatic_field(JavaThread, _vframe_array_last, vframeArray*) \
|
||||||
|
nonstatic_field(JavaThread, _satb_mark_queue, ObjPtrQueue) \
|
||||||
|
nonstatic_field(JavaThread, _dirty_card_queue, DirtyCardQueue) \
|
||||||
nonstatic_field(Thread, _resource_area, ResourceArea*) \
|
nonstatic_field(Thread, _resource_area, ResourceArea*) \
|
||||||
nonstatic_field(CompilerThread, _env, ciEnv*) \
|
nonstatic_field(CompilerThread, _env, ciEnv*) \
|
||||||
\
|
\
|
||||||
|
@ -1219,6 +1265,10 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
nonstatic_field(vframeArrayElement, _bci, int) \
|
nonstatic_field(vframeArrayElement, _bci, int) \
|
||||||
nonstatic_field(vframeArrayElement, _method, Method*) \
|
nonstatic_field(vframeArrayElement, _method, Method*) \
|
||||||
\
|
\
|
||||||
|
nonstatic_field(PtrQueue, _active, bool) \
|
||||||
|
nonstatic_field(PtrQueue, _buf, void**) \
|
||||||
|
nonstatic_field(PtrQueue, _index, size_t) \
|
||||||
|
\
|
||||||
nonstatic_field(AccessFlags, _flags, jint) \
|
nonstatic_field(AccessFlags, _flags, jint) \
|
||||||
nonstatic_field(elapsedTimer, _counter, jlong) \
|
nonstatic_field(elapsedTimer, _counter, jlong) \
|
||||||
nonstatic_field(elapsedTimer, _active, bool) \
|
nonstatic_field(elapsedTimer, _active, bool) \
|
||||||
|
@ -1381,10 +1431,13 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_type(MethodCounters, MetaspaceObj) \
|
declare_type(MethodCounters, MetaspaceObj) \
|
||||||
declare_type(ConstMethod, MetaspaceObj) \
|
declare_type(ConstMethod, MetaspaceObj) \
|
||||||
\
|
\
|
||||||
|
declare_toplevel_type(vtableEntry) \
|
||||||
|
\
|
||||||
declare_toplevel_type(Symbol) \
|
declare_toplevel_type(Symbol) \
|
||||||
declare_toplevel_type(Symbol*) \
|
declare_toplevel_type(Symbol*) \
|
||||||
declare_toplevel_type(volatile Metadata*) \
|
declare_toplevel_type(volatile Metadata*) \
|
||||||
\
|
\
|
||||||
|
declare_toplevel_type(DataLayout) \
|
||||||
declare_toplevel_type(nmethodBucket) \
|
declare_toplevel_type(nmethodBucket) \
|
||||||
\
|
\
|
||||||
/********/ \
|
/********/ \
|
||||||
|
@ -1432,6 +1485,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_type(ModRefBarrierSet, BarrierSet) \
|
declare_type(ModRefBarrierSet, BarrierSet) \
|
||||||
declare_type(CardTableModRefBS, ModRefBarrierSet) \
|
declare_type(CardTableModRefBS, ModRefBarrierSet) \
|
||||||
declare_type(CardTableModRefBSForCTRS, CardTableModRefBS) \
|
declare_type(CardTableModRefBSForCTRS, CardTableModRefBS) \
|
||||||
|
declare_toplevel_type(BarrierSet::Name) \
|
||||||
declare_toplevel_type(GenRemSet) \
|
declare_toplevel_type(GenRemSet) \
|
||||||
declare_type(CardTableRS, GenRemSet) \
|
declare_type(CardTableRS, GenRemSet) \
|
||||||
declare_toplevel_type(BlockOffsetSharedArray) \
|
declare_toplevel_type(BlockOffsetSharedArray) \
|
||||||
|
@ -1450,6 +1504,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_toplevel_type(ThreadLocalAllocBuffer) \
|
declare_toplevel_type(ThreadLocalAllocBuffer) \
|
||||||
declare_toplevel_type(VirtualSpace) \
|
declare_toplevel_type(VirtualSpace) \
|
||||||
declare_toplevel_type(WaterMark) \
|
declare_toplevel_type(WaterMark) \
|
||||||
|
declare_toplevel_type(ObjPtrQueue) \
|
||||||
|
declare_toplevel_type(DirtyCardQueue) \
|
||||||
\
|
\
|
||||||
/* Pointers to Garbage Collection types */ \
|
/* Pointers to Garbage Collection types */ \
|
||||||
\
|
\
|
||||||
|
@ -2068,6 +2124,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_toplevel_type(StubQueue*) \
|
declare_toplevel_type(StubQueue*) \
|
||||||
declare_toplevel_type(Thread*) \
|
declare_toplevel_type(Thread*) \
|
||||||
declare_toplevel_type(Universe) \
|
declare_toplevel_type(Universe) \
|
||||||
|
declare_toplevel_type(os) \
|
||||||
declare_toplevel_type(vframeArray) \
|
declare_toplevel_type(vframeArray) \
|
||||||
declare_toplevel_type(vframeArrayElement) \
|
declare_toplevel_type(vframeArrayElement) \
|
||||||
declare_toplevel_type(Annotations*) \
|
declare_toplevel_type(Annotations*) \
|
||||||
|
@ -2076,6 +2133,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
/* Miscellaneous types */ \
|
/* Miscellaneous types */ \
|
||||||
/***************/ \
|
/***************/ \
|
||||||
\
|
\
|
||||||
|
declare_toplevel_type(PtrQueue) \
|
||||||
|
\
|
||||||
/* freelist */ \
|
/* freelist */ \
|
||||||
declare_toplevel_type(FreeChunk*) \
|
declare_toplevel_type(FreeChunk*) \
|
||||||
declare_toplevel_type(Metablock*) \
|
declare_toplevel_type(Metablock*) \
|
||||||
|
@ -2106,6 +2165,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
/* Useful globals */ \
|
/* Useful globals */ \
|
||||||
/******************/ \
|
/******************/ \
|
||||||
\
|
\
|
||||||
|
declare_preprocessor_constant("ASSERT", DEBUG_ONLY(1) NOT_DEBUG(0)) \
|
||||||
\
|
\
|
||||||
/**************/ \
|
/**************/ \
|
||||||
/* Stack bias */ \
|
/* Stack bias */ \
|
||||||
|
@ -2122,6 +2182,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(BytesPerWord) \
|
declare_constant(BytesPerWord) \
|
||||||
declare_constant(BytesPerLong) \
|
declare_constant(BytesPerLong) \
|
||||||
\
|
\
|
||||||
|
declare_constant(LogKlassAlignmentInBytes) \
|
||||||
|
\
|
||||||
/********************************************/ \
|
/********************************************/ \
|
||||||
/* Generation and Space Hierarchy Constants */ \
|
/* Generation and Space Hierarchy Constants */ \
|
||||||
/********************************************/ \
|
/********************************************/ \
|
||||||
|
@ -2130,6 +2192,9 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
\
|
\
|
||||||
declare_constant(BarrierSet::ModRef) \
|
declare_constant(BarrierSet::ModRef) \
|
||||||
declare_constant(BarrierSet::CardTableModRef) \
|
declare_constant(BarrierSet::CardTableModRef) \
|
||||||
|
declare_constant(BarrierSet::CardTableExtension) \
|
||||||
|
declare_constant(BarrierSet::G1SATBCT) \
|
||||||
|
declare_constant(BarrierSet::G1SATBCTLogging) \
|
||||||
declare_constant(BarrierSet::Other) \
|
declare_constant(BarrierSet::Other) \
|
||||||
\
|
\
|
||||||
declare_constant(BlockOffsetSharedArray::LogN) \
|
declare_constant(BlockOffsetSharedArray::LogN) \
|
||||||
|
@ -2248,8 +2313,11 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(Klass::_primary_super_limit) \
|
declare_constant(Klass::_primary_super_limit) \
|
||||||
declare_constant(Klass::_lh_instance_slow_path_bit) \
|
declare_constant(Klass::_lh_instance_slow_path_bit) \
|
||||||
declare_constant(Klass::_lh_log2_element_size_shift) \
|
declare_constant(Klass::_lh_log2_element_size_shift) \
|
||||||
|
declare_constant(Klass::_lh_log2_element_size_mask) \
|
||||||
declare_constant(Klass::_lh_element_type_shift) \
|
declare_constant(Klass::_lh_element_type_shift) \
|
||||||
|
declare_constant(Klass::_lh_element_type_mask) \
|
||||||
declare_constant(Klass::_lh_header_size_shift) \
|
declare_constant(Klass::_lh_header_size_shift) \
|
||||||
|
declare_constant(Klass::_lh_header_size_mask) \
|
||||||
declare_constant(Klass::_lh_array_tag_shift) \
|
declare_constant(Klass::_lh_array_tag_shift) \
|
||||||
declare_constant(Klass::_lh_array_tag_type_value) \
|
declare_constant(Klass::_lh_array_tag_type_value) \
|
||||||
declare_constant(Klass::_lh_array_tag_obj_value) \
|
declare_constant(Klass::_lh_array_tag_obj_value) \
|
||||||
|
@ -2268,6 +2336,12 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(ConstMethod::_has_default_annotations) \
|
declare_constant(ConstMethod::_has_default_annotations) \
|
||||||
declare_constant(ConstMethod::_has_type_annotations) \
|
declare_constant(ConstMethod::_has_type_annotations) \
|
||||||
\
|
\
|
||||||
|
/**************/ \
|
||||||
|
/* DataLayout */ \
|
||||||
|
/**************/ \
|
||||||
|
\
|
||||||
|
declare_constant(DataLayout::cell_size) \
|
||||||
|
\
|
||||||
/*************************************/ \
|
/*************************************/ \
|
||||||
/* InstanceKlass enum */ \
|
/* InstanceKlass enum */ \
|
||||||
/*************************************/ \
|
/*************************************/ \
|
||||||
|
@ -2402,6 +2476,13 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(Deoptimization::Reason_LIMIT) \
|
declare_constant(Deoptimization::Reason_LIMIT) \
|
||||||
declare_constant(Deoptimization::Reason_RECORDED_LIMIT) \
|
declare_constant(Deoptimization::Reason_RECORDED_LIMIT) \
|
||||||
\
|
\
|
||||||
|
declare_constant(Deoptimization::Action_none) \
|
||||||
|
declare_constant(Deoptimization::Action_maybe_recompile) \
|
||||||
|
declare_constant(Deoptimization::Action_reinterpret) \
|
||||||
|
declare_constant(Deoptimization::Action_make_not_entrant) \
|
||||||
|
declare_constant(Deoptimization::Action_make_not_compilable) \
|
||||||
|
declare_constant(Deoptimization::Action_LIMIT) \
|
||||||
|
\
|
||||||
/*********************/ \
|
/*********************/ \
|
||||||
/* Matcher (C2 only) */ \
|
/* Matcher (C2 only) */ \
|
||||||
/*********************/ \
|
/*********************/ \
|
||||||
|
@ -2468,6 +2549,16 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(vmSymbols::FIRST_SID) \
|
declare_constant(vmSymbols::FIRST_SID) \
|
||||||
declare_constant(vmSymbols::SID_LIMIT) \
|
declare_constant(vmSymbols::SID_LIMIT) \
|
||||||
\
|
\
|
||||||
|
/****************/ \
|
||||||
|
/* vmIntrinsics */ \
|
||||||
|
/****************/ \
|
||||||
|
\
|
||||||
|
declare_constant(vmIntrinsics::_invokeBasic) \
|
||||||
|
declare_constant(vmIntrinsics::_linkToVirtual) \
|
||||||
|
declare_constant(vmIntrinsics::_linkToStatic) \
|
||||||
|
declare_constant(vmIntrinsics::_linkToSpecial) \
|
||||||
|
declare_constant(vmIntrinsics::_linkToInterface) \
|
||||||
|
\
|
||||||
/********************************/ \
|
/********************************/ \
|
||||||
/* Calling convention constants */ \
|
/* Calling convention constants */ \
|
||||||
/********************************/ \
|
/********************************/ \
|
||||||
|
@ -2515,6 +2606,8 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
|
||||||
declare_constant(markOopDesc::biased_lock_bit_in_place) \
|
declare_constant(markOopDesc::biased_lock_bit_in_place) \
|
||||||
declare_constant(markOopDesc::age_mask) \
|
declare_constant(markOopDesc::age_mask) \
|
||||||
declare_constant(markOopDesc::age_mask_in_place) \
|
declare_constant(markOopDesc::age_mask_in_place) \
|
||||||
|
declare_constant(markOopDesc::epoch_mask) \
|
||||||
|
declare_constant(markOopDesc::epoch_mask_in_place) \
|
||||||
declare_constant(markOopDesc::hash_mask) \
|
declare_constant(markOopDesc::hash_mask) \
|
||||||
declare_constant(markOopDesc::hash_mask_in_place) \
|
declare_constant(markOopDesc::hash_mask_in_place) \
|
||||||
declare_constant(markOopDesc::biased_lock_alignment) \
|
declare_constant(markOopDesc::biased_lock_alignment) \
|
||||||
|
|
|
@ -592,7 +592,7 @@ static const char* make_log_name(const char* log_name, const char* force_directo
|
||||||
|
|
||||||
void defaultStream::init_log() {
|
void defaultStream::init_log() {
|
||||||
// %%% Need a MutexLocker?
|
// %%% Need a MutexLocker?
|
||||||
const char* log_name = LogFile != NULL ? LogFile : "hotspot.log";
|
const char* log_name = LogFile != NULL ? LogFile : "hotspot_pid%p.log";
|
||||||
const char* try_name = make_log_name(log_name, NULL);
|
const char* try_name = make_log_name(log_name, NULL);
|
||||||
fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||||||
if (!file->is_open()) {
|
if (!file->is_open()) {
|
||||||
|
@ -603,14 +603,15 @@ void defaultStream::init_log() {
|
||||||
// Note: This feature is for maintainer use only. No need for L10N.
|
// Note: This feature is for maintainer use only. No need for L10N.
|
||||||
jio_print(warnbuf);
|
jio_print(warnbuf);
|
||||||
FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||||||
try_name = make_log_name("hs_pid%p.log", os::get_temp_directory());
|
try_name = make_log_name(log_name, os::get_temp_directory());
|
||||||
jio_snprintf(warnbuf, sizeof(warnbuf),
|
jio_snprintf(warnbuf, sizeof(warnbuf),
|
||||||
"Warning: Forcing option -XX:LogFile=%s\n", try_name);
|
"Warning: Forcing option -XX:LogFile=%s\n", try_name);
|
||||||
jio_print(warnbuf);
|
jio_print(warnbuf);
|
||||||
delete file;
|
delete file;
|
||||||
file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name);
|
||||||
FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
|
||||||
}
|
}
|
||||||
|
FREE_C_HEAP_ARRAY(char, try_name, mtInternal);
|
||||||
|
|
||||||
if (file->is_open()) {
|
if (file->is_open()) {
|
||||||
_log_file = file;
|
_log_file = file;
|
||||||
xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
|
xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue