1 /*
  2  * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #include "precompiled.hpp"
 26 #include "ci/ciCallSite.hpp"
 27 #include "ci/ciConstant.hpp"
 28 #include "ci/ciField.hpp"
 29 #include "ci/ciStreams.hpp"
 30 #include "ci/ciSymbols.hpp"
 31 #include "ci/ciUtilities.inline.hpp"
 32 #include "runtime/handles.inline.hpp"
 33 
 34 // ciExceptionHandlerStream
 35 //
 36 // Walk over some selected set of a methods exception handlers.
 37 
 38 // ------------------------------------------------------------------
 39 // ciExceptionHandlerStream::count
 40 //
 41 // How many exception handlers are there in this stream?
 42 //
 43 // Implementation note: Compiler2 needs this functionality, so I had
 44 int ciExceptionHandlerStream::count() {
 45   int save_pos = _pos;
 46   int save_end = _end;
 47 
 48   int count = 0;
 49 
 50   _pos = -1;
 51   _end = _method->_handler_count;
 52 
 53 
 54   next();
 55   while (!is_done()) {
 56     count++;
 57     next();
 58   }
 59 
 60   _pos = save_pos;
 61   _end = save_end;
 62 
 63   return count;
 64 }
 65 
 66 int ciExceptionHandlerStream::count_remaining() {
 67   int save_pos = _pos;
 68   int save_end = _end;
 69 
 70   int count = 0;
 71 
 72   while (!is_done()) {
 73     count++;
 74     next();
 75   }
 76 
 77   _pos = save_pos;
 78   _end = save_end;
 79 
 80   return count;
 81 }
 82 
 83 // ciBytecodeStream
 84 //
 85 // The class is used to iterate over the bytecodes of a method.
 86 // It hides the details of constant pool structure/access by
 87 // providing accessors for constant pool items.
 88 
 89 // ------------------------------------------------------------------
 90 // ciBytecodeStream::next_wide_or_table
 91 //
 92 // Special handling for switch ops
 93 Bytecodes::Code ciBytecodeStream::next_wide_or_table(Bytecodes::Code bc) {
 94   switch (bc) {                // Check for special bytecode handling
 95   case Bytecodes::_wide:
 96     // Special handling for the wide bytcode
 97     // Get following bytecode; do not return wide
 98     assert(Bytecodes::Code(_pc[0]) == Bytecodes::_wide, "");
 99     bc = Bytecodes::java_code(_raw_bc = (Bytecodes::Code)_pc[1]);
100     assert(Bytecodes::wide_length_for(bc) > 2, "must make progress");
101     _pc += Bytecodes::wide_length_for(bc);
102     _was_wide = _pc;              // Flag last wide bytecode found
103     assert(is_wide(), "accessor works right");
104     break;
105 
106   case Bytecodes::_lookupswitch:
107     _pc++;                      // Skip wide bytecode
108     _pc += (_start-_pc)&3;      // Word align
109     _table_base = (jint*)_pc;   // Capture for later usage
110                                 // table_base[0] is default far_dest
111     // Table has 2 lead elements (default, length), then pairs of u4 values.
112     // So load table length, and compute address at end of table
113     _pc = (address)&_table_base[2+ 2*Bytes::get_Java_u4((address)&_table_base[1])];
114     break;
115 
116   case Bytecodes::_tableswitch: {
117     _pc++;                      // Skip wide bytecode
118     _pc += (_start-_pc)&3;      // Word align
119     _table_base = (jint*)_pc;   // Capture for later usage
120                                 // table_base[0] is default far_dest
121     int lo = Bytes::get_Java_u4((address)&_table_base[1]);// Low bound
122     int hi = Bytes::get_Java_u4((address)&_table_base[2]);// High bound
123     int len = hi - lo + 1;      // Dense table size
124     _pc = (address)&_table_base[3+len]; // Skip past table
125     break;
126   }
127 
128   default:
129     fatal("unhandled bytecode");
130   }
131   return bc;
132 }
133 
134 // ------------------------------------------------------------------
135 // ciBytecodeStream::reset_to_bci
136 void ciBytecodeStream::reset_to_bci( int bci ) {
137   _bc_start=_was_wide=0;
138   _pc = _start+bci;
139 }
140 
141 // ------------------------------------------------------------------
142 // ciBytecodeStream::force_bci
143 void ciBytecodeStream::force_bci(int bci) {
144   if (bci < 0) {
145     reset_to_bci(0);
146     _bc_start = _start + bci;
147     _bc = EOBC();
148   } else {
149     reset_to_bci(bci);
150     next();
151   }
152 }
153 
154 
155 // ------------------------------------------------------------------
156 // Constant pool access
157 // ------------------------------------------------------------------
158 
159 // ------------------------------------------------------------------
160 // ciBytecodeStream::get_klass_index
161 //
162 // If this bytecodes references a klass, return the index of the
163 // referenced klass.
164 int ciBytecodeStream::get_klass_index() const {
165   switch(cur_bc()) {
166   case Bytecodes::_ldc:
167     return get_index_u1();
168   case Bytecodes::_ldc_w:
169   case Bytecodes::_ldc2_w:
170   case Bytecodes::_checkcast:
171   case Bytecodes::_instanceof:
172   case Bytecodes::_anewarray:
173   case Bytecodes::_multianewarray:
174   case Bytecodes::_new:
175   case Bytecodes::_newarray:
176     return get_index_u2();
177   default:
178     ShouldNotReachHere();
179     return 0;
180   }
181 }
182 
183 // ------------------------------------------------------------------
184 // ciBytecodeStream::get_klass
185 //
186 // If this bytecode is a new, newarray, multianewarray, instanceof,
187 // or checkcast, get the referenced klass.
188 ciKlass* ciBytecodeStream::get_klass(bool& will_link) {
189   VM_ENTRY_MARK;
190   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
191   return CURRENT_ENV->get_klass_by_index(cpool, get_klass_index(), will_link, _holder);
192 }
193 
194 // ------------------------------------------------------------------
195 // ciBytecodeStream::get_constant_raw_index
196 //
197 // If this bytecode is one of the ldc variants, get the index of the
198 // referenced constant.
199 int ciBytecodeStream::get_constant_raw_index() const {
200   // work-alike for Bytecode_loadconstant::raw_index()
201   switch (cur_bc()) {
202   case Bytecodes::_ldc:
203     return get_index_u1();
204   case Bytecodes::_ldc_w:
205   case Bytecodes::_ldc2_w:
206     return get_index_u2();
207   default:
208     ShouldNotReachHere();
209     return 0;
210   }
211 }
212 
213 // ------------------------------------------------------------------
214 // ciBytecodeStream::get_constant_pool_index
215 // Decode any reference index into a regular pool index.
216 int ciBytecodeStream::get_constant_pool_index() const {
217   // work-alike for Bytecode_loadconstant::pool_index()
218   int index = get_constant_raw_index();
219   if (has_cache_index()) {
220     VM_ENTRY_MARK;
221     constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
222     return cpool->object_to_cp_index(index);
223   }
224   return index;
225 }
226 
227 // ------------------------------------------------------------------
228 // ciBytecodeStream::get_constant
229 //
230 // If this bytecode is one of the ldc variants, get the referenced
231 // constant.
232 ciConstant ciBytecodeStream::get_constant() {
233   VM_ENTRY_MARK;
234   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
235   int pool_index = get_constant_raw_index();
236   int cache_index = -1;
237   if (has_cache_index()) {
238     cache_index = pool_index;
239     pool_index = cpool->object_to_cp_index(cache_index);
240   } else if (cpool->tag_at(pool_index).is_dynamic_constant() ||
241              cpool->tag_at(pool_index).is_dynamic_constant_in_error()) {
242     // Condy with primitive type is not quickened, so the index into resolved reference cache should be reconstructed.
243     assert(is_java_primitive(cpool->basic_type_for_constant_at(pool_index)), "not quickened");
244     cache_index = cpool->cp_to_object_index(pool_index);
245   }
246   return CURRENT_ENV->get_constant_by_index(cpool, pool_index, cache_index, _holder);
247 }
248 
249 // ------------------------------------------------------------------
250 // ciBytecodeStream::get_constant_pool_tag
251 //
252 // If this bytecode is one of the ldc variants, get the referenced
253 // constant.
254 constantTag ciBytecodeStream::get_constant_pool_tag(int index) const {
255   VM_ENTRY_MARK;
256   return _method->get_Method()->constants()->constant_tag_at(index);
257 }
258 
259 // ------------------------------------------------------------------
260 // ciBytecodeStream::get_raw_pool_tag
261 //
262 constantTag ciBytecodeStream::get_raw_pool_tag(int index) const {
263   VM_ENTRY_MARK;
264   return _method->get_Method()->constants()->tag_at(index);
265 }
266 
267 // ------------------------------------------------------------------
268 // ciBytecodeStream::get_basic_type_for_constant_at
269 //
270 BasicType ciBytecodeStream::get_basic_type_for_constant_at(int index) const {
271   VM_ENTRY_MARK;
272   return _method->get_Method()->constants()->basic_type_for_constant_at(index);
273 }
274 
275 // ------------------------------------------------------------------
276 // ciBytecodeStream::get_field_index
277 //
278 // If this is a field access bytecode, get the constant pool
279 // index of the referenced field.
280 int ciBytecodeStream::get_field_index() {
281   assert(cur_bc() == Bytecodes::_getfield ||
282          cur_bc() == Bytecodes::_putfield ||
283          cur_bc() == Bytecodes::_getstatic ||
284          cur_bc() == Bytecodes::_putstatic, "wrong bc");
285   return get_index_u2_cpcache();
286 }
287 
288 
289 // ------------------------------------------------------------------
290 // ciBytecodeStream::get_field
291 //
292 // If this bytecode is one of get_field, get_static, put_field,
293 // or put_static, get the referenced field.
294 ciField* ciBytecodeStream::get_field(bool& will_link) {
295   ciField* f = CURRENT_ENV->get_field_by_index(_holder, get_field_index());
296   will_link = f->will_link(_method, _bc);
297   return f;
298 }
299 
300 
301 // ------------------------------------------------------------------
302 // ciBytecodeStream::get_declared_field_holder
303 //
304 // Get the declared holder of the currently referenced field.
305 //
306 // Usage note: the holder() of a ciField class returns the canonical
307 // holder of the field, rather than the holder declared in the
308 // bytecodes.
309 //
310 // There is no "will_link" result passed back.  The user is responsible
311 // for checking linkability when retrieving the associated field.
312 ciInstanceKlass* ciBytecodeStream::get_declared_field_holder() {
313   VM_ENTRY_MARK;
314   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
315   int holder_index = get_field_holder_index();
316   bool ignore;
317   return CURRENT_ENV->get_klass_by_index(cpool, holder_index, ignore, _holder)
318       ->as_instance_klass();
319 }
320 
321 // ------------------------------------------------------------------
322 // ciBytecodeStream::get_field_holder_index
323 //
324 // Get the constant pool index of the declared holder of the field
325 // referenced by the current bytecode.  Used for generating
326 // deoptimization information.
327 int ciBytecodeStream::get_field_holder_index() {
328   GUARDED_VM_ENTRY(
329     ConstantPool* cpool = _holder->get_instanceKlass()->constants();
330     return cpool->klass_ref_index_at(get_field_index());
331   )
332 }
333 
334 // ------------------------------------------------------------------
335 // ciBytecodeStream::get_method_index
336 //
337 // If this is a method invocation bytecode, get the constant pool
338 // index of the invoked method.
339 int ciBytecodeStream::get_method_index() {
340   assert(Bytecodes::is_invoke(cur_bc()), "invalid bytecode: %s", Bytecodes::name(cur_bc()));
341   if (has_index_u4())
342     return get_index_u4();  // invokedynamic
343   return get_index_u2_cpcache();
344 }
345 
346 // ------------------------------------------------------------------
347 // ciBytecodeStream::get_method
348 //
349 // If this is a method invocation bytecode, get the invoked method.
350 // Additionally return the declared signature to get more concrete
351 // type information if required (Cf. invokedynamic and invokehandle).
352 ciMethod* ciBytecodeStream::get_method(bool& will_link, ciSignature* *declared_signature_result) {
353   VM_ENTRY_MARK;
354   ciEnv* env = CURRENT_ENV;
355   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
356   ciMethod* m = env->get_method_by_index(cpool, get_method_index(), cur_bc(), _holder);
357   will_link = m->is_loaded();
358 
359   // Use the signature stored in the CP cache to create a signature
360   // with correct types (in respect to class loaders).
361   //
362   // In classic Java (before Java 7) there is never the slightest
363   // difference between the signature at the call site and that of the
364   // method.  Such a difference would have been a type error in the
365   // JVM.
366   //
367   // Now there are a few circumstances where the signature of a call
368   // site (which controls the outgoing stacked arguments) can differ
369   // from the signature of the method (which controls the receipt of
370   // those arguments at the method entry point).
371   //
372   // A. The signatures can differ if the callee is a static method and
373   // the caller thinks it is calling a non-static method (VH.get).
374   // This requires the method signature to have an explicit leading
375   // argument for the implicit 'this', not present at the call site.
376   //
377   // B. The call site can have less specific parameter types than the
378   // method, allowing loosely-typed code to handle strongly-typed
379   // methods.  This happens with linkToStatic and related linker
380   // commands.  Obviously the loosely-typed code has to ensure that
381   // the strongly typed method's invariants are respected, and this is
382   // done by issuing dynamic casts.
383   //
384   // C. The call site can have more specific parameter types than the
385   // method, allowing loosely-typed methods to handle strongly-typed
386   // requests.
387   //
388   // D. There are corresponding effects with return values, such as
389   // boolean method returning an int to an int-receiving call site,
390   // even though the method thought it returned just a boolean.
391   //
392   // E. The calling sequence at a particular call site may add an
393   // "appendix" argument not mentioned in the call site signature.  It
394   // is expected by the method signature, though, and this adds to the
395   // method's arity, even after 'this' parameter effects (A) are
396   // discounted.  Appendixes are used by invokehandle and
397   // invokedynamic instructions.
398   //
399   // F. A linker method (linkToStatic, etc.) can also take an extra
400   // argument, a MemberName which routes the call to a concrete
401   // strongly-typed method.  In this case the linker method may also
402   // differ in any of the ways A-D.  The eventual method will ignore
403   // the presence of the extra argument.
404   //
405   // None of these changes to calling sequences requires an argument
406   // to be moved or reformatted in any way.  This works because all
407   // references look alike to the JVM, as do all primitives (except
408   // float/long/double).  Another required property of the JVM is
409   // that, if a trailing argument is added or dropped, the placement
410   // of other arguments does not change.  This allows cases E and F to
411   // work smoothly, against without any moving or reformatting,
412   // despite the arity change.
413   //
414   if (has_local_signature()) {
415     Symbol* local_signature = cpool->symbol_at(get_method_signature_index(cpool));
416     ciSymbol* sig_sym  = env->get_symbol(local_signature);
417     ciKlass* pool_holder = env->get_klass(cpool->pool_holder());
418     ciSignature* call_site_sig = new (env->arena()) ciSignature(pool_holder, cpool, sig_sym);
419     // Examples of how the call site signature can differ from the method's own signature:
420     //
421     //  meth = static jboolean java.lang.invoke.VarHandleGuards.guard_LII_Z(jobject, jobject, jint, jint, jobject)
422     //  msig = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/VarHandle$AccessDescriptor;)Z
423     //  call = (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;II)Z
424     //
425     //  meth = static jobject java.lang.invoke.LambdaForm$MH/0x0000000800066840.linkToTargetMethod(jobject, jobject)
426     //  msig = (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
427     //  call = (Ljava/lang/String;)Ljava/util/function/Predicate;
428     //
429     (*declared_signature_result) = call_site_sig;
430 
431   } else {
432     // We can just use the method's own signature.  It may differ from the call site, but not by much.
433     //
434     // Examples of how the call site signature can differ from the method's signature:
435     //
436     // meth = static final native jint java.lang.invoke.MethodHandle.linkToStatic(jobject, jobject, jint, jint, jobject)
437     // msig = (Ljava/lang/Object;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)I
438     // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)Z
439     //
440     // meth = final native jint java.lang.invoke.MethodHandle.invokeBasic(jobject, jobject, jint, jint)
441     // msig = (Ljava/lang/Object;Ljava/lang/Object;II)I
442     // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;II)Z
443     //
444     (*declared_signature_result) = m->signature();
445   }
446   return m;
447 }
448 
449 // ------------------------------------------------------------------
450 // ciBytecodeStream::has_appendix
451 //
452 // Returns true if there is an appendix argument stored in the
453 // constant pool cache at the current bci.
454 bool ciBytecodeStream::has_appendix() {
455   VM_ENTRY_MARK;
456   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
457   return ConstantPool::has_appendix_at_if_loaded(cpool, get_method_index());
458 }
459 
460 // ------------------------------------------------------------------
461 // ciBytecodeStream::get_appendix
462 //
463 // Return the appendix argument stored in the constant pool cache at
464 // the current bci.
465 ciObject* ciBytecodeStream::get_appendix() {
466   VM_ENTRY_MARK;
467   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
468   oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, get_method_index());
469   return CURRENT_ENV->get_object(appendix_oop);
470 }
471 
472 // ------------------------------------------------------------------
473 // ciBytecodeStream::has_local_signature
474 //
475 // Returns true if the method stored in the constant
476 // pool cache at the current bci has a local signature.
477 bool ciBytecodeStream::has_local_signature() {
478   GUARDED_VM_ENTRY(
479     constantPoolHandle cpool(Thread::current(), _method->get_Method()->constants());
480     return ConstantPool::has_local_signature_at_if_loaded(cpool, get_method_index());
481   )
482 }
483 
484 // ------------------------------------------------------------------
485 // ciBytecodeStream::get_declared_method_holder
486 //
487 // Get the declared holder of the currently referenced method.
488 //
489 // Usage note: the holder() of a ciMethod class returns the canonical
490 // holder of the method, rather than the holder declared in the
491 // bytecodes.
492 //
493 // There is no "will_link" result passed back.  The user is responsible
494 // for checking linkability when retrieving the associated method.
495 ciKlass* ciBytecodeStream::get_declared_method_holder() {
496   VM_ENTRY_MARK;
497   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
498   bool ignore;
499   // report as MethodHandle for invokedynamic, which is syntactically classless
500   if (cur_bc() == Bytecodes::_invokedynamic) {
501     return CURRENT_ENV->MethodHandle_klass();
502   }
503   return CURRENT_ENV->get_klass_by_index(cpool, get_method_holder_index(), ignore, _holder);
504 }
505 
506 // ------------------------------------------------------------------
507 // ciBytecodeStream::get_method_holder_index
508 //
509 // Get the constant pool index of the declared holder of the method
510 // referenced by the current bytecode.  Used for generating
511 // deoptimization information.
512 int ciBytecodeStream::get_method_holder_index() {
513   ConstantPool* cpool = _method->get_Method()->constants();
514   return cpool->klass_ref_index_at(get_method_index());
515 }
516 
517 // ------------------------------------------------------------------
518 // ciBytecodeStream::get_method_signature_index
519 //
520 // Get the constant pool index of the signature of the method
521 // referenced by the current bytecode.  Used for generating
522 // deoptimization information.
523 int ciBytecodeStream::get_method_signature_index(const constantPoolHandle& cpool) {
524   GUARDED_VM_ENTRY(
525     const int method_index = get_method_index();
526     const int name_and_type_index = cpool->name_and_type_ref_index_at(method_index);
527     return cpool->signature_ref_index_at(name_and_type_index);
528   )
529 }
530