mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 02:24:40 +02:00
8059340: ConstantPool::_resolved_references is missing in heap dump
Reviewed-by: sspitsyn, stefank, twisti
This commit is contained in:
parent
e5a92a9fb9
commit
3f096651f3
17 changed files with 101 additions and 77 deletions
|
@ -482,6 +482,14 @@ void InterpreterMacroAssembler::get_cache_and_index_and_bytecode_at_bcp(Register
|
|||
andl(bytecode, ConstantPoolCacheEntry::bytecode_1_mask);
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::get_resolved_references(Register reg) {
|
||||
get_constant_pool(reg);
|
||||
movptr(reg, Address(reg, ConstantPool::pool_holder_offset_in_bytes()));
|
||||
movptr(reg, Address(reg, Klass::java_mirror_offset()));
|
||||
assert(java_lang_Class::resolved_references_offset_in_bytes() > 0, "");
|
||||
load_heap_oop(reg, Address(reg, java_lang_Class::resolved_references_offset_in_bytes()));
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache,
|
||||
Register tmp,
|
||||
int bcp_offset,
|
||||
|
@ -499,20 +507,16 @@ void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache,
|
|||
addptr(cache, tmp); // construct pointer to cache entry
|
||||
}
|
||||
|
||||
// Load object from cpool->resolved_references(index)
|
||||
void InterpreterMacroAssembler::load_resolved_reference_at_index(
|
||||
Register result, Register index) {
|
||||
// Load object from cpool->pool_holder->mirror->resolved_references(index)
|
||||
void InterpreterMacroAssembler::load_resolved_reference_at_index(Register result, Register index) {
|
||||
assert_different_registers(result, index);
|
||||
// convert from field index to resolved_references() index and from
|
||||
// word index to byte offset. Since this is a java object, it can be compressed
|
||||
Register tmp = index; // reuse
|
||||
shll(tmp, LogBytesPerHeapOop);
|
||||
|
||||
get_constant_pool(result);
|
||||
// load pointer for resolved_references[] objArray
|
||||
movptr(result, Address(result, ConstantPool::resolved_references_offset_in_bytes()));
|
||||
// JNIHandles::resolve(obj);
|
||||
movptr(result, Address(result, 0));
|
||||
get_resolved_references(result);
|
||||
// Add in the index
|
||||
addptr(result, tmp);
|
||||
load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue