60 bool _jvmti_can_post_exceptions;
61
62 // Cache DTrace flags
63 bool _dtrace_extended_probes;
64 bool _dtrace_monitor_probes;
65 bool _dtrace_method_probes;
66 bool _dtrace_alloc_probes;
67
68 // Distinguished instances of certain ciObjects..
69 static ciObject* _null_object_instance;
70 static ciMethodKlass* _method_klass_instance;
71 static ciSymbolKlass* _symbol_klass_instance;
72 static ciKlassKlass* _klass_klass_instance;
73 static ciInstanceKlassKlass* _instance_klass_klass_instance;
74 static ciTypeArrayKlassKlass* _type_array_klass_klass_instance;
75 static ciObjArrayKlassKlass* _obj_array_klass_klass_instance;
76
77 static ciInstanceKlass* _ArrayStoreException;
78 static ciInstanceKlass* _Class;
79 static ciInstanceKlass* _ClassCastException;
80 static ciInstanceKlass* _Object;
81 static ciInstanceKlass* _Throwable;
82 static ciInstanceKlass* _Thread;
83 static ciInstanceKlass* _OutOfMemoryError;
84 static ciInstanceKlass* _String;
85 static ciInstanceKlass* _StringBuffer;
86 static ciInstanceKlass* _StringBuilder;
87 static ciInstanceKlass* _Integer;
88
89 static ciSymbol* _unloaded_cisymbol;
90 static ciInstanceKlass* _unloaded_ciinstance_klass;
91 static ciObjArrayKlass* _unloaded_ciobjarrayklass;
92
93 static jobject _ArrayIndexOutOfBoundsException_handle;
94 static jobject _ArrayStoreException_handle;
95 static jobject _ClassCastException_handle;
96
97 ciInstance* _NullPointerException_instance;
98 ciInstance* _ArithmeticException_instance;
99 ciInstance* _ArrayIndexOutOfBoundsException_instance;
134 ciMethod* get_method_by_index(ciInstanceKlass* loading_klass,
135 int method_index, Bytecodes::Code bc);
136
137 // Implementation methods for loading and constant pool access.
138 ciKlass* get_klass_by_name_impl(ciKlass* accessing_klass,
139 ciSymbol* klass_name,
140 bool require_local);
141 ciKlass* get_klass_by_index_impl(ciInstanceKlass* loading_klass,
142 int klass_index,
143 bool& is_accessible);
144 ciConstant get_constant_by_index_impl(ciInstanceKlass* loading_klass,
145 int constant_index);
146 bool is_unresolved_string_impl (instanceKlass* loading_klass,
147 int constant_index) const;
148 bool is_unresolved_klass_impl (instanceKlass* loading_klass,
149 int constant_index) const;
150 ciField* get_field_by_index_impl(ciInstanceKlass* loading_klass,
151 int field_index);
152 ciMethod* get_method_by_index_impl(ciInstanceKlass* loading_klass,
153 int method_index, Bytecodes::Code bc);
154
155 // Helper methods
156 bool check_klass_accessibility(ciKlass* accessing_klass,
157 klassOop resolved_klassOop);
158 methodOop lookup_method(instanceKlass* accessor,
159 instanceKlass* holder,
160 symbolOop name,
161 symbolOop sig,
162 Bytecodes::Code bc);
163
164 // Get a ciObject from the object factory. Ensures uniqueness
165 // of ciObjects.
166 ciObject* get_object(oop o) {
167 if (o == NULL) {
168 return _null_object_instance;
169 } else {
170 return _factory->get(o);
171 }
172 }
173
284 int frame_words,
285 OopMapSet* oop_map_set,
286 ExceptionHandlerTable* handler_table,
287 ImplicitExceptionTable* inc_table,
288 AbstractCompiler* compiler,
289 int comp_level,
290 bool has_debug_info = true,
291 bool has_unsafe_access = false);
292
293
294 // Access to certain well known ciObjects.
295 ciInstanceKlass* ArrayStoreException_klass() {
296 return _ArrayStoreException;
297 }
298 ciInstanceKlass* Class_klass() {
299 return _Class;
300 }
301 ciInstanceKlass* ClassCastException_klass() {
302 return _ClassCastException;
303 }
304 ciInstanceKlass* Object_klass() {
305 return _Object;
306 }
307 ciInstanceKlass* Throwable_klass() {
308 return _Throwable;
309 }
310 ciInstanceKlass* Thread_klass() {
311 return _Thread;
312 }
313 ciInstanceKlass* OutOfMemoryError_klass() {
314 return _OutOfMemoryError;
315 }
316 ciInstanceKlass* String_klass() {
317 return _String;
318 }
319 ciInstanceKlass* StringBuilder_klass() {
320 return _StringBuilder;
321 }
322 ciInstanceKlass* StringBuffer_klass() {
323 return _StringBuffer;
|
60 bool _jvmti_can_post_exceptions;
61
62 // Cache DTrace flags
63 bool _dtrace_extended_probes;
64 bool _dtrace_monitor_probes;
65 bool _dtrace_method_probes;
66 bool _dtrace_alloc_probes;
67
68 // Distinguished instances of certain ciObjects..
69 static ciObject* _null_object_instance;
70 static ciMethodKlass* _method_klass_instance;
71 static ciSymbolKlass* _symbol_klass_instance;
72 static ciKlassKlass* _klass_klass_instance;
73 static ciInstanceKlassKlass* _instance_klass_klass_instance;
74 static ciTypeArrayKlassKlass* _type_array_klass_klass_instance;
75 static ciObjArrayKlassKlass* _obj_array_klass_klass_instance;
76
77 static ciInstanceKlass* _ArrayStoreException;
78 static ciInstanceKlass* _Class;
79 static ciInstanceKlass* _ClassCastException;
80 static ciInstanceKlass* _InvokeDynamic;
81 static ciInstanceKlass* _Object;
82 static ciInstanceKlass* _Throwable;
83 static ciInstanceKlass* _Thread;
84 static ciInstanceKlass* _OutOfMemoryError;
85 static ciInstanceKlass* _String;
86 static ciInstanceKlass* _StringBuffer;
87 static ciInstanceKlass* _StringBuilder;
88 static ciInstanceKlass* _Integer;
89
90 static ciSymbol* _unloaded_cisymbol;
91 static ciInstanceKlass* _unloaded_ciinstance_klass;
92 static ciObjArrayKlass* _unloaded_ciobjarrayklass;
93
94 static jobject _ArrayIndexOutOfBoundsException_handle;
95 static jobject _ArrayStoreException_handle;
96 static jobject _ClassCastException_handle;
97
98 ciInstance* _NullPointerException_instance;
99 ciInstance* _ArithmeticException_instance;
100 ciInstance* _ArrayIndexOutOfBoundsException_instance;
135 ciMethod* get_method_by_index(ciInstanceKlass* loading_klass,
136 int method_index, Bytecodes::Code bc);
137
138 // Implementation methods for loading and constant pool access.
139 ciKlass* get_klass_by_name_impl(ciKlass* accessing_klass,
140 ciSymbol* klass_name,
141 bool require_local);
142 ciKlass* get_klass_by_index_impl(ciInstanceKlass* loading_klass,
143 int klass_index,
144 bool& is_accessible);
145 ciConstant get_constant_by_index_impl(ciInstanceKlass* loading_klass,
146 int constant_index);
147 bool is_unresolved_string_impl (instanceKlass* loading_klass,
148 int constant_index) const;
149 bool is_unresolved_klass_impl (instanceKlass* loading_klass,
150 int constant_index) const;
151 ciField* get_field_by_index_impl(ciInstanceKlass* loading_klass,
152 int field_index);
153 ciMethod* get_method_by_index_impl(ciInstanceKlass* loading_klass,
154 int method_index, Bytecodes::Code bc);
155 ciMethod* get_fake_invokedynamic_method_impl(ciInstanceKlass* accessor,
156 int index, Bytecodes::Code bc);
157
158 // Helper methods
159 bool check_klass_accessibility(ciKlass* accessing_klass,
160 klassOop resolved_klassOop);
161 methodOop lookup_method(instanceKlass* accessor,
162 instanceKlass* holder,
163 symbolOop name,
164 symbolOop sig,
165 Bytecodes::Code bc);
166
167 // Get a ciObject from the object factory. Ensures uniqueness
168 // of ciObjects.
169 ciObject* get_object(oop o) {
170 if (o == NULL) {
171 return _null_object_instance;
172 } else {
173 return _factory->get(o);
174 }
175 }
176
287 int frame_words,
288 OopMapSet* oop_map_set,
289 ExceptionHandlerTable* handler_table,
290 ImplicitExceptionTable* inc_table,
291 AbstractCompiler* compiler,
292 int comp_level,
293 bool has_debug_info = true,
294 bool has_unsafe_access = false);
295
296
297 // Access to certain well known ciObjects.
298 ciInstanceKlass* ArrayStoreException_klass() {
299 return _ArrayStoreException;
300 }
301 ciInstanceKlass* Class_klass() {
302 return _Class;
303 }
304 ciInstanceKlass* ClassCastException_klass() {
305 return _ClassCastException;
306 }
307 ciInstanceKlass* InvokeDynamic_klass() {
308 return _InvokeDynamic;
309 }
310 ciInstanceKlass* Object_klass() {
311 return _Object;
312 }
313 ciInstanceKlass* Throwable_klass() {
314 return _Throwable;
315 }
316 ciInstanceKlass* Thread_klass() {
317 return _Thread;
318 }
319 ciInstanceKlass* OutOfMemoryError_klass() {
320 return _OutOfMemoryError;
321 }
322 ciInstanceKlass* String_klass() {
323 return _String;
324 }
325 ciInstanceKlass* StringBuilder_klass() {
326 return _StringBuilder;
327 }
328 ciInstanceKlass* StringBuffer_klass() {
329 return _StringBuffer;
|