javaClasses.cpp revision 0
0N/A# include "incls/_javaClasses.cpp.incl"
0N/A#define COMPUTE_OFFSET(klass_name_as_C_str, dest_offset, klass_oop, name_symbol, signature_symbol) \
0N/A#define COMPUTE_OPTIONAL_OFFSET(klass_name_as_C_str, dest_offset, klass_oop, name_symbol, signature_symbol) \
0N/A obj = instanceKlass::cast(SystemDictionary::string_klass())->allocate_permanent_instance(CHECK_NH);
0N/AHandle java_lang_String::basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS) {
0N/A _to_java_string_fn = CAST_TO_FN_PTR(to_java_string_fn_t, hpi::dll_lookup(lib_handle, "NewStringPlatform"));
0N/AHandle java_lang_String::char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS) {
0N/A return java_string;
0N/A Handle mirror = instanceKlass::cast(SystemDictionary::class_klass())->allocate_permanent_instance(CHECK_0);
0N/A if (k->oop_is_javaArray()) {
0N/A if (k->oop_is_typeArray()) {
0N/A } else if (k->oop_is_objArray()) {
0N/Aoop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) {
0N/A oop java_class = instanceKlass::cast(SystemDictionary::class_klass())->allocate_permanent_instance(CHECK_0);
0N/A return java_class;
0N/A assert(k == NULL || k->is_klass() && Klass::cast(k)->oop_is_javaArray(), "should be array klass");
0N/A offsets_computed = true;
0N/A COMPUTE_OFFSET("java.lang.Thread", _name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _priority_offset, k, vmSymbols::priority_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _eetop_offset, k, vmSymbols::eetop_name(), vmSymbols::long_signature());
0N/A COMPUTE_OFFSET("java.lang.Thread", _stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.Thread", _stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.Thread", _tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.Thread", _thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.Thread", _park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.Thread", _park_event_offset, k, vmSymbols::park_event_name(),
0N/A assert(name == NULL || (name->is_typeArray() && typeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking");
0N/A if (_stackSize_offset > 0) {
0N/A assert(JavaThread::current()->thread_state() == _thread_in_vm, "Java Thread is not running in vm");
0N/A if (_thread_status_offset > 0) {
0N/A if (_thread_status_offset > 0) {
0N/A if (_tid_offset > 0) {
0N/A if (_park_blocker_offset > 0) {
0N/A if (_park_event_offset > 0) {
0N/A if (_park_event_offset > 0) {
0N/A assert(JDK_Version::is_gte_jdk15x_version() && _thread_status_offset != 0, "Must have thread status");
0N/A ThreadStatus status = (java_lang_Thread::ThreadStatus)java_thread->int_field(_thread_status_offset);
0N/A assert(groups == NULL || groups->is_objArray(), "just checking"); // Todo: Add better type checking code
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _parent_offset, k, vmSymbols::parent_name(), vmSymbols::threadgroup_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _threads_offset, k, vmSymbols::threads_name(), vmSymbols::thread_array_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _groups_offset, k, vmSymbols::groups_name(), vmSymbols::threadgroup_array_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _maxPriority_offset, k, vmSymbols::maxPriority_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _destroyed_offset, k, vmSymbols::destroyed_name(), vmSymbols::bool_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _vmAllowSuspension_offset, k, vmSymbols::vmAllowSuspension_name(), vmSymbols::bool_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _nthreads_offset, k, vmSymbols::nthreads_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.ThreadGroup", _ngroups_offset, k, vmSymbols::ngroups_name(), vmSymbols::int_signature());
0N/A char* source_file_name;
0N/A if (!HAS_PENDING_EXCEPTION) {
0N/A if (HAS_PENDING_EXCEPTION) {
0N/A return _backtrace();
0N/A if (!StackTraceInThrowable) return;
0N/A int total_count = 0;
0N/A int decode_offset = 0;
0N/A bool skip_fillInStackTrace_check = false;
0N/A bool skip_throwableInit_check = false;
0N/A if (decode_offset != 0) {
0N/A if (!skip_fillInStackTrace_check) {
0N/A skip_fillInStackTrace_check = true;
0N/A if (!skip_throwableInit_check) {
0N/A skip_throwableInit_check = true;
0N/A total_count++;
0N/A if (!StackTraceInThrowable) {
0N/A if (!StackTraceInThrowable) return;
0N/A if (!StackTraceInThrowable) return;
0N/A int chunk_count = 0;
0N/A chunk_count++;
0N/A skip_chunks--;
0N/A int line_number;
0N/A COMPUTE_OFFSET("java.lang.reflect.AccessibleObject", override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", returnType_offset, k, vmSymbols::returnType_name(), vmSymbols::class_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", slot_offset, k, vmSymbols::slot_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Method", modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Method", signature_offset, k, vmSymbols::signature_name(), vmSymbols::string_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Method", annotations_offset, k, vmSymbols::annotations_name(), vmSymbols::byte_array_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Method", parameter_annotations_offset, k, vmSymbols::parameter_annotations_name(), vmSymbols::byte_array_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Method", annotation_default_offset, k, vmSymbols::annotation_default_name(), vmSymbols::byte_array_signature());
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (signature_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (annotations_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (parameter_annotations_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (annotation_default_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A COMPUTE_OFFSET("java.lang.reflect.Constructor", clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Constructor", parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Constructor", exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Constructor", slot_offset, k, vmSymbols::slot_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Constructor", modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Constructor", signature_offset, k, vmSymbols::signature_name(), vmSymbols::string_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Constructor", annotations_offset, k, vmSymbols::annotations_name(), vmSymbols::byte_array_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Constructor", parameter_annotations_offset, k, vmSymbols::parameter_annotations_name(), vmSymbols::byte_array_signature());
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (signature_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (annotations_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (parameter_annotations_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A COMPUTE_OFFSET("java.lang.reflect.Field", clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Field", name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Field", type_offset, k, vmSymbols::type_name(), vmSymbols::class_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Field", slot_offset, k, vmSymbols::slot_name(), vmSymbols::int_signature());
0N/A COMPUTE_OFFSET("java.lang.reflect.Field", modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Field", signature_offset, k, vmSymbols::signature_name(), vmSymbols::string_signature());
0N/A COMPUTE_OPTIONAL_OFFSET("java.lang.reflect.Field", annotations_offset, k, vmSymbols::annotations_name(), vmSymbols::byte_array_signature());
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (signature_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A return (annotations_offset >= 0);
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A COMPUTE_OFFSET("sun.reflect.ConstantPool", _cp_oop_offset, k, vmSymbols::constantPoolOop_name(), vmSymbols::object_signature());
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
0N/A if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
0N/A if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {
0N/Aoop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) {
0N/A oop result = instanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0);
0N/A// Support for intrinsification of java.nio.Buffer.checkIndex
0N/A return _limit_offset;
0N/A COMPUTE_OFFSET("java.nio.Buffer", _limit_offset, k, vmSymbols::limit_name(), vmSymbols::int_signature());
0N/A return _value_offset;
0N/A COMPUTE_OFFSET("sun.misc.AtomicLongCSImpl", _value_offset, k, vmSymbols::value_name(), vmSymbols::long_signature());
0N/A if (_owner_offset != 0) return;
0N/A java_lang_Class::resolved_constructor_offset = java_lang_Class::hc_resolved_constructor_offset * x + header;
0N/A java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header;
0N/A java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header;
0N/A java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header;
0N/A java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header;
0N/A java_lang_ref_Reference::static_lock_offset = java_lang_ref_Reference::hc_static_lock_offset * x;
0N/A java_lang_ref_Reference::static_pending_offset = java_lang_ref_Reference::hc_static_pending_offset * x;
0N/A java_lang_ref_SoftReference::timestamp_offset = java_lang_ref_SoftReference::hc_timestamp_offset * x + header;
0N/A java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x;
0N/A java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header;
0N/A java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
0N/A java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
0N/A java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
0N/A java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
0N/A java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
0N/A java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
0N/A java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
0N/A java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
0N/Abool JavaClasses::check_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
0N/Abool JavaClasses::check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
0N/A tty->print_cr("Offset of static field %s.%s is hardcoded as %d but should really be %d.", klass_name, field_name, hardcoded_offset, fd.offset() - h_klass->offset_of_static_fields());
0N/A valid &= check_offset(klass_name, cpp_klass_name :: field_name ## _offset, #field_name, field_sig)
0N/A valid &= check_static_offset(klass_name, cpp_klass_name :: static_ ## field_name ## _offset, #field_name, field_sig)
0N/A // CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
0N/A // CHECK_OFFSET("java/lang/Class", java_lang_Class, resolved_constructor); // %%% this needs to be checked
0N/A CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, stackTrace, "[Ljava/lang/StackTraceElement;");
0N/A CHECK_OFFSET("java/lang/ClassLoader", java_lang_ClassLoader, parent, "Ljava/lang/ClassLoader;");
0N/A CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;");
0N/A CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;");
0N/A CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName, "Ljava/lang/String;");
0N/A CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;");
0N/A CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;");
0N/A CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;");
0N/A //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
0N/A CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, lock, "Ljava/lang/ref/Reference$Lock;");
0N/A CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, pending, "Ljava/lang/ref/Reference;");
0N/A // globals.hpp after the AssertionStatusDirectives class has been integrated
0N/Avoid javaClasses_init() {