Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 1903:87d6a4d1ecbc
6990192: VM crashes in ciTypeFlow::get_block_for()
Reviewed-by: never
author | twisti |
---|---|
date | Tue, 19 Oct 2010 02:52:57 -0700 |
parents | d257356e35f0 |
children | 3b2dea75431e |
comparison
equal
deleted
inserted
replaced
1901:7aff5786cc02 | 1903:87d6a4d1ecbc |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 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 | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
24 | 24 |
25 # include "incls/_precompiled.incl" | 25 # include "incls/_precompiled.incl" |
26 # include "incls/_systemDictionary.cpp.incl" | 26 # include "incls/_systemDictionary.cpp.incl" |
27 | 27 |
28 | 28 |
29 Dictionary* SystemDictionary::_dictionary = NULL; | 29 Dictionary* SystemDictionary::_dictionary = NULL; |
30 PlaceholderTable* SystemDictionary::_placeholders = NULL; | 30 PlaceholderTable* SystemDictionary::_placeholders = NULL; |
31 Dictionary* SystemDictionary::_shared_dictionary = NULL; | 31 Dictionary* SystemDictionary::_shared_dictionary = NULL; |
32 LoaderConstraintTable* SystemDictionary::_loader_constraints = NULL; | 32 LoaderConstraintTable* SystemDictionary::_loader_constraints = NULL; |
33 ResolutionErrorTable* SystemDictionary::_resolution_errors = NULL; | 33 ResolutionErrorTable* SystemDictionary::_resolution_errors = NULL; |
34 SymbolPropertyTable* SystemDictionary::_invoke_method_table = NULL; | 34 SymbolPropertyTable* SystemDictionary::_invoke_method_table = NULL; |
35 | 35 |
36 | 36 |
37 int SystemDictionary::_number_of_modifications = 0; | 37 int SystemDictionary::_number_of_modifications = 0; |
38 | 38 |
39 oop SystemDictionary::_system_loader_lock_obj = NULL; | 39 oop SystemDictionary::_system_loader_lock_obj = NULL; |
1725 // Placeholders. These are *always* strong roots, as they | 1725 // Placeholders. These are *always* strong roots, as they |
1726 // represent classes we're actively loading. | 1726 // represent classes we're actively loading. |
1727 placeholders_do(blk); | 1727 placeholders_do(blk); |
1728 | 1728 |
1729 // Visit extra methods | 1729 // Visit extra methods |
1730 if (invoke_method_table() != NULL) | 1730 invoke_method_table()->oops_do(blk); |
1731 invoke_method_table()->oops_do(blk); | |
1732 | 1731 |
1733 // Loader constraints. We must keep the symbolOop used in the name alive. | 1732 // Loader constraints. We must keep the symbolOop used in the name alive. |
1734 constraints()->always_strong_classes_do(blk); | 1733 constraints()->always_strong_classes_do(blk); |
1735 | 1734 |
1736 // Resolution errors keep the symbolOop for the error alive | 1735 // Resolution errors keep the symbolOop for the error alive |
1764 | 1763 |
1765 // Adjust dictionary | 1764 // Adjust dictionary |
1766 dictionary()->oops_do(f); | 1765 dictionary()->oops_do(f); |
1767 | 1766 |
1768 // Visit extra methods | 1767 // Visit extra methods |
1769 if (invoke_method_table() != NULL) | 1768 invoke_method_table()->oops_do(f); |
1770 invoke_method_table()->oops_do(f); | |
1771 | 1769 |
1772 // Partially loaded classes | 1770 // Partially loaded classes |
1773 placeholders()->oops_do(f); | 1771 placeholders()->oops_do(f); |
1774 | 1772 |
1775 // Adjust constraint table | 1773 // Adjust constraint table |
1839 placeholders()->entries_do(f); | 1837 placeholders()->entries_do(f); |
1840 } | 1838 } |
1841 | 1839 |
1842 void SystemDictionary::methods_do(void f(methodOop)) { | 1840 void SystemDictionary::methods_do(void f(methodOop)) { |
1843 dictionary()->methods_do(f); | 1841 dictionary()->methods_do(f); |
1844 if (invoke_method_table() != NULL) | 1842 invoke_method_table()->methods_do(f); |
1845 invoke_method_table()->methods_do(f); | |
1846 } | 1843 } |
1847 | 1844 |
1848 // ---------------------------------------------------------------------------- | 1845 // ---------------------------------------------------------------------------- |
1849 // Lazily load klasses | 1846 // Lazily load klasses |
1850 | 1847 |
1868 | 1865 |
1869 void SystemDictionary::initialize(TRAPS) { | 1866 void SystemDictionary::initialize(TRAPS) { |
1870 // Allocate arrays | 1867 // Allocate arrays |
1871 assert(dictionary() == NULL, | 1868 assert(dictionary() == NULL, |
1872 "SystemDictionary should only be initialized once"); | 1869 "SystemDictionary should only be initialized once"); |
1873 _dictionary = new Dictionary(_nof_buckets); | 1870 _dictionary = new Dictionary(_nof_buckets); |
1874 _placeholders = new PlaceholderTable(_nof_buckets); | 1871 _placeholders = new PlaceholderTable(_nof_buckets); |
1875 _number_of_modifications = 0; | 1872 _number_of_modifications = 0; |
1876 _loader_constraints = new LoaderConstraintTable(_loader_constraint_size); | 1873 _loader_constraints = new LoaderConstraintTable(_loader_constraint_size); |
1877 _resolution_errors = new ResolutionErrorTable(_resolution_error_size); | 1874 _resolution_errors = new ResolutionErrorTable(_resolution_error_size); |
1878 // _invoke_method_table is allocated lazily in find_method_handle_invoke() | 1875 _invoke_method_table = new SymbolPropertyTable(_invoke_method_size); |
1879 | 1876 |
1880 // Allocate private object used as system class loader lock | 1877 // Allocate private object used as system class loader lock |
1881 _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK); | 1878 _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK); |
1882 // Initialize basic classes | 1879 // Initialize basic classes |
1883 initialize_preloaded_classes(CHECK); | 1880 initialize_preloaded_classes(CHECK); |
2344 methodOop SystemDictionary::find_method_handle_invoke(symbolHandle name, | 2341 methodOop SystemDictionary::find_method_handle_invoke(symbolHandle name, |
2345 symbolHandle signature, | 2342 symbolHandle signature, |
2346 KlassHandle accessing_klass, | 2343 KlassHandle accessing_klass, |
2347 TRAPS) { | 2344 TRAPS) { |
2348 if (!EnableMethodHandles) return NULL; | 2345 if (!EnableMethodHandles) return NULL; |
2349 if (invoke_method_table() == NULL) { | |
2350 // create this side table lazily | |
2351 _invoke_method_table = new SymbolPropertyTable(_invoke_method_size); | |
2352 } | |
2353 vmSymbols::SID name_id = vmSymbols::find_sid(name()); | 2346 vmSymbols::SID name_id = vmSymbols::find_sid(name()); |
2354 assert(name_id != vmSymbols::NO_SID, "must be a known name"); | 2347 assert(name_id != vmSymbols::NO_SID, "must be a known name"); |
2355 unsigned int hash = invoke_method_table()->compute_hash(signature, name_id); | 2348 unsigned int hash = invoke_method_table()->compute_hash(signature, name_id); |
2356 int index = invoke_method_table()->hash_to_index(hash); | 2349 int index = invoke_method_table()->hash_to_index(hash); |
2357 SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id); | 2350 SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id); |