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::_defaultvalue:
176   case Bytecodes::_newarray:
177     return get_index_u2();
178   default:
179     ShouldNotReachHere();
180     return 0;
181   }
182 }
183 
184 // ------------------------------------------------------------------
185 // ciBytecodeStream::get_klass
186 //
187 // If this bytecode is a new, newarray, multianewarray, instanceof,
188 // or checkcast, get the referenced klass.
189 ciKlass* ciBytecodeStream::get_klass(bool& will_link) {
190   VM_ENTRY_MARK;
191   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
192   return CURRENT_ENV->get_klass_by_index(cpool, get_klass_index(), will_link, _holder);
193 }
194 
195 // ------------------------------------------------------------------
196 // ciBytecodeStream::is_inline_klass
197 //
198 // Check if the klass is an inline klass.
199 bool ciBytecodeStream::has_Q_signature() const {
200   VM_ENTRY_MARK;
201   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
202   return CURRENT_ENV->has_Q_signature(cpool, get_klass_index());
203 }
204 
205 // ------------------------------------------------------------------
206 // ciBytecodeStream::get_constant_raw_index
207 //
208 // If this bytecode is one of the ldc variants, get the index of the
209 // referenced constant.
210 int ciBytecodeStream::get_constant_raw_index() const {
211   // work-alike for Bytecode_loadconstant::raw_index()
212   switch (cur_bc()) {
213   case Bytecodes::_ldc:
214     return get_index_u1();
215   case Bytecodes::_ldc_w:
216   case Bytecodes::_ldc2_w:
217     return get_index_u2();
218   default:
219     ShouldNotReachHere();
220     return 0;
221   }
222 }
223 
224 // ------------------------------------------------------------------
225 // ciBytecodeStream::get_constant_pool_index
226 // Decode any reference index into a regular pool index.
227 int ciBytecodeStream::get_constant_pool_index() const {
228   // work-alike for Bytecode_loadconstant::pool_index()
229   int index = get_constant_raw_index();
230   if (has_cache_index()) {
231     VM_ENTRY_MARK;
232     constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
233     return cpool->object_to_cp_index(index);
234   }
235   return index;
236 }
237 
238 // ------------------------------------------------------------------
239 // ciBytecodeStream::get_constant
240 //
241 // If this bytecode is one of the ldc variants, get the referenced
242 // constant.
243 ciConstant ciBytecodeStream::get_constant() {
244   int pool_index = get_constant_raw_index();
245   int cache_index = -1;
246   if (has_cache_index()) {
247     cache_index = pool_index;
248     pool_index = -1;
249   }
250   VM_ENTRY_MARK;
251   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
252   return CURRENT_ENV->get_constant_by_index(cpool, pool_index, cache_index, _holder);
253 }
254 
255 // ------------------------------------------------------------------
256 // ciBytecodeStream::get_constant_pool_tag
257 //
258 // If this bytecode is one of the ldc variants, get the referenced
259 // constant.
260 constantTag ciBytecodeStream::get_constant_pool_tag(int index) const {
261   VM_ENTRY_MARK;
262   return _method->get_Method()->constants()->constant_tag_at(index);
263 }
264 
265 // ------------------------------------------------------------------
266 // ciBytecodeStream::get_field_index
267 //
268 // If this is a field access bytecode, get the constant pool
269 // index of the referenced field.
270 int ciBytecodeStream::get_field_index() {
271   assert(cur_bc() == Bytecodes::_getfield ||
272          cur_bc() == Bytecodes::_putfield ||
273          cur_bc() == Bytecodes::_getstatic ||
274          cur_bc() == Bytecodes::_putstatic ||
275          cur_bc() == Bytecodes::_withfield, "wrong bc");
276   return get_index_u2_cpcache();
277 }
278 
279 
280 // ------------------------------------------------------------------
281 // ciBytecodeStream::get_field
282 //
283 // If this bytecode is one of get_field, get_static, put_field,
284 // or put_static, get the referenced field.
285 ciField* ciBytecodeStream::get_field(bool& will_link) {
286   ciField* f = CURRENT_ENV->get_field_by_index(_holder, get_field_index());
287   will_link = f->will_link(_method, _bc);
288   return f;
289 }
290 
291 
292 // ------------------------------------------------------------------
293 // ciBytecodeStream::get_declared_field_holder
294 //
295 // Get the declared holder of the currently referenced field.
296 //
297 // Usage note: the holder() of a ciField class returns the canonical
298 // holder of the field, rather than the holder declared in the
299 // bytecodes.
300 //
301 // There is no "will_link" result passed back.  The user is responsible
302 // for checking linkability when retrieving the associated field.
303 ciInstanceKlass* ciBytecodeStream::get_declared_field_holder() {
304   VM_ENTRY_MARK;
305   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
306   int holder_index = get_field_holder_index();
307   bool ignore;
308   return CURRENT_ENV->get_klass_by_index(cpool, holder_index, ignore, _holder)
309       ->as_instance_klass();
310 }
311 
312 // ------------------------------------------------------------------
313 // ciBytecodeStream::get_field_holder_index
314 //
315 // Get the constant pool index of the declared holder of the field
316 // referenced by the current bytecode.  Used for generating
317 // deoptimization information.
318 int ciBytecodeStream::get_field_holder_index() {
319   GUARDED_VM_ENTRY(
320     ConstantPool* cpool = _holder->get_instanceKlass()->constants();
321     return cpool->klass_ref_index_at(get_field_index());
322   )
323 }
324 
325 // ------------------------------------------------------------------
326 // ciBytecodeStream::get_method_index
327 //
328 // If this is a method invocation bytecode, get the constant pool
329 // index of the invoked method.
330 int ciBytecodeStream::get_method_index() {
331   assert(Bytecodes::is_invoke(cur_bc()), "invalid bytecode: %s", Bytecodes::name(cur_bc()));
332   if (has_index_u4())
333     return get_index_u4();  // invokedynamic
334   return get_index_u2_cpcache();
335 }
336 
337 // ------------------------------------------------------------------
338 // ciBytecodeStream::get_method
339 //
340 // If this is a method invocation bytecode, get the invoked method.
341 // Additionally return the declared signature to get more concrete
342 // type information if required (Cf. invokedynamic and invokehandle).
343 ciMethod* ciBytecodeStream::get_method(bool& will_link, ciSignature* *declared_signature_result) {
344   VM_ENTRY_MARK;
345   ciEnv* env = CURRENT_ENV;
346   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
347   ciMethod* m = env->get_method_by_index(cpool, get_method_index(), cur_bc(), _holder);
348   will_link = m->is_loaded();
349 
350   // Use the signature stored in the CP cache to create a signature
351   // with correct types (in respect to class loaders).
352   //
353   // In classic Java (before Java 7) there is never the slightest
354   // difference between the signature at the call site and that of the
355   // method.  Such a difference would have been a type error in the
356   // JVM.
357   //
358   // Now there are a few circumstances where the signature of a call
359   // site (which controls the outgoing stacked arguments) can differ
360   // from the signature of the method (which controls the receipt of
361   // those arguments at the method entry point).
362   //
363   // A. The signatures can differ if the callee is a static method and
364   // the caller thinks it is calling a non-static method (VH.get).
365   // This requires the method signature to have an explicit leading
366   // argument for the implicit 'this', not present at the call site.
367   //
368   // B. The call site can have less specific parameter types than the
369   // method, allowing loosely-typed code to handle strongly-typed
370   // methods.  This happens with linkToStatic and related linker
371   // commands.  Obviously the loosely-typed code has to ensure that
372   // the strongly typed method's invariants are respected, and this is
373   // done by issuing dynamic casts.
374   //
375   // C. The call site can have more specific parameter types than the
376   // method, allowing loosely-typed methods to handle strongly-typed
377   // requests.
378   //
379   // D. There are corresponding effects with return values, such as
380   // boolean method returning an int to an int-receiving call site,
381   // even though the method thought it returned just a boolean.
382   //
383   // E. The calling sequence at a particular call site may add an
384   // "appendix" argument not mentioned in the call site signature.  It
385   // is expected by the method signature, though, and this adds to the
386   // method's arity, even after 'this' parameter effects (A) are
387   // discounted.  Appendixes are used by invokehandle and
388   // invokedynamic instructions.
389   //
390   // F. A linker method (linkToStatic, etc.) can also take an extra
391   // argument, a MemberName which routes the call to a concrete
392   // strongly-typed method.  In this case the linker method may also
393   // differ in any of the ways A-D.  The eventual method will ignore
394   // the presence of the extra argument.
395   //
396   // None of these changes to calling sequences requires an argument
397   // to be moved or reformatted in any way.  This works because all
398   // references look alike to the JVM, as do all primitives (except
399   // float/long/double).  Another required property of the JVM is
400   // that, if a trailing argument is added or dropped, the placement
401   // of other arguments does not change.  This allows cases E and F to
402   // work smoothly, against without any moving or reformatting,
403   // despite the arity change.
404   //
405   if (has_local_signature()) {
406     Symbol* local_signature = cpool->symbol_at(get_method_signature_index(cpool));
407     ciSymbol* sig_sym  = env->get_symbol(local_signature);
408     ciKlass* pool_holder = env->get_klass(cpool->pool_holder());
409     ciSignature* call_site_sig = new (env->arena()) ciSignature(pool_holder, cpool, sig_sym);
410     // Examples of how the call site signature can differ from the method's own signature:
411     //
412     //  meth = static jboolean java.lang.invoke.VarHandleGuards.guard_LII_Z(jobject, jobject, jint, jint, jobject)
413     //  msig = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/VarHandle$AccessDescriptor;)Z
414     //  call = (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;II)Z
415     //
416     //  meth = static jobject java.lang.invoke.LambdaForm$MH/0x0000000800066840.linkToTargetMethod(jobject, jobject)
417     //  msig = (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
418     //  call = (Ljava/lang/String;)Ljava/util/function/Predicate;
419     //
420     (*declared_signature_result) = call_site_sig;
421 
422   } else {
423     // We can just use the method's own signature.  It may differ from the call site, but not by much.
424     //
425     // Examples of how the call site signature can differ from the method's signature:
426     //
427     // meth = static final native jint java.lang.invoke.MethodHandle.linkToStatic(jobject, jobject, jint, jint, jobject)
428     // msig = (Ljava/lang/Object;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)I
429     // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;IILjava/lang/invoke/MemberName;)Z
430     //
431     // meth = final native jint java.lang.invoke.MethodHandle.invokeBasic(jobject, jobject, jint, jint)
432     // msig = (Ljava/lang/Object;Ljava/lang/Object;II)I
433     // call = (Ljava/lang/invoke/VarHandle;Ljava/lang/Object;II)Z
434     //
435     (*declared_signature_result) = m->signature();
436   }
437   return m;
438 }
439 
440 // ------------------------------------------------------------------
441 // ciBytecodeStream::has_appendix
442 //
443 // Returns true if there is an appendix argument stored in the
444 // constant pool cache at the current bci.
445 bool ciBytecodeStream::has_appendix() {
446   VM_ENTRY_MARK;
447   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
448   return ConstantPool::has_appendix_at_if_loaded(cpool, get_method_index());
449 }
450 
451 // ------------------------------------------------------------------
452 // ciBytecodeStream::get_appendix
453 //
454 // Return the appendix argument stored in the constant pool cache at
455 // the current bci.
456 ciObject* ciBytecodeStream::get_appendix() {
457   VM_ENTRY_MARK;
458   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
459   oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, get_method_index());
460   return CURRENT_ENV->get_object(appendix_oop);
461 }
462 
463 // ------------------------------------------------------------------
464 // ciBytecodeStream::has_local_signature
465 //
466 // Returns true if the method stored in the constant
467 // pool cache at the current bci has a local signature.
468 bool ciBytecodeStream::has_local_signature() {
469   GUARDED_VM_ENTRY(
470     constantPoolHandle cpool(Thread::current(), _method->get_Method()->constants());
471     return ConstantPool::has_local_signature_at_if_loaded(cpool, get_method_index());
472   )
473 }
474 
475 // ------------------------------------------------------------------
476 // ciBytecodeStream::get_declared_method_holder
477 //
478 // Get the declared holder of the currently referenced method.
479 //
480 // Usage note: the holder() of a ciMethod class returns the canonical
481 // holder of the method, rather than the holder declared in the
482 // bytecodes.
483 //
484 // There is no "will_link" result passed back.  The user is responsible
485 // for checking linkability when retrieving the associated method.
486 ciKlass* ciBytecodeStream::get_declared_method_holder() {
487   VM_ENTRY_MARK;
488   constantPoolHandle cpool(THREAD, _method->get_Method()->constants());
489   bool ignore;
490   // report as MethodHandle for invokedynamic, which is syntactically classless
491   if (cur_bc() == Bytecodes::_invokedynamic)
492     return CURRENT_ENV->get_klass_by_name(_holder, ciSymbols::java_lang_invoke_MethodHandle(), false);
493   return CURRENT_ENV->get_klass_by_index(cpool, get_method_holder_index(), ignore, _holder);
494 }
495 
496 // ------------------------------------------------------------------
497 // ciBytecodeStream::get_method_holder_index
498 //
499 // Get the constant pool index of the declared holder of the method
500 // referenced by the current bytecode.  Used for generating
501 // deoptimization information.
502 int ciBytecodeStream::get_method_holder_index() {
503   ConstantPool* cpool = _method->get_Method()->constants();
504   return cpool->klass_ref_index_at(get_method_index());
505 }
506 
507 // ------------------------------------------------------------------
508 // ciBytecodeStream::get_method_signature_index
509 //
510 // Get the constant pool index of the signature of the method
511 // referenced by the current bytecode.  Used for generating
512 // deoptimization information.
513 int ciBytecodeStream::get_method_signature_index(const constantPoolHandle& cpool) {
514   GUARDED_VM_ENTRY(
515     const int method_index = get_method_index();
516     const int name_and_type_index = cpool->name_and_type_ref_index_at(method_index);
517     return cpool->signature_ref_index_at(name_and_type_index);
518   )
519 }
520