Mercurial > hg > truffle
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 |