src/share/vm/classfile/loaderConstraints.hpp

changeset 4037
da91efe96a93
parent 3900
d2a62e0f25eb
child 6876
710a3c8b516e
     1.1 --- a/src/share/vm/classfile/loaderConstraints.hpp	Fri Aug 31 16:39:35 2012 -0700
     1.2 +++ b/src/share/vm/classfile/loaderConstraints.hpp	Sat Sep 01 13:25:18 2012 -0400
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -30,8 +30,9 @@
    1.11  #include "utilities/hashtable.hpp"
    1.12  
    1.13  class LoaderConstraintEntry;
    1.14 +class Symbol;
    1.15  
    1.16 -class LoaderConstraintTable : public Hashtable<klassOop, mtClass> {
    1.17 +class LoaderConstraintTable : public Hashtable<Klass*, mtClass> {
    1.18    friend class VMStructs;
    1.19  private:
    1.20  
    1.21 @@ -48,45 +49,45 @@
    1.22    LoaderConstraintTable(int nof_buckets);
    1.23  
    1.24    LoaderConstraintEntry* new_entry(unsigned int hash, Symbol* name,
    1.25 -                                   klassOop klass, int num_loaders,
    1.26 +                                   Klass* klass, int num_loaders,
    1.27                                     int max_loaders);
    1.28    void free_entry(LoaderConstraintEntry *entry);
    1.29  
    1.30    LoaderConstraintEntry* bucket(int i) {
    1.31 -    return (LoaderConstraintEntry*)Hashtable<klassOop, mtClass>::bucket(i);
    1.32 +    return (LoaderConstraintEntry*)Hashtable<Klass*, mtClass>::bucket(i);
    1.33    }
    1.34  
    1.35    LoaderConstraintEntry** bucket_addr(int i) {
    1.36 -    return (LoaderConstraintEntry**)Hashtable<klassOop, mtClass>::bucket_addr(i);
    1.37 +    return (LoaderConstraintEntry**)Hashtable<Klass*, mtClass>::bucket_addr(i);
    1.38    }
    1.39  
    1.40 -  // GC support
    1.41 -  void oops_do(OopClosure* f);
    1.42 +  // Enhanced Class Redefinition support
    1.43 +  void classes_do(KlassClosure* f);
    1.44  
    1.45    // Check class loader constraints
    1.46 -  bool add_entry(Symbol* name, klassOop klass1, Handle loader1,
    1.47 -                                    klassOop klass2, Handle loader2);
    1.48 +  bool add_entry(Symbol* name, Klass* klass1, Handle loader1,
    1.49 +                                    Klass* klass2, Handle loader2);
    1.50  
    1.51    // Note:  The main entry point for this module is via SystemDictionary.
    1.52    // SystemDictionary::check_signature_loaders(Symbol* signature,
    1.53    //                                           Handle loader1, Handle loader2,
    1.54    //                                           bool is_method, TRAPS)
    1.55  
    1.56 -  klassOop find_constrained_klass(Symbol* name, Handle loader);
    1.57 +  Klass* find_constrained_klass(Symbol* name, Handle loader);
    1.58  
    1.59    // Class loader constraints
    1.60  
    1.61    void ensure_loader_constraint_capacity(LoaderConstraintEntry *p, int nfree);
    1.62    void extend_loader_constraint(LoaderConstraintEntry* p, Handle loader,
    1.63 -                                klassOop klass);
    1.64 +                                Klass* klass);
    1.65    void merge_loader_constraints(LoaderConstraintEntry** pp1,
    1.66 -                                LoaderConstraintEntry** pp2, klassOop klass);
    1.67 +                                LoaderConstraintEntry** pp2, Klass* klass);
    1.68  
    1.69    bool check_or_update(instanceKlassHandle k, Handle loader,
    1.70                                Symbol* name);
    1.71  
    1.72  
    1.73 -  void purge_loader_constraints(BoolObjectClosure* is_alive);
    1.74 +  void purge_loader_constraints();
    1.75  
    1.76    void verify(Dictionary* dictionary, PlaceholderTable* placeholders);
    1.77  #ifndef PRODUCT
    1.78 @@ -94,29 +95,32 @@
    1.79  #endif
    1.80  };
    1.81  
    1.82 -class LoaderConstraintEntry : public HashtableEntry<klassOop, mtClass> {
    1.83 +class LoaderConstraintEntry : public HashtableEntry<Klass*, mtClass> {
    1.84    friend class VMStructs;
    1.85  private:
    1.86    Symbol*                _name;                   // class name
    1.87    int                    _num_loaders;
    1.88    int                    _max_loaders;
    1.89 -  oop*                   _loaders;                // initiating loaders
    1.90 +  // Loader constraints enforce correct linking behavior.
    1.91 +  // Thus, it really operates on ClassLoaderData which represents linking domain,
    1.92 +  // not class loaders.
    1.93 +  ClassLoaderData**              _loaders;                // initiating loaders
    1.94  
    1.95  public:
    1.96  
    1.97 -  klassOop klass() { return literal(); }
    1.98 -  klassOop* klass_addr() { return literal_addr(); }
    1.99 -  void set_klass(klassOop k) { set_literal(k); }
   1.100 +  Klass* klass() { return literal(); }
   1.101 +  Klass** klass_addr() { return literal_addr(); }
   1.102 +  void set_klass(Klass* k) { set_literal(k); }
   1.103  
   1.104    LoaderConstraintEntry* next() {
   1.105 -    return (LoaderConstraintEntry*)HashtableEntry<klassOop, mtClass>::next();
   1.106 +    return (LoaderConstraintEntry*)HashtableEntry<Klass*, mtClass>::next();
   1.107    }
   1.108  
   1.109    LoaderConstraintEntry** next_addr() {
   1.110 -    return (LoaderConstraintEntry**)HashtableEntry<klassOop, mtClass>::next_addr();
   1.111 +    return (LoaderConstraintEntry**)HashtableEntry<Klass*, mtClass>::next_addr();
   1.112    }
   1.113    void set_next(LoaderConstraintEntry* next) {
   1.114 -    HashtableEntry<klassOop, mtClass>::set_next(next);
   1.115 +    HashtableEntry<Klass*, mtClass>::set_next(next);
   1.116    }
   1.117  
   1.118    Symbol* name() { return _name; }
   1.119 @@ -131,13 +135,13 @@
   1.120    int max_loaders() { return _max_loaders; }
   1.121    void set_max_loaders(int i) { _max_loaders = i; }
   1.122  
   1.123 -  oop* loaders() { return _loaders; }
   1.124 -  void set_loaders(oop* loaders) { _loaders = loaders; }
   1.125 +  ClassLoaderData** loaders() { return _loaders; }
   1.126 +  void set_loaders(ClassLoaderData** loaders) { _loaders = loaders; }
   1.127  
   1.128 -  oop loader(int i) { return _loaders[i]; }
   1.129 -  oop* loader_addr(int i) { return &_loaders[i]; }
   1.130 -  void set_loader(int i, oop p) { _loaders[i] = p; }
   1.131 -
   1.132 +  ClassLoaderData* loader_data(int i) { return _loaders[i]; }
   1.133 +  void set_loader_data(int i, ClassLoaderData* p) { _loaders[i] = p; }
   1.134 +  // convenience
   1.135 +  void set_loader(int i, oop p);
   1.136  };
   1.137  
   1.138  #endif // SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP

mercurial