klassVtable.cpp revision 6412:53a41e7cbe05
1/*
2 * Copyright (c) 1997, 2014, 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 "classfile/systemDictionary.hpp"
27#include "classfile/vmSymbols.hpp"
28#include "gc_implementation/shared/markSweep.inline.hpp"
29#include "memory/gcLocker.hpp"
30#include "memory/resourceArea.hpp"
31#include "memory/universe.inline.hpp"
32#include "oops/instanceKlass.hpp"
33#include "oops/klassVtable.hpp"
34#include "oops/method.hpp"
35#include "oops/objArrayOop.hpp"
36#include "oops/oop.inline.hpp"
37#include "prims/jvmtiRedefineClassesTrace.hpp"
38#include "runtime/arguments.hpp"
39#include "runtime/handles.inline.hpp"
40#include "utilities/copy.hpp"
41
42PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
43
44inline InstanceKlass* klassVtable::ik() const {
45  Klass* k = _klass();
46  assert(k->oop_is_instance(), "not an InstanceKlass");
47  return (InstanceKlass*)k;
48}
49
50
51// this function computes the vtable size (including the size needed for miranda
52// methods) and the number of miranda methods in this class.
53// Note on Miranda methods: Let's say there is a class C that implements
54// interface I, and none of C's superclasses implements I.
55// Let's say there is an abstract method m in I that neither C
56// nor any of its super classes implement (i.e there is no method of any access,
57// with the same name and signature as m), then m is a Miranda method which is
58// entered as a public abstract method in C's vtable.  From then on it should
59// treated as any other public method in C for method over-ride purposes.
60void klassVtable::compute_vtable_size_and_num_mirandas(
61    int* vtable_length_ret, int* num_new_mirandas,
62    GrowableArray<Method*>* all_mirandas, Klass* super,
63    Array<Method*>* methods, AccessFlags class_flags,
64    Handle classloader, Symbol* classname, Array<Klass*>* local_interfaces,
65    TRAPS) {
66  No_Safepoint_Verifier nsv;
67
68  // set up default result values
69  int vtable_length = 0;
70
71  // start off with super's vtable length
72  InstanceKlass* sk = (InstanceKlass*)super;
73  vtable_length = super == NULL ? 0 : sk->vtable_length();
74
75  // go thru each method in the methods table to see if it needs a new entry
76  int len = methods->length();
77  for (int i = 0; i < len; i++) {
78    assert(methods->at(i)->is_method(), "must be a Method*");
79    methodHandle mh(THREAD, methods->at(i));
80
81    if (needs_new_vtable_entry(mh, super, classloader, classname, class_flags, THREAD)) {
82      vtable_length += vtableEntry::size(); // we need a new entry
83    }
84  }
85
86  GrowableArray<Method*> new_mirandas(20);
87  // compute the number of mirandas methods that must be added to the end
88  get_mirandas(&new_mirandas, all_mirandas, super, methods, NULL, local_interfaces);
89  *num_new_mirandas = new_mirandas.length();
90
91  // Interfaces do not need interface methods in their vtables
92  // This includes miranda methods and during later processing, default methods
93  if (!class_flags.is_interface()) {
94    vtable_length += *num_new_mirandas * vtableEntry::size();
95  }
96
97  if (Universe::is_bootstrapping() && vtable_length == 0) {
98    // array classes don't have their superclass set correctly during
99    // bootstrapping
100    vtable_length = Universe::base_vtable_size();
101  }
102
103  if (super == NULL && !Universe::is_bootstrapping() &&
104      vtable_length != Universe::base_vtable_size()) {
105    // Someone is attempting to redefine java.lang.Object incorrectly.  The
106    // only way this should happen is from
107    // SystemDictionary::resolve_from_stream(), which will detect this later
108    // and throw a security exception.  So don't assert here to let
109    // the exception occur.
110    vtable_length = Universe::base_vtable_size();
111  }
112  assert(super != NULL || vtable_length == Universe::base_vtable_size(),
113         "bad vtable size for class Object");
114  assert(vtable_length % vtableEntry::size() == 0, "bad vtable length");
115  assert(vtable_length >= Universe::base_vtable_size(), "vtable too small");
116
117  *vtable_length_ret = vtable_length;
118}
119
120int klassVtable::index_of(Method* m, int len) const {
121  assert(m->has_vtable_index(), "do not ask this of non-vtable methods");
122  return m->vtable_index();
123}
124
125// Copy super class's vtable to the first part (prefix) of this class's vtable,
126// and return the number of entries copied.  Expects that 'super' is the Java
127// super class (arrays can have "array" super classes that must be skipped).
128int klassVtable::initialize_from_super(KlassHandle super) {
129  if (super.is_null()) {
130    return 0;
131  } else {
132    // copy methods from superKlass
133    // can't inherit from array class, so must be InstanceKlass
134    assert(super->oop_is_instance(), "must be instance klass");
135    InstanceKlass* sk = (InstanceKlass*)super();
136    klassVtable* superVtable = sk->vtable();
137    assert(superVtable->length() <= _length, "vtable too short");
138#ifdef ASSERT
139    superVtable->verify(tty, true);
140#endif
141    superVtable->copy_vtable_to(table());
142#ifndef PRODUCT
143    if (PrintVtables && Verbose) {
144      ResourceMark rm;
145      tty->print_cr("copy vtable from %s to %s size %d", sk->internal_name(), klass()->internal_name(), _length);
146    }
147#endif
148    return superVtable->length();
149  }
150}
151
152//
153// Revised lookup semantics   introduced 1.3 (Kestrel beta)
154void klassVtable::initialize_vtable(bool checkconstraints, TRAPS) {
155
156  // Note:  Arrays can have intermediate array supers.  Use java_super to skip them.
157  KlassHandle super (THREAD, klass()->java_super());
158  int nofNewEntries = 0;
159
160  if (PrintVtables && !klass()->oop_is_array()) {
161    ResourceMark rm(THREAD);
162    tty->print_cr("Initializing: %s", _klass->name()->as_C_string());
163  }
164
165#ifdef ASSERT
166  oop* end_of_obj = (oop*)_klass() + _klass()->size();
167  oop* end_of_vtable = (oop*)&table()[_length];
168  assert(end_of_vtable <= end_of_obj, "vtable extends beyond end");
169#endif
170
171  if (Universe::is_bootstrapping()) {
172    // just clear everything
173    for (int i = 0; i < _length; i++) table()[i].clear();
174    return;
175  }
176
177  int super_vtable_len = initialize_from_super(super);
178  if (klass()->oop_is_array()) {
179    assert(super_vtable_len == _length, "arrays shouldn't introduce new methods");
180  } else {
181    assert(_klass->oop_is_instance(), "must be InstanceKlass");
182
183    Array<Method*>* methods = ik()->methods();
184    int len = methods->length();
185    int initialized = super_vtable_len;
186
187    // Check each of this class's methods against super;
188    // if override, replace in copy of super vtable, otherwise append to end
189    for (int i = 0; i < len; i++) {
190      // update_inherited_vtable can stop for gc - ensure using handles
191      HandleMark hm(THREAD);
192      assert(methods->at(i)->is_method(), "must be a Method*");
193      methodHandle mh(THREAD, methods->at(i));
194
195      bool needs_new_entry = update_inherited_vtable(ik(), mh, super_vtable_len, -1, checkconstraints, CHECK);
196
197      if (needs_new_entry) {
198        put_method_at(mh(), initialized);
199        mh()->set_vtable_index(initialized); // set primary vtable index
200        initialized++;
201      }
202    }
203
204    // update vtable with default_methods
205    Array<Method*>* default_methods = ik()->default_methods();
206    if (default_methods != NULL) {
207      len = default_methods->length();
208      if (len > 0) {
209        Array<int>* def_vtable_indices = NULL;
210        if ((def_vtable_indices = ik()->default_vtable_indices()) == NULL) {
211          def_vtable_indices = ik()->create_new_default_vtable_indices(len, CHECK);
212        } else {
213          assert(def_vtable_indices->length() == len, "reinit vtable len?");
214        }
215        for (int i = 0; i < len; i++) {
216          HandleMark hm(THREAD);
217          assert(default_methods->at(i)->is_method(), "must be a Method*");
218          methodHandle mh(THREAD, default_methods->at(i));
219
220          bool needs_new_entry = update_inherited_vtable(ik(), mh, super_vtable_len, i, checkconstraints, CHECK);
221
222          // needs new entry
223          if (needs_new_entry) {
224            put_method_at(mh(), initialized);
225            def_vtable_indices->at_put(i, initialized); //set vtable index
226            initialized++;
227          }
228        }
229      }
230    }
231
232    // add miranda methods; it will also return the updated initialized
233    // Interfaces do not need interface methods in their vtables
234    // This includes miranda methods and during later processing, default methods
235    if (!ik()->is_interface()) {
236      initialized = fill_in_mirandas(initialized);
237    }
238
239    // In class hierarchies where the accessibility is not increasing (i.e., going from private ->
240    // package_private -> public/protected), the vtable might actually be smaller than our initial
241    // calculation.
242    assert(initialized <= _length, "vtable initialization failed");
243    for(;initialized < _length; initialized++) {
244      put_method_at(NULL, initialized);
245    }
246    NOT_PRODUCT(verify(tty, true));
247  }
248}
249
250// Called for cases where a method does not override its superclass' vtable entry
251// For bytecodes not produced by javac together it is possible that a method does not override
252// the superclass's method, but might indirectly override a super-super class's vtable entry
253// If none found, return a null superk, else return the superk of the method this does override
254InstanceKlass* klassVtable::find_transitive_override(InstanceKlass* initialsuper, methodHandle target_method,
255                            int vtable_index, Handle target_loader, Symbol* target_classname, Thread * THREAD) {
256  InstanceKlass* superk = initialsuper;
257  while (superk != NULL && superk->super() != NULL) {
258    InstanceKlass* supersuperklass = InstanceKlass::cast(superk->super());
259    klassVtable* ssVtable = supersuperklass->vtable();
260    if (vtable_index < ssVtable->length()) {
261      Method* super_method = ssVtable->method_at(vtable_index);
262#ifndef PRODUCT
263      Symbol* name= target_method()->name();
264      Symbol* signature = target_method()->signature();
265      assert(super_method->name() == name && super_method->signature() == signature, "vtable entry name/sig mismatch");
266#endif
267      if (supersuperklass->is_override(super_method, target_loader, target_classname, THREAD)) {
268#ifndef PRODUCT
269        if (PrintVtables && Verbose) {
270          ResourceMark rm(THREAD);
271          char* sig = target_method()->name_and_sig_as_C_string();
272          tty->print("transitive overriding superclass %s with %s::%s index %d, original flags: ",
273           supersuperklass->internal_name(),
274           _klass->internal_name(), sig, vtable_index);
275           super_method->access_flags().print_on(tty);
276           if (super_method->is_default_method()) {
277             tty->print("default ");
278           }
279           tty->print("overriders flags: ");
280           target_method->access_flags().print_on(tty);
281           if (target_method->is_default_method()) {
282             tty->print("default ");
283           }
284        }
285#endif /*PRODUCT*/
286        break; // return found superk
287      }
288    } else  {
289      // super class has no vtable entry here, stop transitive search
290      superk = (InstanceKlass*)NULL;
291      break;
292    }
293    // if no override found yet, continue to search up
294    superk = InstanceKlass::cast(superk->super());
295  }
296
297  return superk;
298}
299
300// Update child's copy of super vtable for overrides
301// OR return true if a new vtable entry is required.
302// Only called for InstanceKlass's, i.e. not for arrays
303// If that changed, could not use _klass as handle for klass
304bool klassVtable::update_inherited_vtable(InstanceKlass* klass, methodHandle target_method,
305                                          int super_vtable_len, int default_index,
306                                          bool checkconstraints, TRAPS) {
307  ResourceMark rm;
308  bool allocate_new = true;
309  assert(klass->oop_is_instance(), "must be InstanceKlass");
310
311  Array<int>* def_vtable_indices = NULL;
312  bool is_default = false;
313  // default methods are concrete methods in superinterfaces which are added to the vtable
314  // with their real method_holder
315  // Since vtable and itable indices share the same storage, don't touch
316  // the default method's real vtable/itable index
317  // default_vtable_indices stores the vtable value relative to this inheritor
318  if (default_index >= 0 ) {
319    is_default = true;
320    def_vtable_indices = klass->default_vtable_indices();
321    assert(def_vtable_indices != NULL, "def vtable alloc?");
322    assert(default_index <= def_vtable_indices->length(), "def vtable len?");
323  } else {
324    assert(klass == target_method()->method_holder(), "caller resp.");
325    // Initialize the method's vtable index to "nonvirtual".
326    // If we allocate a vtable entry, we will update it to a non-negative number.
327    target_method()->set_vtable_index(Method::nonvirtual_vtable_index);
328  }
329
330  // Static and <init> methods are never in
331  if (target_method()->is_static() || target_method()->name() ==  vmSymbols::object_initializer_name()) {
332    return false;
333  }
334
335  if (target_method->is_final_method(klass->access_flags())) {
336    // a final method never needs a new entry; final methods can be statically
337    // resolved and they have to be present in the vtable only if they override
338    // a super's method, in which case they re-use its entry
339    allocate_new = false;
340  } else if (klass->is_interface()) {
341    allocate_new = false;  // see note below in needs_new_vtable_entry
342    // An interface never allocates new vtable slots, only inherits old ones.
343    // This method will either be assigned its own itable index later,
344    // or be assigned an inherited vtable index in the loop below.
345    // default methods inherited by classes store their vtable indices
346    // in the inheritor's default_vtable_indices
347    // default methods inherited by interfaces may already have a
348    // valid itable index, if so, don't change it
349    // overpass methods in an interface will be assigned an itable index later
350    // by an inheriting class
351    if (!is_default || !target_method()->has_itable_index()) {
352      target_method()->set_vtable_index(Method::pending_itable_index);
353    }
354  }
355
356  // we need a new entry if there is no superclass
357  if (klass->super() == NULL) {
358    return allocate_new;
359  }
360
361  // private methods in classes always have a new entry in the vtable
362  // specification interpretation since classic has
363  // private methods not overriding
364  // JDK8 adds private methods in interfaces which require invokespecial
365  if (target_method()->is_private()) {
366    return allocate_new;
367  }
368
369  // search through the vtable and update overridden entries
370  // Since check_signature_loaders acquires SystemDictionary_lock
371  // which can block for gc, once we are in this loop, use handles
372  // For classfiles built with >= jdk7, we now look for transitive overrides
373
374  Symbol* name = target_method()->name();
375  Symbol* signature = target_method()->signature();
376
377  KlassHandle target_klass(THREAD, target_method()->method_holder());
378  if (target_klass == NULL) {
379    target_klass = _klass;
380  }
381
382  Handle target_loader(THREAD, target_klass->class_loader());
383
384  Symbol* target_classname = target_klass->name();
385  for(int i = 0; i < super_vtable_len; i++) {
386    Method* super_method = method_at(i);
387    // Check if method name matches
388    if (super_method->name() == name && super_method->signature() == signature) {
389
390      // get super_klass for method_holder for the found method
391      InstanceKlass* super_klass =  super_method->method_holder();
392
393      if (is_default
394          || ((super_klass->is_override(super_method, target_loader, target_classname, THREAD))
395          || ((klass->major_version() >= VTABLE_TRANSITIVE_OVERRIDE_VERSION)
396          && ((super_klass = find_transitive_override(super_klass,
397                             target_method, i, target_loader,
398                             target_classname, THREAD))
399                             != (InstanceKlass*)NULL))))
400        {
401        // overriding, so no new entry
402        allocate_new = false;
403
404        if (checkconstraints) {
405        // Override vtable entry if passes loader constraint check
406        // if loader constraint checking requested
407        // No need to visit his super, since he and his super
408        // have already made any needed loader constraints.
409        // Since loader constraints are transitive, it is enough
410        // to link to the first super, and we get all the others.
411          Handle super_loader(THREAD, super_klass->class_loader());
412
413          if (target_loader() != super_loader()) {
414            ResourceMark rm(THREAD);
415            Symbol* failed_type_symbol =
416              SystemDictionary::check_signature_loaders(signature, target_loader,
417                                                        super_loader, true,
418                                                        CHECK_(false));
419            if (failed_type_symbol != NULL) {
420              const char* msg = "loader constraint violation: when resolving "
421                "overridden method \"%s\" the class loader (instance"
422                " of %s) of the current class, %s, and its superclass loader "
423                "(instance of %s), have different Class objects for the type "
424                "%s used in the signature";
425              char* sig = target_method()->name_and_sig_as_C_string();
426              const char* loader1 = SystemDictionary::loader_name(target_loader());
427              char* current = target_klass->name()->as_C_string();
428              const char* loader2 = SystemDictionary::loader_name(super_loader());
429              char* failed_type_name = failed_type_symbol->as_C_string();
430              size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) +
431                strlen(current) + strlen(loader2) + strlen(failed_type_name);
432              char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
433              jio_snprintf(buf, buflen, msg, sig, loader1, current, loader2,
434                           failed_type_name);
435              THROW_MSG_(vmSymbols::java_lang_LinkageError(), buf, false);
436            }
437          }
438       }
439
440       put_method_at(target_method(), i);
441       if (!is_default) {
442         target_method()->set_vtable_index(i);
443       } else {
444         if (def_vtable_indices != NULL) {
445           def_vtable_indices->at_put(default_index, i);
446         }
447         assert(super_method->is_default_method() || super_method->is_overpass()
448                || super_method->is_abstract(), "default override error");
449       }
450
451
452#ifndef PRODUCT
453        if (PrintVtables && Verbose) {
454          ResourceMark rm(THREAD);
455          char* sig = target_method()->name_and_sig_as_C_string();
456          tty->print("overriding with %s::%s index %d, original flags: ",
457           target_klass->internal_name(), sig, i);
458           super_method->access_flags().print_on(tty);
459           if (super_method->is_default_method()) {
460             tty->print("default ");
461           }
462           if (super_method->is_overpass()) {
463             tty->print("overpass");
464           }
465           tty->print("overriders flags: ");
466           target_method->access_flags().print_on(tty);
467           if (target_method->is_default_method()) {
468             tty->print("default ");
469           }
470           if (target_method->is_overpass()) {
471             tty->print("overpass");
472           }
473           tty->cr();
474        }
475#endif /*PRODUCT*/
476      } else {
477        // allocate_new = true; default. We might override one entry,
478        // but not override another. Once we override one, not need new
479#ifndef PRODUCT
480        if (PrintVtables && Verbose) {
481          ResourceMark rm(THREAD);
482          char* sig = target_method()->name_and_sig_as_C_string();
483          tty->print("NOT overriding with %s::%s index %d, original flags: ",
484           target_klass->internal_name(), sig,i);
485           super_method->access_flags().print_on(tty);
486           if (super_method->is_default_method()) {
487             tty->print("default ");
488           }
489           if (super_method->is_overpass()) {
490             tty->print("overpass");
491           }
492           tty->print("overriders flags: ");
493           target_method->access_flags().print_on(tty);
494           if (target_method->is_default_method()) {
495             tty->print("default ");
496           }
497           if (target_method->is_overpass()) {
498             tty->print("overpass");
499           }
500           tty->cr();
501        }
502#endif /*PRODUCT*/
503      }
504    }
505  }
506  return allocate_new;
507}
508
509void klassVtable::put_method_at(Method* m, int index) {
510#ifndef PRODUCT
511  if (PrintVtables && Verbose) {
512    ResourceMark rm;
513    const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>";
514    tty->print("adding %s at index %d, flags: ", sig, index);
515    if (m != NULL) {
516      m->access_flags().print_on(tty);
517      if (m->is_default_method()) {
518        tty->print("default ");
519      }
520      if (m->is_overpass()) {
521        tty->print("overpass");
522      }
523    }
524    tty->cr();
525  }
526#endif
527  table()[index].set(m);
528}
529
530// Find out if a method "m" with superclass "super", loader "classloader" and
531// name "classname" needs a new vtable entry.  Let P be a class package defined
532// by "classloader" and "classname".
533// NOTE: The logic used here is very similar to the one used for computing
534// the vtables indices for a method. We cannot directly use that function because,
535// we allocate the InstanceKlass at load time, and that requires that the
536// superclass has been loaded.
537// However, the vtable entries are filled in at link time, and therefore
538// the superclass' vtable may not yet have been filled in.
539bool klassVtable::needs_new_vtable_entry(methodHandle target_method,
540                                         Klass* super,
541                                         Handle classloader,
542                                         Symbol* classname,
543                                         AccessFlags class_flags,
544                                         TRAPS) {
545  if (class_flags.is_interface()) {
546    // Interfaces do not use vtables, so there is no point to assigning
547    // a vtable index to any of their methods.  If we refrain from doing this,
548    // we can use Method::_vtable_index to hold the itable index
549    return false;
550  }
551
552  if (target_method->is_final_method(class_flags) ||
553      // a final method never needs a new entry; final methods can be statically
554      // resolved and they have to be present in the vtable only if they override
555      // a super's method, in which case they re-use its entry
556      (target_method()->is_static()) ||
557      // static methods don't need to be in vtable
558      (target_method()->name() ==  vmSymbols::object_initializer_name())
559      // <init> is never called dynamically-bound
560      ) {
561    return false;
562  }
563
564  // Concrete interface methods do not need new entries, they override
565  // abstract method entries using default inheritance rules
566  if (target_method()->method_holder() != NULL &&
567      target_method()->method_holder()->is_interface()  &&
568      !target_method()->is_abstract() ) {
569    return false;
570  }
571
572  // we need a new entry if there is no superclass
573  if (super == NULL) {
574    return true;
575  }
576
577  // private methods in classes always have a new entry in the vtable
578  // specification interpretation since classic has
579  // private methods not overriding
580  // JDK8 adds private  methods in interfaces which require invokespecial
581  if (target_method()->is_private()) {
582    return true;
583  }
584
585  // search through the super class hierarchy to see if we need
586  // a new entry
587  ResourceMark rm;
588  Symbol* name = target_method()->name();
589  Symbol* signature = target_method()->signature();
590  Klass* k = super;
591  Method* super_method = NULL;
592  InstanceKlass *holder = NULL;
593  Method* recheck_method =  NULL;
594  while (k != NULL) {
595    // lookup through the hierarchy for a method with matching name and sign.
596    super_method = InstanceKlass::cast(k)->lookup_method(name, signature);
597    if (super_method == NULL) {
598      break; // we still have to search for a matching miranda method
599    }
600    // get the class holding the matching method
601    // make sure you use that class for is_override
602    InstanceKlass* superk = super_method->method_holder();
603    // we want only instance method matches
604    // pretend private methods are not in the super vtable
605    // since we do override around them: e.g. a.m pub/b.m private/c.m pub,
606    // ignore private, c.m pub does override a.m pub
607    // For classes that were not javac'd together, we also do transitive overriding around
608    // methods that have less accessibility
609    if ((!super_method->is_static()) &&
610       (!super_method->is_private())) {
611      if (superk->is_override(super_method, classloader, classname, THREAD)) {
612        return false;
613      // else keep looking for transitive overrides
614      }
615    }
616
617    // Start with lookup result and continue to search up
618    k = superk->super(); // haven't found an override match yet; continue to look
619  }
620
621  // if the target method is public or protected it may have a matching
622  // miranda method in the super, whose entry it should re-use.
623  // Actually, to handle cases that javac would not generate, we need
624  // this check for all access permissions.
625  InstanceKlass *sk = InstanceKlass::cast(super);
626  if (sk->has_miranda_methods()) {
627    if (sk->lookup_method_in_all_interfaces(name, signature, Klass::normal) != NULL) {
628      return false;  // found a matching miranda; we do not need a new entry
629    }
630  }
631  return true; // found no match; we need a new entry
632}
633
634// Support for miranda methods
635
636// get the vtable index of a miranda method with matching "name" and "signature"
637int klassVtable::index_of_miranda(Symbol* name, Symbol* signature) {
638  // search from the bottom, might be faster
639  for (int i = (length() - 1); i >= 0; i--) {
640    Method* m = table()[i].method();
641    if (is_miranda_entry_at(i) &&
642        m->name() == name && m->signature() == signature) {
643      return i;
644    }
645  }
646  return Method::invalid_vtable_index;
647}
648
649// check if an entry at an index is miranda
650// requires that method m at entry be declared ("held") by an interface.
651bool klassVtable::is_miranda_entry_at(int i) {
652  Method* m = method_at(i);
653  Klass* method_holder = m->method_holder();
654  InstanceKlass *mhk = InstanceKlass::cast(method_holder);
655
656  // miranda methods are public abstract instance interface methods in a class's vtable
657  if (mhk->is_interface()) {
658    assert(m->is_public(), "should be public");
659    assert(ik()->implements_interface(method_holder) , "this class should implement the interface");
660    // the search could find a miranda or a default method
661    if (is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super())) {
662      return true;
663    }
664  }
665  return false;
666}
667
668// check if a method is a miranda method, given a class's methods table,
669// its default_method table  and its super
670// Miranda methods are calculated twice:
671// first: before vtable size calculation: including abstract and default
672// This is seen by default method creation
673// Second: recalculated during vtable initialization: only abstract
674// This is seen by link resolution and selection.
675// "miranda" means not static, not defined by this class.
676// private methods in interfaces do not belong in the miranda list.
677// the caller must make sure that the method belongs to an interface implemented by the class
678// Miranda methods only include public interface instance methods
679// Not private methods, not static methods, not default == concrete abstract
680// Miranda methods also do not include overpass methods in interfaces
681bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
682                             Array<Method*>* default_methods, Klass* super) {
683  if (m->is_static() || m->is_private() || m->is_overpass()) {
684    return false;
685  }
686  Symbol* name = m->name();
687  Symbol* signature = m->signature();
688
689  if (InstanceKlass::find_instance_method(class_methods, name, signature) == NULL) {
690    // did not find it in the method table of the current class
691    if ((default_methods == NULL) ||
692        InstanceKlass::find_method(default_methods, name, signature) == NULL) {
693      if (super == NULL) {
694        // super doesn't exist
695        return true;
696      }
697
698      Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature);
699      while (mo != NULL && mo->access_flags().is_static()
700             && mo->method_holder() != NULL
701             && mo->method_holder()->super() != NULL)
702      {
703         mo = mo->method_holder()->super()->uncached_lookup_method(name, signature, Klass::normal);
704      }
705      if (mo == NULL || mo->access_flags().is_private() ) {
706        // super class hierarchy does not implement it or protection is different
707        return true;
708      }
709    }
710  }
711
712  return false;
713}
714
715// Scans current_interface_methods for miranda methods that do not
716// already appear in new_mirandas, or default methods,  and are also not defined-and-non-private
717// in super (superclass).  These mirandas are added to all_mirandas if it is
718// not null; in addition, those that are not duplicates of miranda methods
719// inherited by super from its interfaces are added to new_mirandas.
720// Thus, new_mirandas will be the set of mirandas that this class introduces,
721// all_mirandas will be the set of all mirandas applicable to this class
722// including all defined in superclasses.
723void klassVtable::add_new_mirandas_to_lists(
724    GrowableArray<Method*>* new_mirandas, GrowableArray<Method*>* all_mirandas,
725    Array<Method*>* current_interface_methods, Array<Method*>* class_methods,
726    Array<Method*>* default_methods, Klass* super) {
727
728  // iterate thru the current interface's method to see if it a miranda
729  int num_methods = current_interface_methods->length();
730  for (int i = 0; i < num_methods; i++) {
731    Method* im = current_interface_methods->at(i);
732    bool is_duplicate = false;
733    int num_of_current_mirandas = new_mirandas->length();
734    // check for duplicate mirandas in different interfaces we implement
735    for (int j = 0; j < num_of_current_mirandas; j++) {
736      Method* miranda = new_mirandas->at(j);
737      if ((im->name() == miranda->name()) &&
738          (im->signature() == miranda->signature())) {
739        is_duplicate = true;
740        break;
741      }
742    }
743
744    if (!is_duplicate) { // we don't want duplicate miranda entries in the vtable
745      if (is_miranda(im, class_methods, default_methods, super)) { // is it a miranda at all?
746        InstanceKlass *sk = InstanceKlass::cast(super);
747        // check if it is a duplicate of a super's miranda
748        if (sk->lookup_method_in_all_interfaces(im->name(), im->signature(), Klass::normal) == NULL) {
749          new_mirandas->append(im);
750        }
751        if (all_mirandas != NULL) {
752          all_mirandas->append(im);
753        }
754      }
755    }
756  }
757}
758
759void klassVtable::get_mirandas(GrowableArray<Method*>* new_mirandas,
760                               GrowableArray<Method*>* all_mirandas,
761                               Klass* super, Array<Method*>* class_methods,
762                               Array<Method*>* default_methods,
763                               Array<Klass*>* local_interfaces) {
764  assert((new_mirandas->length() == 0) , "current mirandas must be 0");
765
766  // iterate thru the local interfaces looking for a miranda
767  int num_local_ifs = local_interfaces->length();
768  for (int i = 0; i < num_local_ifs; i++) {
769    InstanceKlass *ik = InstanceKlass::cast(local_interfaces->at(i));
770    add_new_mirandas_to_lists(new_mirandas, all_mirandas,
771                              ik->methods(), class_methods,
772                              default_methods, super);
773    // iterate thru each local's super interfaces
774    Array<Klass*>* super_ifs = ik->transitive_interfaces();
775    int num_super_ifs = super_ifs->length();
776    for (int j = 0; j < num_super_ifs; j++) {
777      InstanceKlass *sik = InstanceKlass::cast(super_ifs->at(j));
778      add_new_mirandas_to_lists(new_mirandas, all_mirandas,
779                                sik->methods(), class_methods,
780                                default_methods, super);
781    }
782  }
783}
784
785// Discover miranda methods ("miranda" = "interface abstract, no binding"),
786// and append them into the vtable starting at index initialized,
787// return the new value of initialized.
788// Miranda methods use vtable entries, but do not get assigned a vtable_index
789// The vtable_index is discovered by searching from the end of the vtable
790int klassVtable::fill_in_mirandas(int initialized) {
791  GrowableArray<Method*> mirandas(20);
792  get_mirandas(&mirandas, NULL, ik()->super(), ik()->methods(),
793               ik()->default_methods(), ik()->local_interfaces());
794  for (int i = 0; i < mirandas.length(); i++) {
795    if (PrintVtables && Verbose) {
796      Method* meth = mirandas.at(i);
797      ResourceMark rm(Thread::current());
798      if (meth != NULL) {
799        char* sig = meth->name_and_sig_as_C_string();
800        tty->print("fill in mirandas with %s index %d, flags: ",
801          sig, initialized);
802        meth->access_flags().print_on(tty);
803        if (meth->is_default_method()) {
804          tty->print("default ");
805        }
806        tty->cr();
807      }
808    }
809    put_method_at(mirandas.at(i), initialized);
810    ++initialized;
811  }
812  return initialized;
813}
814
815// Copy this class's vtable to the vtable beginning at start.
816// Used to copy superclass vtable to prefix of subclass's vtable.
817void klassVtable::copy_vtable_to(vtableEntry* start) {
818  Copy::disjoint_words((HeapWord*)table(), (HeapWord*)start, _length * vtableEntry::size());
819}
820
821#if INCLUDE_JVMTI
822bool klassVtable::adjust_default_method(int vtable_index, Method* old_method, Method* new_method) {
823  // If old_method is default, find this vtable index in default_vtable_indices
824  // and replace that method in the _default_methods list
825  bool updated = false;
826
827  Array<Method*>* default_methods = ik()->default_methods();
828  if (default_methods != NULL) {
829    int len = default_methods->length();
830    for (int idx = 0; idx < len; idx++) {
831      if (vtable_index == ik()->default_vtable_indices()->at(idx)) {
832        if (default_methods->at(idx) == old_method) {
833          default_methods->at_put(idx, new_method);
834          updated = true;
835        }
836        break;
837      }
838    }
839  }
840  return updated;
841}
842void klassVtable::adjust_method_entries(Method** old_methods, Method** new_methods,
843                                        int methods_length, bool * trace_name_printed) {
844  // search the vtable for uses of either obsolete or EMCP methods
845  for (int j = 0; j < methods_length; j++) {
846    Method* old_method = old_methods[j];
847    Method* new_method = new_methods[j];
848
849    // In the vast majority of cases we could get the vtable index
850    // by using:  old_method->vtable_index()
851    // However, there are rare cases, eg. sun.awt.X11.XDecoratedPeer.getX()
852    // in sun.awt.X11.XFramePeer where methods occur more than once in the
853    // vtable, so, alas, we must do an exhaustive search.
854    for (int index = 0; index < length(); index++) {
855      if (unchecked_method_at(index) == old_method) {
856        put_method_at(new_method, index);
857          // For default methods, need to update the _default_methods array
858          // which can only have one method entry for a given signature
859          bool updated_default = false;
860          if (old_method->is_default_method()) {
861            updated_default = adjust_default_method(index, old_method, new_method);
862          }
863
864        if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
865          if (!(*trace_name_printed)) {
866            // RC_TRACE_MESG macro has an embedded ResourceMark
867            RC_TRACE_MESG(("adjust: klassname=%s for methods from name=%s",
868                           klass()->external_name(),
869                           old_method->method_holder()->external_name()));
870            *trace_name_printed = true;
871          }
872          // RC_TRACE macro has an embedded ResourceMark
873          RC_TRACE(0x00100000, ("vtable method update: %s(%s), updated default = %s",
874                                new_method->name()->as_C_string(),
875                                new_method->signature()->as_C_string(),
876                                updated_default ? "true" : "false"));
877        }
878        // cannot 'break' here; see for-loop comment above.
879      }
880    }
881  }
882}
883
884// a vtable should never contain old or obsolete methods
885bool klassVtable::check_no_old_or_obsolete_entries() {
886  for (int i = 0; i < length(); i++) {
887    Method* m = unchecked_method_at(i);
888    if (m != NULL &&
889        (NOT_PRODUCT(!m->is_valid() ||) m->is_old() || m->is_obsolete())) {
890      return false;
891    }
892  }
893  return true;
894}
895
896void klassVtable::dump_vtable() {
897  tty->print_cr("vtable dump --");
898  for (int i = 0; i < length(); i++) {
899    Method* m = unchecked_method_at(i);
900    if (m != NULL) {
901      tty->print("      (%5d)  ", i);
902      m->access_flags().print_on(tty);
903      if (m->is_default_method()) {
904        tty->print("default ");
905      }
906      if (m->is_overpass()) {
907        tty->print("overpass");
908      }
909      tty->print(" --  ");
910      m->print_name(tty);
911      tty->cr();
912    }
913  }
914}
915#endif // INCLUDE_JVMTI
916
917// CDS/RedefineClasses support - clear vtables so they can be reinitialized
918void klassVtable::clear_vtable() {
919  for (int i = 0; i < _length; i++) table()[i].clear();
920}
921
922bool klassVtable::is_initialized() {
923  return _length == 0 || table()[0].method() != NULL;
924}
925
926//-----------------------------------------------------------------------------------------
927// Itable code
928
929// Initialize a itableMethodEntry
930void itableMethodEntry::initialize(Method* m) {
931  if (m == NULL) return;
932
933  _method = m;
934}
935
936klassItable::klassItable(instanceKlassHandle klass) {
937  _klass = klass;
938
939  if (klass->itable_length() > 0) {
940    itableOffsetEntry* offset_entry = (itableOffsetEntry*)klass->start_of_itable();
941    if (offset_entry  != NULL && offset_entry->interface_klass() != NULL) { // Check that itable is initialized
942      // First offset entry points to the first method_entry
943      intptr_t* method_entry  = (intptr_t *)(((address)klass()) + offset_entry->offset());
944      intptr_t* end         = klass->end_of_itable();
945
946      _table_offset      = (intptr_t*)offset_entry - (intptr_t*)klass();
947      _size_offset_table = (method_entry - ((intptr_t*)offset_entry)) / itableOffsetEntry::size();
948      _size_method_table = (end - method_entry)                  / itableMethodEntry::size();
949      assert(_table_offset >= 0 && _size_offset_table >= 0 && _size_method_table >= 0, "wrong computation");
950      return;
951    }
952  }
953
954  // The length of the itable was either zero, or it has not yet been initialized.
955  _table_offset      = 0;
956  _size_offset_table = 0;
957  _size_method_table = 0;
958}
959
960static int initialize_count = 0;
961
962// Initialization
963void klassItable::initialize_itable(bool checkconstraints, TRAPS) {
964  if (_klass->is_interface()) {
965    // This needs to go after vtable indices are assigned but
966    // before implementors need to know the number of itable indices.
967    assign_itable_indices_for_interface(_klass());
968  }
969
970  // Cannot be setup doing bootstrapping, interfaces don't have
971  // itables, and klass with only ones entry have empty itables
972  if (Universe::is_bootstrapping() ||
973      _klass->is_interface() ||
974      _klass->itable_length() == itableOffsetEntry::size()) return;
975
976  // There's alway an extra itable entry so we can null-terminate it.
977  guarantee(size_offset_table() >= 1, "too small");
978  int num_interfaces = size_offset_table() - 1;
979  if (num_interfaces > 0) {
980    if (TraceItables) tty->print_cr("%3d: Initializing itables for %s", ++initialize_count,
981                                    _klass->name()->as_C_string());
982
983
984    // Iterate through all interfaces
985    int i;
986    for(i = 0; i < num_interfaces; i++) {
987      itableOffsetEntry* ioe = offset_entry(i);
988      HandleMark hm(THREAD);
989      KlassHandle interf_h (THREAD, ioe->interface_klass());
990      assert(interf_h() != NULL && ioe->offset() != 0, "bad offset entry in itable");
991      initialize_itable_for_interface(ioe->offset(), interf_h, checkconstraints, CHECK);
992    }
993
994  }
995  // Check that the last entry is empty
996  itableOffsetEntry* ioe = offset_entry(size_offset_table() - 1);
997  guarantee(ioe->interface_klass() == NULL && ioe->offset() == 0, "terminator entry missing");
998}
999
1000
1001inline bool interface_method_needs_itable_index(Method* m) {
1002  if (m->is_static())           return false;   // e.g., Stream.empty
1003  if (m->is_initializer())      return false;   // <init> or <clinit>
1004  // If an interface redeclares a method from java.lang.Object,
1005  // it should already have a vtable index, don't touch it.
1006  // e.g., CharSequence.toString (from initialize_vtable)
1007  // if (m->has_vtable_index())  return false; // NO!
1008  return true;
1009}
1010
1011int klassItable::assign_itable_indices_for_interface(Klass* klass) {
1012  // an interface does not have an itable, but its methods need to be numbered
1013  if (TraceItables) tty->print_cr("%3d: Initializing itable for interface %s", ++initialize_count,
1014                                  klass->name()->as_C_string());
1015  Array<Method*>* methods = InstanceKlass::cast(klass)->methods();
1016  int nof_methods = methods->length();
1017  int ime_num = 0;
1018  for (int i = 0; i < nof_methods; i++) {
1019    Method* m = methods->at(i);
1020    if (interface_method_needs_itable_index(m)) {
1021      assert(!m->is_final_method(), "no final interface methods");
1022      // If m is already assigned a vtable index, do not disturb it.
1023      if (TraceItables && Verbose) {
1024        ResourceMark rm;
1025        const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>";
1026        if (m->has_vtable_index()) {
1027          tty->print("itable index %d for method: %s, flags: ", m->vtable_index(), sig);
1028        } else {
1029          tty->print("itable index %d for method: %s, flags: ", ime_num, sig);
1030        }
1031        if (m != NULL) {
1032          m->access_flags().print_on(tty);
1033          if (m->is_default_method()) {
1034            tty->print("default ");
1035          }
1036          if (m->is_overpass()) {
1037            tty->print("overpass");
1038          }
1039        }
1040        tty->cr();
1041      }
1042      if (!m->has_vtable_index()) {
1043        assert(m->vtable_index() == Method::pending_itable_index, "set by initialize_vtable");
1044        m->set_itable_index(ime_num);
1045        // Progress to next itable entry
1046        ime_num++;
1047      }
1048    }
1049  }
1050  assert(ime_num == method_count_for_interface(klass), "proper sizing");
1051  return ime_num;
1052}
1053
1054int klassItable::method_count_for_interface(Klass* interf) {
1055  assert(interf->oop_is_instance(), "must be");
1056  assert(interf->is_interface(), "must be");
1057  Array<Method*>* methods = InstanceKlass::cast(interf)->methods();
1058  int nof_methods = methods->length();
1059  while (nof_methods > 0) {
1060    Method* m = methods->at(nof_methods-1);
1061    if (m->has_itable_index()) {
1062      int length = m->itable_index() + 1;
1063#ifdef ASSERT
1064      while (nof_methods = 0) {
1065        m = methods->at(--nof_methods);
1066        assert(!m->has_itable_index() || m->itable_index() < length, "");
1067      }
1068#endif //ASSERT
1069      return length;  // return the rightmost itable index, plus one
1070    }
1071    nof_methods -= 1;
1072  }
1073  // no methods have itable indices
1074  return 0;
1075}
1076
1077
1078void klassItable::initialize_itable_for_interface(int method_table_offset, KlassHandle interf_h, bool checkconstraints, TRAPS) {
1079  Array<Method*>* methods = InstanceKlass::cast(interf_h())->methods();
1080  int nof_methods = methods->length();
1081  HandleMark hm;
1082  assert(nof_methods > 0, "at least one method must exist for interface to be in vtable");
1083  Handle interface_loader (THREAD, InstanceKlass::cast(interf_h())->class_loader());
1084
1085  int ime_count = method_count_for_interface(interf_h());
1086  for (int i = 0; i < nof_methods; i++) {
1087    Method* m = methods->at(i);
1088    methodHandle target;
1089    if (m->has_itable_index()) {
1090      // This search must match the runtime resolution, i.e. selection search for invokeinterface
1091      // to correctly enforce loader constraints for interface method inheritance
1092      LinkResolver::lookup_instance_method_in_klasses(target, _klass, m->name(), m->signature(), CHECK);
1093    }
1094    if (target == NULL || !target->is_public() || target->is_abstract()) {
1095      // Entry does not resolve. Leave it empty for AbstractMethodError.
1096        if (!(target == NULL) && !target->is_public()) {
1097          // Stuff an IllegalAccessError throwing method in there instead.
1098          itableOffsetEntry::method_entry(_klass(), method_table_offset)[m->itable_index()].
1099              initialize(Universe::throw_illegal_access_error());
1100        }
1101    } else {
1102      // Entry did resolve, check loader constraints before initializing
1103      // if checkconstraints requested
1104      if (checkconstraints) {
1105        Handle method_holder_loader (THREAD, target->method_holder()->class_loader());
1106        if (method_holder_loader() != interface_loader()) {
1107          ResourceMark rm(THREAD);
1108          Symbol* failed_type_symbol =
1109            SystemDictionary::check_signature_loaders(m->signature(),
1110                                                      method_holder_loader,
1111                                                      interface_loader,
1112                                                      true, CHECK);
1113          if (failed_type_symbol != NULL) {
1114            const char* msg = "loader constraint violation in interface "
1115              "itable initialization: when resolving method \"%s\" the class"
1116              " loader (instance of %s) of the current class, %s, "
1117              "and the class loader (instance of %s) for interface "
1118              "%s have different Class objects for the type %s "
1119              "used in the signature";
1120            char* sig = target()->name_and_sig_as_C_string();
1121            const char* loader1 = SystemDictionary::loader_name(method_holder_loader());
1122            char* current = _klass->name()->as_C_string();
1123            const char* loader2 = SystemDictionary::loader_name(interface_loader());
1124            char* iface = InstanceKlass::cast(interf_h())->name()->as_C_string();
1125            char* failed_type_name = failed_type_symbol->as_C_string();
1126            size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) +
1127              strlen(current) + strlen(loader2) + strlen(iface) +
1128              strlen(failed_type_name);
1129            char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
1130            jio_snprintf(buf, buflen, msg, sig, loader1, current, loader2,
1131                         iface, failed_type_name);
1132            THROW_MSG(vmSymbols::java_lang_LinkageError(), buf);
1133          }
1134        }
1135      }
1136
1137      // ime may have moved during GC so recalculate address
1138      int ime_num = m->itable_index();
1139      assert(ime_num < ime_count, "oob");
1140      itableOffsetEntry::method_entry(_klass(), method_table_offset)[ime_num].initialize(target());
1141      if (TraceItables && Verbose) {
1142        ResourceMark rm(THREAD);
1143        if (target() != NULL) {
1144          char* sig = target()->name_and_sig_as_C_string();
1145          tty->print("interface: %s, ime_num: %d, target: %s, method_holder: %s ",
1146                    interf_h()->internal_name(), ime_num, sig,
1147                    target()->method_holder()->internal_name());
1148          tty->print("target_method flags: ");
1149          target()->access_flags().print_on(tty);
1150          if (target()->is_default_method()) {
1151            tty->print("default ");
1152          }
1153          tty->cr();
1154        }
1155      }
1156    }
1157  }
1158}
1159
1160// Update entry for specific Method*
1161void klassItable::initialize_with_method(Method* m) {
1162  itableMethodEntry* ime = method_entry(0);
1163  for(int i = 0; i < _size_method_table; i++) {
1164    if (ime->method() == m) {
1165      ime->initialize(m);
1166    }
1167    ime++;
1168  }
1169}
1170
1171#if INCLUDE_JVMTI
1172void klassItable::adjust_method_entries(Method** old_methods, Method** new_methods,
1173                                        int methods_length, bool * trace_name_printed) {
1174  // search the itable for uses of either obsolete or EMCP methods
1175  for (int j = 0; j < methods_length; j++) {
1176    Method* old_method = old_methods[j];
1177    Method* new_method = new_methods[j];
1178    itableMethodEntry* ime = method_entry(0);
1179
1180    // The itable can describe more than one interface and the same
1181    // method signature can be specified by more than one interface.
1182    // This means we have to do an exhaustive search to find all the
1183    // old_method references.
1184    for (int i = 0; i < _size_method_table; i++) {
1185      if (ime->method() == old_method) {
1186        ime->initialize(new_method);
1187
1188        if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
1189          if (!(*trace_name_printed)) {
1190            // RC_TRACE_MESG macro has an embedded ResourceMark
1191            RC_TRACE_MESG(("adjust: name=%s",
1192              old_method->method_holder()->external_name()));
1193            *trace_name_printed = true;
1194          }
1195          // RC_TRACE macro has an embedded ResourceMark
1196          RC_TRACE(0x00200000, ("itable method update: %s(%s)",
1197            new_method->name()->as_C_string(),
1198            new_method->signature()->as_C_string()));
1199        }
1200        // cannot 'break' here; see for-loop comment above.
1201      }
1202      ime++;
1203    }
1204  }
1205}
1206
1207// an itable should never contain old or obsolete methods
1208bool klassItable::check_no_old_or_obsolete_entries() {
1209  itableMethodEntry* ime = method_entry(0);
1210  for (int i = 0; i < _size_method_table; i++) {
1211    Method* m = ime->method();
1212    if (m != NULL &&
1213        (NOT_PRODUCT(!m->is_valid() ||) m->is_old() || m->is_obsolete())) {
1214      return false;
1215    }
1216    ime++;
1217  }
1218  return true;
1219}
1220
1221void klassItable::dump_itable() {
1222  itableMethodEntry* ime = method_entry(0);
1223  tty->print_cr("itable dump --");
1224  for (int i = 0; i < _size_method_table; i++) {
1225    Method* m = ime->method();
1226    if (m != NULL) {
1227      tty->print("      (%5d)  ", i);
1228      m->access_flags().print_on(tty);
1229      if (m->is_default_method()) {
1230        tty->print("default ");
1231      }
1232      tty->print(" --  ");
1233      m->print_name(tty);
1234      tty->cr();
1235    }
1236    ime++;
1237  }
1238}
1239#endif // INCLUDE_JVMTI
1240
1241
1242// Setup
1243class InterfaceVisiterClosure : public StackObj {
1244 public:
1245  virtual void doit(Klass* intf, int method_count) = 0;
1246};
1247
1248// Visit all interfaces with at least one itable method
1249void visit_all_interfaces(Array<Klass*>* transitive_intf, InterfaceVisiterClosure *blk) {
1250  // Handle array argument
1251  for(int i = 0; i < transitive_intf->length(); i++) {
1252    Klass* intf = transitive_intf->at(i);
1253    assert(intf->is_interface(), "sanity check");
1254
1255    // Find no. of itable methods
1256    int method_count = 0;
1257    // method_count = klassItable::method_count_for_interface(intf);
1258    Array<Method*>* methods = InstanceKlass::cast(intf)->methods();
1259    if (methods->length() > 0) {
1260      for (int i = methods->length(); --i >= 0; ) {
1261        if (interface_method_needs_itable_index(methods->at(i))) {
1262          method_count++;
1263        }
1264      }
1265    }
1266
1267    // Only count interfaces with at least one method
1268    if (method_count > 0) {
1269      blk->doit(intf, method_count);
1270    }
1271  }
1272}
1273
1274class CountInterfacesClosure : public InterfaceVisiterClosure {
1275 private:
1276  int _nof_methods;
1277  int _nof_interfaces;
1278 public:
1279   CountInterfacesClosure() { _nof_methods = 0; _nof_interfaces = 0; }
1280
1281   int nof_methods() const    { return _nof_methods; }
1282   int nof_interfaces() const { return _nof_interfaces; }
1283
1284   void doit(Klass* intf, int method_count) { _nof_methods += method_count; _nof_interfaces++; }
1285};
1286
1287class SetupItableClosure : public InterfaceVisiterClosure  {
1288 private:
1289  itableOffsetEntry* _offset_entry;
1290  itableMethodEntry* _method_entry;
1291  address            _klass_begin;
1292 public:
1293  SetupItableClosure(address klass_begin, itableOffsetEntry* offset_entry, itableMethodEntry* method_entry) {
1294    _klass_begin  = klass_begin;
1295    _offset_entry = offset_entry;
1296    _method_entry = method_entry;
1297  }
1298
1299  itableMethodEntry* method_entry() const { return _method_entry; }
1300
1301  void doit(Klass* intf, int method_count) {
1302    int offset = ((address)_method_entry) - _klass_begin;
1303    _offset_entry->initialize(intf, offset);
1304    _offset_entry++;
1305    _method_entry += method_count;
1306  }
1307};
1308
1309int klassItable::compute_itable_size(Array<Klass*>* transitive_interfaces) {
1310  // Count no of interfaces and total number of interface methods
1311  CountInterfacesClosure cic;
1312  visit_all_interfaces(transitive_interfaces, &cic);
1313
1314  // There's alway an extra itable entry so we can null-terminate it.
1315  int itable_size = calc_itable_size(cic.nof_interfaces() + 1, cic.nof_methods());
1316
1317  // Statistics
1318  update_stats(itable_size * HeapWordSize);
1319
1320  return itable_size;
1321}
1322
1323
1324// Fill out offset table and interface klasses into the itable space
1325void klassItable::setup_itable_offset_table(instanceKlassHandle klass) {
1326  if (klass->itable_length() == 0) return;
1327  assert(!klass->is_interface(), "Should have zero length itable");
1328
1329  // Count no of interfaces and total number of interface methods
1330  CountInterfacesClosure cic;
1331  visit_all_interfaces(klass->transitive_interfaces(), &cic);
1332  int nof_methods    = cic.nof_methods();
1333  int nof_interfaces = cic.nof_interfaces();
1334
1335  // Add one extra entry so we can null-terminate the table
1336  nof_interfaces++;
1337
1338  assert(compute_itable_size(klass->transitive_interfaces()) ==
1339         calc_itable_size(nof_interfaces, nof_methods),
1340         "mismatch calculation of itable size");
1341
1342  // Fill-out offset table
1343  itableOffsetEntry* ioe = (itableOffsetEntry*)klass->start_of_itable();
1344  itableMethodEntry* ime = (itableMethodEntry*)(ioe + nof_interfaces);
1345  intptr_t* end               = klass->end_of_itable();
1346  assert((oop*)(ime + nof_methods) <= (oop*)klass->start_of_nonstatic_oop_maps(), "wrong offset calculation (1)");
1347  assert((oop*)(end) == (oop*)(ime + nof_methods),                      "wrong offset calculation (2)");
1348
1349  // Visit all interfaces and initialize itable offset table
1350  SetupItableClosure sic((address)klass(), ioe, ime);
1351  visit_all_interfaces(klass->transitive_interfaces(), &sic);
1352
1353#ifdef ASSERT
1354  ime  = sic.method_entry();
1355  oop* v = (oop*) klass->end_of_itable();
1356  assert( (oop*)(ime) == v, "wrong offset calculation (2)");
1357#endif
1358}
1359
1360
1361// inverse to itable_index
1362Method* klassItable::method_for_itable_index(Klass* intf, int itable_index) {
1363  assert(InstanceKlass::cast(intf)->is_interface(), "sanity check");
1364  assert(intf->verify_itable_index(itable_index), "");
1365  Array<Method*>* methods = InstanceKlass::cast(intf)->methods();
1366
1367  if (itable_index < 0 || itable_index >= method_count_for_interface(intf))
1368    return NULL;                // help caller defend against bad indices
1369
1370  int index = itable_index;
1371  Method* m = methods->at(index);
1372  int index2 = -1;
1373  while (!m->has_itable_index() ||
1374         (index2 = m->itable_index()) != itable_index) {
1375    assert(index2 < itable_index, "monotonic");
1376    if (++index == methods->length())
1377      return NULL;
1378    m = methods->at(index);
1379  }
1380  assert(m->itable_index() == itable_index, "correct inverse");
1381
1382  return m;
1383}
1384
1385void klassVtable::verify(outputStream* st, bool forced) {
1386  // make sure table is initialized
1387  if (!Universe::is_fully_initialized()) return;
1388#ifndef PRODUCT
1389  // avoid redundant verifies
1390  if (!forced && _verify_count == Universe::verify_count()) return;
1391  _verify_count = Universe::verify_count();
1392#endif
1393  oop* end_of_obj = (oop*)_klass() + _klass()->size();
1394  oop* end_of_vtable = (oop *)&table()[_length];
1395  if (end_of_vtable > end_of_obj) {
1396    fatal(err_msg("klass %s: klass object too short (vtable extends beyond "
1397                  "end)", _klass->internal_name()));
1398  }
1399
1400  for (int i = 0; i < _length; i++) table()[i].verify(this, st);
1401  // verify consistency with superKlass vtable
1402  Klass* super = _klass->super();
1403  if (super != NULL) {
1404    InstanceKlass* sk = InstanceKlass::cast(super);
1405    klassVtable* vt = sk->vtable();
1406    for (int i = 0; i < vt->length(); i++) {
1407      verify_against(st, vt, i);
1408    }
1409  }
1410}
1411
1412void klassVtable::verify_against(outputStream* st, klassVtable* vt, int index) {
1413  vtableEntry* vte = &vt->table()[index];
1414  if (vte->method()->name()      != table()[index].method()->name() ||
1415      vte->method()->signature() != table()[index].method()->signature()) {
1416    fatal("mismatched name/signature of vtable entries");
1417  }
1418}
1419
1420#ifndef PRODUCT
1421void klassVtable::print() {
1422  ResourceMark rm;
1423  tty->print("klassVtable for klass %s (length %d):\n", _klass->internal_name(), length());
1424  for (int i = 0; i < length(); i++) {
1425    table()[i].print();
1426    tty->cr();
1427  }
1428}
1429#endif
1430
1431void vtableEntry::verify(klassVtable* vt, outputStream* st) {
1432  NOT_PRODUCT(FlagSetting fs(IgnoreLockingAssertions, true));
1433  assert(method() != NULL, "must have set method");
1434  method()->verify();
1435  // we sub_type, because it could be a miranda method
1436  if (!vt->klass()->is_subtype_of(method()->method_holder())) {
1437#ifndef PRODUCT
1438    print();
1439#endif
1440    fatal(err_msg("vtableEntry " PTR_FORMAT ": method is from subclass", this));
1441  }
1442}
1443
1444#ifndef PRODUCT
1445
1446void vtableEntry::print() {
1447  ResourceMark rm;
1448  tty->print("vtableEntry %s: ", method()->name()->as_C_string());
1449  if (Verbose) {
1450    tty->print("m %#lx ", (address)method());
1451  }
1452}
1453
1454class VtableStats : AllStatic {
1455 public:
1456  static int no_klasses;                // # classes with vtables
1457  static int no_array_klasses;          // # array classes
1458  static int no_instance_klasses;       // # instanceKlasses
1459  static int sum_of_vtable_len;         // total # of vtable entries
1460  static int sum_of_array_vtable_len;   // total # of vtable entries in array klasses only
1461  static int fixed;                     // total fixed overhead in bytes
1462  static int filler;                    // overhead caused by filler bytes
1463  static int entries;                   // total bytes consumed by vtable entries
1464  static int array_entries;             // total bytes consumed by array vtable entries
1465
1466  static void do_class(Klass* k) {
1467    Klass* kl = k;
1468    klassVtable* vt = kl->vtable();
1469    if (vt == NULL) return;
1470    no_klasses++;
1471    if (kl->oop_is_instance()) {
1472      no_instance_klasses++;
1473      kl->array_klasses_do(do_class);
1474    }
1475    if (kl->oop_is_array()) {
1476      no_array_klasses++;
1477      sum_of_array_vtable_len += vt->length();
1478    }
1479    sum_of_vtable_len += vt->length();
1480  }
1481
1482  static void compute() {
1483    SystemDictionary::classes_do(do_class);
1484    fixed  = no_klasses * oopSize;      // vtable length
1485    // filler size is a conservative approximation
1486    filler = oopSize * (no_klasses - no_instance_klasses) * (sizeof(InstanceKlass) - sizeof(ArrayKlass) - 1);
1487    entries = sizeof(vtableEntry) * sum_of_vtable_len;
1488    array_entries = sizeof(vtableEntry) * sum_of_array_vtable_len;
1489  }
1490};
1491
1492int VtableStats::no_klasses = 0;
1493int VtableStats::no_array_klasses = 0;
1494int VtableStats::no_instance_klasses = 0;
1495int VtableStats::sum_of_vtable_len = 0;
1496int VtableStats::sum_of_array_vtable_len = 0;
1497int VtableStats::fixed = 0;
1498int VtableStats::filler = 0;
1499int VtableStats::entries = 0;
1500int VtableStats::array_entries = 0;
1501
1502void klassVtable::print_statistics() {
1503  ResourceMark rm;
1504  HandleMark hm;
1505  VtableStats::compute();
1506  tty->print_cr("vtable statistics:");
1507  tty->print_cr("%6d classes (%d instance, %d array)", VtableStats::no_klasses, VtableStats::no_instance_klasses, VtableStats::no_array_klasses);
1508  int total = VtableStats::fixed + VtableStats::filler + VtableStats::entries;
1509  tty->print_cr("%6d bytes fixed overhead (refs + vtable object header)", VtableStats::fixed);
1510  tty->print_cr("%6d bytes filler overhead", VtableStats::filler);
1511  tty->print_cr("%6d bytes for vtable entries (%d for arrays)", VtableStats::entries, VtableStats::array_entries);
1512  tty->print_cr("%6d bytes total", total);
1513}
1514
1515int  klassItable::_total_classes;   // Total no. of classes with itables
1516long klassItable::_total_size;      // Total no. of bytes used for itables
1517
1518void klassItable::print_statistics() {
1519 tty->print_cr("itable statistics:");
1520 tty->print_cr("%6d classes with itables", _total_classes);
1521 tty->print_cr("%6d K uses for itables (average by class: %d bytes)", _total_size / K, _total_size / _total_classes);
1522}
1523
1524#endif // PRODUCT
1525