Mercurial > hg > graal-jvmci-8
comparison src/share/vm/oops/klassVtable.hpp @ 652:4aaa9f5e02a8
4766230: Hotspot vtable inconsistencies cause core dumps. 6579515. 6582242.
Reviewed-by: kamg, coleenp
author | acorn |
---|---|
date | Wed, 18 Mar 2009 17:20:57 -0400 |
parents | f8236e79048a |
children | d3676b4cb78c |
comparison
equal
deleted
inserted
replaced
651:8ce995316d10 | 652:4aaa9f5e02a8 |
---|---|
68 void initialize_vtable(bool checkconstraints, TRAPS); // initialize vtable of a new klass | 68 void initialize_vtable(bool checkconstraints, TRAPS); // initialize vtable of a new klass |
69 | 69 |
70 // conputes vtable length (in words) and the number of miranda methods | 70 // conputes vtable length (in words) and the number of miranda methods |
71 static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods, | 71 static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods, |
72 klassOop super, objArrayOop methods, | 72 klassOop super, objArrayOop methods, |
73 AccessFlags class_flags, oop classloader, | 73 AccessFlags class_flags, Handle classloader, |
74 symbolOop classname, objArrayOop local_interfaces); | 74 symbolHandle classname, objArrayOop local_interfaces, |
75 TRAPS); | |
75 | 76 |
76 // RedefineClasses() API support: | 77 // RedefineClasses() API support: |
77 // If any entry of this vtable points to any of old_methods, | 78 // If any entry of this vtable points to any of old_methods, |
78 // replace it with the corresponding new_method. | 79 // replace it with the corresponding new_method. |
79 // trace_name_printed is set to true if the current call has | 80 // trace_name_printed is set to true if the current call has |
109 #endif | 110 #endif |
110 | 111 |
111 protected: | 112 protected: |
112 friend class vtableEntry; | 113 friend class vtableEntry; |
113 private: | 114 private: |
115 enum { VTABLE_TRANSITIVE_OVERRIDE_VERSION = 51 } ; | |
114 void copy_vtable_to(vtableEntry* start); | 116 void copy_vtable_to(vtableEntry* start); |
115 int initialize_from_super(KlassHandle super); | 117 int initialize_from_super(KlassHandle super); |
116 int index_of(methodOop m, int len) const; // same as index_of, but search only up to len | 118 int index_of(methodOop m, int len) const; // same as index_of, but search only up to len |
117 void put_method_at(methodOop m, int index); | 119 void put_method_at(methodOop m, int index); |
118 static bool needs_new_vtable_entry(methodOop m, klassOop super, oop classloader, symbolOop classname, AccessFlags access_flags); | 120 static bool needs_new_vtable_entry(methodHandle m, klassOop super, Handle classloader, symbolHandle classname, AccessFlags access_flags, TRAPS); |
119 AccessType vtable_accessibility_at(int i); | 121 |
120 | 122 bool update_inherited_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS); |
121 bool update_super_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS); | 123 instanceKlass* find_transitive_override(instanceKlass* initialsuper, methodHandle target_method, int vtable_index, |
124 Handle target_loader, symbolHandle target_classname, Thread* THREAD); | |
122 | 125 |
123 // support for miranda methods | 126 // support for miranda methods |
124 bool is_miranda_entry_at(int i); | 127 bool is_miranda_entry_at(int i); |
125 void fill_in_mirandas(int& initialized); | 128 void fill_in_mirandas(int& initialized); |
126 static bool is_miranda(methodOop m, objArrayOop class_methods, klassOop super); | 129 static bool is_miranda(methodOop m, objArrayOop class_methods, klassOop super); |