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