< prev index next >
src/hotspot/share/classfile/javaClasses.cpp
Print this page
rev 50307 : [mq]: cont
@@ -1563,10 +1563,11 @@
int java_lang_Thread::_eetop_offset = 0;
int java_lang_Thread::_daemon_offset = 0;
int java_lang_Thread::_stillborn_offset = 0;
int java_lang_Thread::_stackSize_offset = 0;
int java_lang_Thread::_tid_offset = 0;
+int java_lang_Thread::_continuation_offset = 0;
int java_lang_Thread::_thread_status_offset = 0;
int java_lang_Thread::_park_blocker_offset = 0;
int java_lang_Thread::_park_event_offset = 0 ;
#define THREAD_FIELDS_DO(macro) \
@@ -1580,11 +1581,12 @@
macro(_stillborn_offset, k, "stillborn", bool_signature, false); \
macro(_stackSize_offset, k, "stackSize", long_signature, false); \
macro(_tid_offset, k, "tid", long_signature, false); \
macro(_thread_status_offset, k, "threadStatus", int_signature, false); \
macro(_park_blocker_offset, k, "parkBlocker", object_signature, false); \
- macro(_park_event_offset, k, "nativeParkEventPointer", long_signature, false)
+ macro(_park_event_offset, k, "nativeParkEventPointer", long_signature, false); \
+ macro(_continuation_offset, k, "cont", continuation_signature, false)
void java_lang_Thread::compute_offsets() {
assert(_group_offset == 0, "offsets should be initialized only once");
InstanceKlass* k = SystemDictionary::Thread_klass();
@@ -1716,10 +1718,18 @@
} else {
return 0;
}
}
+oop java_lang_Thread::continuation(oop java_thread) {
+ return java_thread->obj_field(_continuation_offset);
+}
+
+void java_lang_Thread::set_continuation(oop java_thread, oop continuation) {
+ return java_thread->obj_field_put(_continuation_offset, continuation);
+}
+
oop java_lang_Thread::park_blocker(oop java_thread) {
assert(JDK_Version::current().supports_thread_park_blocker() &&
_park_blocker_offset != 0, "Must support parkBlocker field");
if (_park_blocker_offset > 0) {
@@ -4227,10 +4237,26 @@
int java_lang_ref_Reference::queue_offset;
int java_lang_ref_Reference::next_offset;
int java_lang_ref_Reference::discovered_offset;
int java_lang_ref_SoftReference::timestamp_offset;
int java_lang_ref_SoftReference::static_clock_offset;
+int java_lang_Continuation::scope_offset;
+int java_lang_Continuation::target_offset;
+int java_lang_Continuation::stack_offset;
+int java_lang_Continuation::maxSize_offset;
+int java_lang_Continuation::numFrames_offset;
+int java_lang_Continuation::numInterpretedFrames_offset;
+int java_lang_Continuation::refStack_offset;
+int java_lang_Continuation::parent_offset;
+int java_lang_Continuation::entrySP_offset;
+int java_lang_Continuation::entryFP_offset;
+int java_lang_Continuation::entryPC_offset;
+int java_lang_Continuation::fp_offset;
+int java_lang_Continuation::sp_offset;
+int java_lang_Continuation::pc_offset;
+int java_lang_Continuation::refSP_offset;
+int java_lang_Continuation::flags_offset;
int java_lang_ClassLoader::parent_offset;
int java_lang_System::static_in_offset;
int java_lang_System::static_out_offset;
int java_lang_System::static_err_offset;
int java_lang_System::static_security_offset;
@@ -4374,10 +4400,38 @@
void java_lang_AssertionStatusDirectives::set_deflt(oop o, bool val) {
o->bool_field_put(deflt_offset, val);
}
+// Support for java.lang.Continuation
+
+void java_lang_Continuation::compute_offsets() {
+ InstanceKlass* k = SystemDictionary::Continuation_klass();
+ compute_offset(scope_offset, k, vmSymbols::scope_name(), vmSymbols::continuationscope_signature());
+ compute_offset(target_offset, k, vmSymbols::target_name(), vmSymbols::runnable_signature());
+ compute_offset(parent_offset, k, vmSymbols::parent_name(), vmSymbols::continuation_signature());
+ compute_offset(stack_offset, k, vmSymbols::stack_name(), vmSymbols::int_array_signature());
+ compute_offset(maxSize_offset, k, vmSymbols::maxSize_name(), vmSymbols::int_signature());
+ compute_offset(refStack_offset, k, vmSymbols::refStack_name(), vmSymbols::object_array_signature());
+ compute_offset(entrySP_offset, k, vmSymbols::entrySP_name(), vmSymbols::long_signature());
+ compute_offset(entryFP_offset, k, vmSymbols::entryFP_name(), vmSymbols::long_signature());
+ compute_offset(entryPC_offset, k, vmSymbols::entryPC_name(), vmSymbols::long_signature());
+ compute_offset(fp_offset, k, vmSymbols::fp_name(), vmSymbols::long_signature());
+ compute_offset(sp_offset, k, vmSymbols::sp_name(), vmSymbols::int_signature());
+ compute_offset(pc_offset, k, vmSymbols::pc_name(), vmSymbols::long_signature());
+ compute_offset(refSP_offset, k, vmSymbols::refSP_name(), vmSymbols::int_signature());
+ compute_offset(flags_offset, k, vmSymbols::flags_name(), vmSymbols::byte_signature());
+ compute_offset(numFrames_offset, k, vmSymbols::numFrames_name(), vmSymbols::short_signature());
+ compute_offset(numInterpretedFrames_offset, k, vmSymbols::numInterpretedFrames_name(), vmSymbols::short_signature());
+}
+
+bool java_lang_Continuation::on_local_stack(oop ref, address adr) {
+ arrayOop s = stack(ref);
+ void* base = s->base(T_INT);
+ return adr >= base && (char*)adr < ((char*)base + (s->length() * 4));
+}
+
// Support for intrinsification of java.nio.Buffer.checkIndex
int java_nio_Buffer::limit_offset() {
return _limit_offset;
}
@@ -4427,10 +4481,20 @@
// java_lang_ref_Reference
java_lang_ref_Reference::referent_offset = member_offset(java_lang_ref_Reference::hc_referent_offset);
java_lang_ref_Reference::queue_offset = member_offset(java_lang_ref_Reference::hc_queue_offset);
java_lang_ref_Reference::next_offset = member_offset(java_lang_ref_Reference::hc_next_offset);
java_lang_ref_Reference::discovered_offset = member_offset(java_lang_ref_Reference::hc_discovered_offset);
+
+ // // java_lang_Continuation Class
+ // java_lang_Continuation::target_offset = member_offset(java_lang_Continuation::hc_target_offset);
+ // java_lang_Continuation::parent_offset = member_offset(java_lang_Continuation::hc_parent_offset);
+ // java_lang_Continuation::entrySP_offset = member_offset(java_lang_Continuation::hc_entrySP_offset);
+ // java_lang_Continuation::entryFP_offset = member_offset(java_lang_Continuation::hc_entryFP_offset);
+ // java_lang_Continuation::entryPC_offset = member_offset(java_lang_Continuation::hc_entryPC_offset);
+ // java_lang_Continuation::stack_offset = member_offset(java_lang_Continuation::hc_stack_offset);
+ // java_lang_Continuation::lastFP_offset = member_offset(java_lang_Continuation::hc_lastFP_offset);
+ // java_lang_Continuation::lastSP_offset = member_offset(java_lang_Continuation::hc_lastSP_offset);
}
// Compute non-hard-coded field offsets of all the classes in this file
void JavaClasses::compute_offsets() {
@@ -4469,10 +4533,11 @@
java_lang_reflect_Parameter::compute_offsets();
java_lang_Module::compute_offsets();
java_lang_StackTraceElement::compute_offsets();
java_lang_StackFrameInfo::compute_offsets();
java_lang_LiveStackFrameInfo::compute_offsets();
+ java_lang_Continuation::compute_offsets();
// generated interpreter code wants to know about the offsets we just computed:
AbstractAssembler::update_delayed_values();
}
@@ -4534,10 +4599,21 @@
CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;");
CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;");
// Fake field
//CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
+ // java.lang.Continuation
+
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, target, "Ljava/lang/Runnable;");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, stack, "[I");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, parent, "Ljava/lang/Continuation;");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, entrySP, "J");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, entryFP, "J");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, entryPC, "J");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, lastFP, "I");
+ // CHECK_OFFSET("java/lang/Continuation", java_lang_Continuation, lastSP, "I");
+
if (!valid) vm_exit_during_initialization("Hard-coded field offset verification failed");
}
#endif // PRODUCT
< prev index next >