Mercurial > hg > graal-compiler
diff src/share/vm/classfile/javaClasses.hpp @ 6948:e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 12 Nov 2012 23:14:12 +0100 |
parents | 957c266d8bc5 da91efe96a93 |
children | 2cb439954abf |
line wrap: on
line diff
--- a/src/share/vm/classfile/javaClasses.hpp Mon Nov 12 18:11:17 2012 +0100 +++ b/src/share/vm/classfile/javaClasses.hpp Mon Nov 12 23:14:12 2012 +0100 @@ -59,8 +59,7 @@ static bool initialized; - static Handle basic_create(int length, bool tenured, TRAPS); - static Handle basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS); + static Handle basic_create(int length, TRAPS); static void set_value( oop string, typeArrayOop buffer) { assert(initialized, "Must be initialized"); @@ -84,7 +83,6 @@ // Instance creation static Handle create_from_unicode(jchar* unicode, int len, TRAPS); - static Handle create_tenured_from_unicode(jchar* unicode, int len, TRAPS); static oop create_oop_from_unicode(jchar* unicode, int len, TRAPS); static Handle create_from_str(const char* utf8_str, TRAPS); static oop create_oop_from_str(const char* utf8_str, TRAPS); @@ -205,9 +203,10 @@ // Interface to java.lang.Class objects #define CLASS_INJECTED_FIELDS(macro) \ - macro(java_lang_Class, klass, object_signature, false) \ - macro(java_lang_Class, resolved_constructor, object_signature, false) \ - macro(java_lang_Class, array_klass, object_signature, false) \ + macro(java_lang_Class, klass, intptr_signature, false) \ + GRAAL_ONLY(macro(java_lang_Class, graal_mirror, object_signature, false))\ + macro(java_lang_Class, resolved_constructor, intptr_signature, false) \ + macro(java_lang_Class, array_klass, intptr_signature, false) \ macro(java_lang_Class, oop_size, int_signature, false) \ macro(java_lang_Class, static_oop_field_count, int_signature, false) @@ -223,9 +222,13 @@ static int _oop_size_offset; static int _static_oop_field_count_offset; +#ifdef GRAAL + static int _graal_mirror_offset; +#endif static bool offsets_computed; static int classRedefinedCount_offset; + static GrowableArray<Klass*>* _fixup_mirror_list; public: static void compute_offsets(); @@ -235,11 +238,11 @@ static void fixup_mirror(KlassHandle k, TRAPS); static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS); // Conversion - static klassOop as_klassOop(oop java_class); - static void set_klass(oop java_class, klassOop klass); - static BasicType as_BasicType(oop java_class, klassOop* reference_klass = NULL); + static Klass* as_Klass(oop java_class); + static void set_klass(oop java_class, Klass* klass); + static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL); static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) { - klassOop refk_oop = NULL; + Klass* refk_oop = NULL; BasicType result = as_BasicType(java_class, &refk_oop); (*reference_klass) = KlassHandle(refk_oop); return result; @@ -254,11 +257,11 @@ static BasicType primitive_type(oop java_class); static oop primitive_mirror(BasicType t); // JVM_NewInstance support - static methodOop resolved_constructor(oop java_class); - static void set_resolved_constructor(oop java_class, methodOop constructor); + static Method* resolved_constructor(oop java_class); + static void set_resolved_constructor(oop java_class, Method* constructor); // JVM_NewArray support - static klassOop array_klass(oop java_class); - static void set_array_klass(oop java_class, klassOop klass); + static Klass* array_klass(oop java_class); + static void set_array_klass(oop java_class, Klass* klass); // compiler support for class operations static int klass_offset_in_bytes() { return _klass_offset; } static int resolved_constructor_offset_in_bytes() { return _resolved_constructor_offset; } @@ -272,9 +275,20 @@ static int static_oop_field_count(oop java_class); static void set_static_oop_field_count(oop java_class, int size); +#ifdef GRAAL + static oop graal_mirror(oop java_class); + static int graal_mirror_offset_in_bytes() { return _graal_mirror_offset; } +#endif + + static GrowableArray<Klass*>* fixup_mirror_list() { + return _fixup_mirror_list; + } + static void set_fixup_mirror_list(GrowableArray<Klass*>* v) { + _fixup_mirror_list = v; + } // Debugging friend class JavaClasses; - friend class instanceKlass; // verification code accesses offsets + friend class InstanceKlass; // verification code accesses offsets friend class ClassFileParser; // access to number_of_fake_fields }; @@ -450,8 +464,9 @@ enum { trace_methods_offset = 0, trace_bcis_offset = 1, - trace_next_offset = 2, - trace_size = 3, + trace_mirrors_offset = 2, + trace_next_offset = 3, + trace_size = 4, trace_chunk_size = 32 }; @@ -462,7 +477,7 @@ static int static_unassigned_stacktrace_offset; // Printing - static char* print_stack_element_to_buffer(methodOop method, int bci); + static char* print_stack_element_to_buffer(Method* method, int bci); static void print_to_stream(Handle stream, const char* str); // StackTrace (programmatic access, new since 1.4) static void clear_stacktrace(oop throwable); @@ -487,8 +502,8 @@ // Note: this is no longer used in Merlin, but we still suppport // it for compatibility. static void print_stack_trace(oop throwable, oop print_stream); - static void print_stack_element(Handle stream, methodOop method, int bci); - static void print_stack_element(outputStream *st, methodOop method, int bci); + static void print_stack_element(Handle stream, Method* method, int bci); + static void print_stack_element(outputStream *st, Method* method, int bci); static void print_stack_usage(Handle stream); // Allocate space for backtrace (created but stack trace not filled in) @@ -712,7 +727,7 @@ private: // Note that to reduce dependencies on the JDK we compute these // offsets at run-time. - static int _cp_oop_offset; + static int _oop_offset; static void compute_offsets(); @@ -721,12 +736,13 @@ static Handle create(TRAPS); // Accessors - static oop cp_oop(oop reflect); - static void set_cp_oop(oop reflect, oop value); - static int cp_oop_offset() { - return _cp_oop_offset; + static void set_cp(oop reflect, ConstantPool* value); + static int oop_offset() { + return _oop_offset; } + static ConstantPool* get_cp(oop reflect); + // Debugging friend class JavaClasses; }; @@ -854,6 +870,7 @@ static oop pending_list_lock(); static oop pending_list(); + static HeapWord* pending_list_lock_addr(); static HeapWord* pending_list_addr(); }; @@ -904,7 +921,7 @@ static void set_form(oop mh, oop lform); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::MethodHandle_klass()); } static bool is_instance(oop obj) { @@ -933,7 +950,7 @@ static void set_vmentry(oop lform, oop invoker); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return SystemDictionary::LambdaForm_klass() != NULL && Klass::cast(klass)->is_subclass_of(SystemDictionary::LambdaForm_klass()); } @@ -950,8 +967,9 @@ // (These are a private interface for Java code to query the class hierarchy.) #define MEMBERNAME_INJECTED_FIELDS(macro) \ + macro(java_lang_invoke_MemberName, vmloader, object_signature, false) \ macro(java_lang_invoke_MemberName, vmindex, intptr_signature, false) \ - macro(java_lang_invoke_MemberName, vmtarget, object_signature, false) + macro(java_lang_invoke_MemberName, vmtarget, intptr_signature, false) class java_lang_invoke_MemberName: AllStatic { friend class JavaClasses; @@ -962,13 +980,14 @@ // private String name; // may be null if not yet materialized // private Object type; // may be null if not yet materialized // private int flags; // modifier bits; see reflect.Modifier - // private Object vmtarget; // VM-specific target value + // private intptr vmtarget; // VM-specific target value // private intptr_t vmindex; // member index within class or interface static int _clazz_offset; static int _name_offset; static int _type_offset; static int _flags_offset; static int _vmtarget_offset; + static int _vmloader_offset; static int _vmindex_offset; static void compute_offsets(); @@ -987,14 +1006,14 @@ static int flags(oop mname); static void set_flags(oop mname, int flags); - static oop vmtarget(oop mname); - static void set_vmtarget(oop mname, oop target); + static Metadata* vmtarget(oop mname); + static void set_vmtarget(oop mname, Metadata* target); static intptr_t vmindex(oop mname); static void set_vmindex(oop mname, intptr_t index); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::MemberName_klass()); } static bool is_instance(oop obj) { @@ -1080,7 +1099,7 @@ static void set_target_volatile(oop site, oop target) { site->obj_field_put_volatile(_target_offset, target); } // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::CallSite_klass()); } static bool is_instance(oop obj) { @@ -1113,19 +1132,31 @@ // Interface to java.lang.ClassLoader objects +#define CLASSLOADER_INJECTED_FIELDS(macro) \ + macro(java_lang_ClassLoader, loader_data, intptr_signature, false) \ + macro(java_lang_ClassLoader, dependencies, object_signature, false) + class java_lang_ClassLoader : AllStatic { private: + // The fake offsets are added by the class loader when java.lang.Class is loaded enum { hc_parent_offset = 0 }; - + static int _loader_data_offset; + static int _dependencies_offset; static bool offsets_computed; static int parent_offset; static int parallelCapable_offset; + public: static void compute_offsets(); - public: + static ClassLoaderData** loader_data_addr(oop loader); + static ClassLoaderData* loader_data(oop loader); + + static oop dependencies(oop loader); + static HeapWord* dependencies_addr(oop loader); + static oop parent(oop loader); static bool isAncestor(oop loader, oop cl); @@ -1138,7 +1169,7 @@ static oop non_reflection_class_loader(oop loader); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::ClassLoader_klass()); } static bool is_instance(oop obj) { @@ -1147,6 +1178,7 @@ // Debugging friend class JavaClasses; + friend class ClassFileParser; // access to number_of_fake_fields }; @@ -1269,7 +1301,7 @@ const bool may_be_java; - klassOop klass() const { return SystemDictionary::well_known_klass(klass_id); } + Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); } Symbol* name() const { return lookup_symbol(name_index); } Symbol* signature() const { return lookup_symbol(signature_index); } @@ -1286,6 +1318,7 @@ #define ALL_INJECTED_FIELDS(macro) \ CLASS_INJECTED_FIELDS(macro) \ + CLASSLOADER_INJECTED_FIELDS(macro) \ MEMBERNAME_INJECTED_FIELDS(macro) // Interface to hard-coded offset checking