Mercurial > hg > graal-jvmci-8
changeset 23767:edf3f2eb3b00
Record metadata_Relocations for metadata references
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Wed, 28 Sep 2016 16:39:44 -0700 |
parents | d8107536634c |
children | be0d95e99204 |
files | src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp src/cpu/x86/vm/jvmciCodeInstaller_x86.cpp src/share/vm/jvmci/jvmciCodeInstaller.cpp src/share/vm/jvmci/jvmciCodeInstaller.hpp |
diffstat | 4 files changed, 13 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Wed Sep 28 19:27:23 2016 +0200 +++ b/src/cpu/sparc/vm/jvmciCodeInstaller_sparc.cpp Wed Sep 28 16:39:44 2016 -0700 @@ -69,7 +69,7 @@ if (HotSpotMetaspaceConstantImpl::compressed(constant)) { #ifdef _LP64 NativeMovConstReg32* move = nativeMovConstReg32_at(pc); - narrowKlass narrowOop = record_narrow_metadata_reference(constant, CHECK); + narrowKlass narrowOop = record_narrow_metadata_reference(_instructions, pc, constant, CHECK); move->set_data((intptr_t)narrowOop); TRACE_jvmci_3("relocating (narrow metaspace constant) at %p/%p", pc, narrowOop); #else @@ -77,7 +77,7 @@ #endif } else { NativeMovConstReg* move = nativeMovConstReg_at(pc); - void* reference = record_metadata_reference(constant, CHECK); + void* reference = record_metadata_reference(_instructions, pc, constant, CHECK); move->set_data((intptr_t)reference); TRACE_jvmci_3("relocating (metaspace constant) at %p/%p", pc, reference); }
--- a/src/cpu/x86/vm/jvmciCodeInstaller_x86.cpp Wed Sep 28 19:27:23 2016 +0200 +++ b/src/cpu/x86/vm/jvmciCodeInstaller_x86.cpp Wed Sep 28 16:39:44 2016 -0700 @@ -87,14 +87,14 @@ if (HotSpotMetaspaceConstantImpl::compressed(constant)) { #ifdef _LP64 address operand = Assembler::locate_operand(pc, Assembler::narrow_oop_operand); - *((narrowKlass*) operand) = record_narrow_metadata_reference(constant, CHECK); + *((narrowKlass*) operand) = record_narrow_metadata_reference(_instructions, operand, constant, CHECK); TRACE_jvmci_3("relocating (narrow metaspace constant) at %p/%p", pc, operand); #else JVMCI_ERROR("compressed Klass* on 32bit"); #endif } else { address operand = Assembler::locate_operand(pc, Assembler::imm_operand); - *((void**) operand) = record_metadata_reference(constant, CHECK); + *((void**) operand) = record_metadata_reference(_instructions, operand, constant, CHECK); TRACE_jvmci_3("relocating (metaspace constant) at %p/%p", pc, operand); } }
--- a/src/share/vm/jvmci/jvmciCodeInstaller.cpp Wed Sep 28 19:27:23 2016 +0200 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.cpp Wed Sep 28 16:39:44 2016 -0700 @@ -187,7 +187,7 @@ return map; } -void* CodeInstaller::record_metadata_reference(Handle constant, TRAPS) { + void* CodeInstaller::record_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS) { /* * This method needs to return a raw (untyped) pointer, since the value of a pointer to the base * class is in general not equal to the pointer of the subclass. When patching metaspace pointers, @@ -199,12 +199,14 @@ Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(obj)); assert(!HotSpotMetaspaceConstantImpl::compressed(constant), err_msg("unexpected compressed klass pointer %s @ " INTPTR_FORMAT, klass->name()->as_C_string(), p2i(klass))); int index = _oop_recorder->find_index(klass); + section->relocate(dest, metadata_Relocation::spec(index)); TRACE_jvmci_3("metadata[%d of %d] = %s", index, _oop_recorder->metadata_count(), klass->name()->as_C_string()); return klass; } else if (obj->is_a(HotSpotResolvedJavaMethodImpl::klass())) { Method* method = (Method*) (address) HotSpotResolvedJavaMethodImpl::metaspaceMethod(obj); assert(!HotSpotMetaspaceConstantImpl::compressed(constant), err_msg("unexpected compressed method pointer %s @ " INTPTR_FORMAT, method->name()->as_C_string(), p2i(method))); int index = _oop_recorder->find_index(method); + section->relocate(dest, metadata_Relocation::spec(index)); TRACE_jvmci_3("metadata[%d of %d] = %s", index, _oop_recorder->metadata_count(), method->name()->as_C_string()); return method; } else { @@ -213,7 +215,7 @@ } #ifdef _LP64 -narrowKlass CodeInstaller::record_narrow_metadata_reference(Handle constant, TRAPS) { +narrowKlass CodeInstaller::record_narrow_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS) { oop obj = HotSpotMetaspaceConstantImpl::metaspaceObject(constant); assert(HotSpotMetaspaceConstantImpl::compressed(constant), err_msg("unexpected uncompressed pointer")); @@ -223,6 +225,7 @@ Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(obj)); int index = _oop_recorder->find_index(klass); + section->relocate(dest, metadata_Relocation::spec(index)); TRACE_jvmci_3("narrowKlass[%d of %d] = %s", index, _oop_recorder->metadata_count(), klass->name()->as_C_string()); return Klass::encode_klass(klass); } @@ -649,12 +652,12 @@ if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) { if (HotSpotMetaspaceConstantImpl::compressed(constant)) { #ifdef _LP64 - *((narrowKlass*) dest) = record_narrow_metadata_reference(constant, CHECK_OK); + *((narrowKlass*) dest) = record_narrow_metadata_reference(_constants, dest, constant, CHECK_OK); #else JVMCI_ERROR_OK("unexpected compressed Klass* in 32-bit mode"); #endif } else { - *((void**) dest) = record_metadata_reference(constant, CHECK_OK); + *((void**) dest) = record_metadata_reference(_constants, dest, constant, CHECK_OK); } } else if (constant->is_a(HotSpotObjectConstantImpl::klass())) { Handle obj = HotSpotObjectConstantImpl::object(constant);
--- a/src/share/vm/jvmci/jvmciCodeInstaller.hpp Wed Sep 28 19:27:23 2016 +0200 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.hpp Wed Sep 28 16:39:44 2016 -0700 @@ -123,9 +123,9 @@ ScopeValue* get_scope_value(Handle value, BasicType type, GrowableArray<ScopeValue*>* objects, ScopeValue* &second, TRAPS); MonitorValue* get_monitor_value(Handle value, GrowableArray<ScopeValue*>* objects, TRAPS); - void* record_metadata_reference(Handle constant, TRAPS); + void* record_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS); #ifdef _LP64 - narrowKlass record_narrow_metadata_reference(Handle constant, TRAPS); + narrowKlass record_narrow_metadata_reference(CodeSection* section, address dest, Handle constant, TRAPS); #endif // extract the fields of the HotSpotCompiledCode