mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
Merge
This commit is contained in:
commit
3c3e60d5be
58 changed files with 705 additions and 903 deletions
|
@ -41,6 +41,7 @@
|
|||
#include "oops/method.hpp"
|
||||
#include "oops/symbol.hpp"
|
||||
#include "oops/typeArrayOop.hpp"
|
||||
#include "prims/jvmtiRedefineClassesTrace.hpp"
|
||||
#include "runtime/fieldDescriptor.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
|
@ -944,7 +945,7 @@ void java_lang_Thread::compute_offsets() {
|
|||
assert(_group_offset == 0, "offsets should be initialized only once");
|
||||
|
||||
Klass* k = SystemDictionary::Thread_klass();
|
||||
compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature());
|
||||
compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
|
||||
compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature());
|
||||
compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
|
||||
compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
|
||||
|
@ -974,15 +975,12 @@ void java_lang_Thread::set_thread(oop java_thread, JavaThread* thread) {
|
|||
}
|
||||
|
||||
|
||||
typeArrayOop java_lang_Thread::name(oop java_thread) {
|
||||
oop name = java_thread->obj_field(_name_offset);
|
||||
assert(name == NULL || (name->is_typeArray() && TypeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking");
|
||||
return typeArrayOop(name);
|
||||
oop java_lang_Thread::name(oop java_thread) {
|
||||
return java_thread->obj_field(_name_offset);
|
||||
}
|
||||
|
||||
|
||||
void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) {
|
||||
assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL");
|
||||
void java_lang_Thread::set_name(oop java_thread, oop name) {
|
||||
java_thread->obj_field_put(_name_offset, name);
|
||||
}
|
||||
|
||||
|
@ -2797,12 +2795,35 @@ Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
|
|||
return (Metadata*)mname->address_field(_vmtarget_offset);
|
||||
}
|
||||
|
||||
bool java_lang_invoke_MemberName::is_method(oop mname) {
|
||||
assert(is_instance(mname), "must be MemberName");
|
||||
return (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0;
|
||||
}
|
||||
|
||||
#if INCLUDE_JVMTI
|
||||
// Can be executed on VM thread only
|
||||
void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) {
|
||||
assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type");
|
||||
void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Method* old_method,
|
||||
Method* new_method, bool* trace_name_printed) {
|
||||
assert(is_method(mname), "wrong type");
|
||||
assert(Thread::current()->is_VM_thread(), "not VM thread");
|
||||
mname->address_field_put(_vmtarget_offset, (address)ref);
|
||||
|
||||
Method* target = (Method*)mname->address_field(_vmtarget_offset);
|
||||
if (target == old_method) {
|
||||
mname->address_field_put(_vmtarget_offset, (address)new_method);
|
||||
|
||||
if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
|
||||
if (!(*trace_name_printed)) {
|
||||
// RC_TRACE_MESG macro has an embedded ResourceMark
|
||||
RC_TRACE_MESG(("adjust: name=%s",
|
||||
old_method->method_holder()->external_name()));
|
||||
*trace_name_printed = true;
|
||||
}
|
||||
// RC_TRACE macro has an embedded ResourceMark
|
||||
RC_TRACE(0x00400000, ("MemberName method update: %s(%s)",
|
||||
new_method->name()->as_C_string(),
|
||||
new_method->signature()->as_C_string()));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // INCLUDE_JVMTI
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue