comparison src/share/vm/oops/method.cpp @ 7212:291ffc492eb6

Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author Doug Simon <doug.simon@oracle.com>
date Fri, 14 Dec 2012 14:35:13 +0100
parents 5d0bb7d52783 5505fbbae3d3
children 96ce80e956a1
comparison
equal deleted inserted replaced
7163:2ed8d74e5984 7212:291ffc492eb6
65 AccessFlags access_flags, 65 AccessFlags access_flags,
66 int compressed_line_number_size, 66 int compressed_line_number_size,
67 int localvariable_table_length, 67 int localvariable_table_length,
68 int exception_table_length, 68 int exception_table_length,
69 int checked_exceptions_length, 69 int checked_exceptions_length,
70 u2 generic_signature_index,
70 ConstMethod::MethodType method_type, 71 ConstMethod::MethodType method_type,
71 TRAPS) { 72 TRAPS) {
72 assert(!access_flags.is_native() || byte_code_size == 0, 73 assert(!access_flags.is_native() || byte_code_size == 0,
73 "native methods should not contain byte codes"); 74 "native methods should not contain byte codes");
74 ConstMethod* cm = ConstMethod::allocate(loader_data, 75 ConstMethod* cm = ConstMethod::allocate(loader_data,
75 byte_code_size, 76 byte_code_size,
76 compressed_line_number_size, 77 compressed_line_number_size,
77 localvariable_table_length, 78 localvariable_table_length,
78 exception_table_length, 79 exception_table_length,
79 checked_exceptions_length, 80 checked_exceptions_length,
81 generic_signature_index,
80 method_type, 82 method_type,
81 CHECK_NULL); 83 CHECK_NULL);
82 84
83 int size = Method::size(access_flags.is_native()); 85 int size = Method::size(access_flags.is_native());
84 86
1040 assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods"); 1042 assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods");
1041 1043
1042 methodHandle m; 1044 methodHandle m;
1043 { 1045 {
1044 Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits), 1046 Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits),
1045 0, 0, 0, 0, ConstMethod::NORMAL, CHECK_(empty)); 1047 0, 0, 0, 0, 0, ConstMethod::NORMAL, CHECK_(empty));
1046 m = methodHandle(THREAD, m_oop); 1048 m = methodHandle(THREAD, m_oop);
1047 } 1049 }
1048 m->set_constants(cp()); 1050 m->set_constants(cp());
1049 m->set_name_index(_imcp_invoke_name); 1051 m->set_name_index(_imcp_invoke_name);
1050 m->set_signature_index(_imcp_invoke_signature); 1052 m->set_signature_index(_imcp_invoke_signature);
1088 u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS) { 1090 u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS) {
1089 // Code below does not work for native methods - they should never get rewritten anyway 1091 // Code below does not work for native methods - they should never get rewritten anyway
1090 assert(!m->is_native(), "cannot rewrite native methods"); 1092 assert(!m->is_native(), "cannot rewrite native methods");
1091 // Allocate new Method* 1093 // Allocate new Method*
1092 AccessFlags flags = m->access_flags(); 1094 AccessFlags flags = m->access_flags();
1095 u2 generic_signature_index = m->generic_signature_index();
1093 int checked_exceptions_len = m->checked_exceptions_length(); 1096 int checked_exceptions_len = m->checked_exceptions_length();
1094 int localvariable_len = m->localvariable_table_length(); 1097 int localvariable_len = m->localvariable_table_length();
1095 int exception_table_len = m->exception_table_length(); 1098 int exception_table_len = m->exception_table_length();
1096 1099
1097 ClassLoaderData* loader_data = m->method_holder()->class_loader_data(); 1100 ClassLoaderData* loader_data = m->method_holder()->class_loader_data();
1100 flags, 1103 flags,
1101 new_compressed_linenumber_size, 1104 new_compressed_linenumber_size,
1102 localvariable_len, 1105 localvariable_len,
1103 exception_table_len, 1106 exception_table_len,
1104 checked_exceptions_len, 1107 checked_exceptions_len,
1108 generic_signature_index,
1105 m->method_type(), 1109 m->method_type(),
1106 CHECK_(methodHandle())); 1110 CHECK_(methodHandle()));
1107 methodHandle newm (THREAD, newm_oop); 1111 methodHandle newm (THREAD, newm_oop);
1108 int new_method_size = newm->method_size(); 1112 int new_method_size = newm->method_size();
1109 1113
1818 } 1822 }
1819 1823
1820 // Called when the class loader is unloaded to make all methods weak. 1824 // Called when the class loader is unloaded to make all methods weak.
1821 void Method::clear_jmethod_ids(ClassLoaderData* loader_data) { 1825 void Method::clear_jmethod_ids(ClassLoaderData* loader_data) {
1822 loader_data->jmethod_ids()->clear_all_methods(); 1826 loader_data->jmethod_ids()->clear_all_methods();
1827 }
1828
1829
1830 // Check that this pointer is valid by checking that the vtbl pointer matches
1831 bool Method::is_valid_method() const {
1832 if (this == NULL) {
1833 return false;
1834 } else if (!is_metaspace_object()) {
1835 return false;
1836 } else {
1837 Method m;
1838 // This assumes that the vtbl pointer is the first word of a C++ object.
1839 // This assumption is also in universe.cpp patch_klass_vtble
1840 void* vtbl2 = dereference_vptr((void*)&m);
1841 void* this_vtbl = dereference_vptr((void*)this);
1842 return vtbl2 == this_vtbl;
1843 }
1823 } 1844 }
1824 1845
1825 #ifndef PRODUCT 1846 #ifndef PRODUCT
1826 void Method::print_jmethod_ids(ClassLoaderData* loader_data, outputStream* out) { 1847 void Method::print_jmethod_ids(ClassLoaderData* loader_data, outputStream* out) {
1827 out->print_cr("jni_method_id count = %d", loader_data->jmethod_ids()->count_methods()); 1848 out->print_cr("jni_method_id count = %d", loader_data->jmethod_ids()->count_methods());
1941 guarantee(constants()->is_metadata(), "should be metadata"); 1962 guarantee(constants()->is_metadata(), "should be metadata");
1942 guarantee(constMethod()->is_constMethod(), "should be ConstMethod*"); 1963 guarantee(constMethod()->is_constMethod(), "should be ConstMethod*");
1943 guarantee(constMethod()->is_metadata(), "should be metadata"); 1964 guarantee(constMethod()->is_metadata(), "should be metadata");
1944 MethodData* md = method_data(); 1965 MethodData* md = method_data();
1945 guarantee(md == NULL || 1966 guarantee(md == NULL ||
1946 md->is_metadata(), "should be in permspace"); 1967 md->is_metadata(), "should be metadata");
1947 guarantee(md == NULL || 1968 guarantee(md == NULL ||
1948 md->is_methodData(), "should be method data"); 1969 md->is_methodData(), "should be method data");
1949 } 1970 }
1950 1971
1951 #ifdef GRAAL 1972 #ifdef GRAAL