Mercurial > hg > graal-compiler
comparison src/share/vm/oops/methodKlass.cpp @ 6275:957c266d8bc5
Merge with http://hg.openjdk.java.net/hsx/hsx24/hotspot/
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 21 Aug 2012 10:39:19 +0200 |
parents | af59b4dfc9e4 1d7922586cf6 |
children |
comparison
equal
deleted
inserted
replaced
5891:fd8832ae511d | 6275:957c266d8bc5 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2012, 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. |
119 m->set_prev_time(0); | 119 m->set_prev_time(0); |
120 #endif | 120 #endif |
121 | 121 |
122 assert(m->is_parsable(), "must be parsable here."); | 122 assert(m->is_parsable(), "must be parsable here."); |
123 assert(m->size() == size, "wrong size for object"); | 123 assert(m->size() == size, "wrong size for object"); |
124 // We should not publish an uprasable object's reference | |
125 // into one that is parsable, since that presents problems | |
126 // for the concurrent parallel marking and precleaning phases | |
127 // of concurrent gc (CMS). | |
128 xconst->set_method(m); | |
129 return m; | 124 return m; |
130 } | 125 } |
131 | 126 |
132 | 127 |
133 void methodKlass::oop_follow_contents(oop obj) { | 128 void methodKlass::oop_follow_contents(oop obj) { |
134 assert (obj->is_method(), "object must be method"); | 129 assert (obj->is_method(), "object must be method"); |
135 methodOop m = methodOop(obj); | 130 methodOop m = methodOop(obj); |
136 // Performance tweak: We skip iterating over the klass pointer since we | 131 // Performance tweak: We skip iterating over the klass pointer since we |
137 // know that Universe::methodKlassObj never moves. | 132 // know that Universe::methodKlassObj never moves. |
138 MarkSweep::mark_and_push(m->adr_constMethod()); | 133 MarkSweep::mark_and_push(m->adr_constMethod()); |
139 MarkSweep::mark_and_push(m->adr_constants()); | |
140 #ifdef GRAAL | 134 #ifdef GRAAL |
141 MarkSweep::mark_and_push(m->adr_graal_mirror()); | 135 MarkSweep::mark_and_push(m->adr_graal_mirror()); |
142 #endif | 136 #endif |
143 MarkSweep::mark_and_push(m->adr_method_data()); | 137 MarkSweep::mark_and_push(m->adr_method_data()); |
144 } | 138 } |
149 assert (obj->is_method(), "object must be method"); | 143 assert (obj->is_method(), "object must be method"); |
150 methodOop m = methodOop(obj); | 144 methodOop m = methodOop(obj); |
151 // Performance tweak: We skip iterating over the klass pointer since we | 145 // Performance tweak: We skip iterating over the klass pointer since we |
152 // know that Universe::methodKlassObj never moves. | 146 // know that Universe::methodKlassObj never moves. |
153 PSParallelCompact::mark_and_push(cm, m->adr_constMethod()); | 147 PSParallelCompact::mark_and_push(cm, m->adr_constMethod()); |
154 PSParallelCompact::mark_and_push(cm, m->adr_constants()); | |
155 #ifdef GRAAL | 148 #ifdef GRAAL |
156 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); | 149 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); |
157 #endif | 150 #endif |
158 PSParallelCompact::mark_and_push(cm, m->adr_method_data()); | 151 PSParallelCompact::mark_and_push(cm, m->adr_method_data()); |
159 } | 152 } |
166 // Don't call size() or oop_size() since that is a virtual call. | 159 // Don't call size() or oop_size() since that is a virtual call. |
167 int size = m->object_size(); | 160 int size = m->object_size(); |
168 // Performance tweak: We skip iterating over the klass pointer since we | 161 // Performance tweak: We skip iterating over the klass pointer since we |
169 // know that Universe::methodKlassObj never moves | 162 // know that Universe::methodKlassObj never moves |
170 blk->do_oop(m->adr_constMethod()); | 163 blk->do_oop(m->adr_constMethod()); |
171 blk->do_oop(m->adr_constants()); | |
172 #ifdef GRAAL | 164 #ifdef GRAAL |
173 blk->do_oop(m->adr_graal_mirror()); | 165 blk->do_oop(m->adr_graal_mirror()); |
174 #endif | 166 #endif |
175 blk->do_oop(m->adr_method_data()); | 167 blk->do_oop(m->adr_method_data()); |
176 | 168 |
187 // Performance tweak: We skip iterating over the klass pointer since we | 179 // Performance tweak: We skip iterating over the klass pointer since we |
188 // know that Universe::methodKlassObj never moves. | 180 // know that Universe::methodKlassObj never moves. |
189 oop* adr; | 181 oop* adr; |
190 adr = m->adr_constMethod(); | 182 adr = m->adr_constMethod(); |
191 if (mr.contains(adr)) blk->do_oop(adr); | 183 if (mr.contains(adr)) blk->do_oop(adr); |
192 adr = m->adr_constants(); | |
193 if (mr.contains(adr)) blk->do_oop(adr); | |
194 #ifdef GRAAL | 184 #ifdef GRAAL |
195 adr = m->adr_graal_mirror(); | 185 adr = m->adr_graal_mirror(); |
196 if (mr.contains(adr)) blk->do_oop(adr); | 186 if (mr.contains(adr)) blk->do_oop(adr); |
197 #endif | 187 #endif |
198 adr = m->adr_method_data(); | 188 adr = m->adr_method_data(); |
209 // Don't call size() or oop_size() since that is a virtual call. | 199 // Don't call size() or oop_size() since that is a virtual call. |
210 int size = m->object_size(); | 200 int size = m->object_size(); |
211 // Performance tweak: We skip iterating over the klass pointer since we | 201 // Performance tweak: We skip iterating over the klass pointer since we |
212 // know that Universe::methodKlassObj never moves. | 202 // know that Universe::methodKlassObj never moves. |
213 MarkSweep::adjust_pointer(m->adr_constMethod()); | 203 MarkSweep::adjust_pointer(m->adr_constMethod()); |
214 MarkSweep::adjust_pointer(m->adr_constants()); | |
215 #ifdef GRAAL | 204 #ifdef GRAAL |
216 MarkSweep::adjust_pointer(m->adr_graal_mirror()); | 205 MarkSweep::adjust_pointer(m->adr_graal_mirror()); |
217 #endif | 206 #endif |
218 MarkSweep::adjust_pointer(m->adr_method_data()); | 207 MarkSweep::adjust_pointer(m->adr_method_data()); |
219 | 208 |
234 | 223 |
235 int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { | 224 int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
236 assert(obj->is_method(), "should be method"); | 225 assert(obj->is_method(), "should be method"); |
237 methodOop m = methodOop(obj); | 226 methodOop m = methodOop(obj); |
238 PSParallelCompact::adjust_pointer(m->adr_constMethod()); | 227 PSParallelCompact::adjust_pointer(m->adr_constMethod()); |
239 PSParallelCompact::adjust_pointer(m->adr_constants()); | |
240 #ifdef GRAAL | 228 #ifdef GRAAL |
241 PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); | 229 PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); |
242 #endif | 230 #endif |
243 PSParallelCompact::adjust_pointer(m->adr_method_data()); | 231 PSParallelCompact::adjust_pointer(m->adr_method_data()); |
244 return m->object_size(); | 232 return m->object_size(); |
270 st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id())); | 258 st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id())); |
271 if (m->highest_comp_level() != CompLevel_none) | 259 if (m->highest_comp_level() != CompLevel_none) |
272 st->print_cr(" - highest level: %d", m->highest_comp_level()); | 260 st->print_cr(" - highest level: %d", m->highest_comp_level()); |
273 st->print_cr(" - vtable index: %d", m->_vtable_index); | 261 st->print_cr(" - vtable index: %d", m->_vtable_index); |
274 st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry()); | 262 st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry()); |
275 st->print_cr(" - adapter: " INTPTR_FORMAT, m->adapter()); | 263 st->print( " - adapters: "); |
264 if (m->adapter() == NULL) | |
265 st->print_cr(INTPTR_FORMAT, m->adapter()); | |
266 else | |
267 m->adapter()->print_adapter_on(st); | |
276 st->print_cr(" - compiled entry " INTPTR_FORMAT, m->from_compiled_entry()); | 268 st->print_cr(" - compiled entry " INTPTR_FORMAT, m->from_compiled_entry()); |
277 st->print_cr(" - code size: %d", m->code_size()); | 269 st->print_cr(" - code size: %d", m->code_size()); |
278 if (m->code_size() != 0) { | 270 if (m->code_size() != 0) { |
279 st->print_cr(" - code start: " INTPTR_FORMAT, m->code_base()); | 271 st->print_cr(" - code start: " INTPTR_FORMAT, m->code_base()); |
280 st->print_cr(" - code end (excl): " INTPTR_FORMAT, m->code_base() + m->code_size()); | 272 st->print_cr(" - code end (excl): " INTPTR_FORMAT, m->code_base() + m->code_size()); |
318 } | 310 } |
319 } | 311 } |
320 if (m->code() != NULL) { | 312 if (m->code() != NULL) { |
321 st->print (" - compiled code: "); | 313 st->print (" - compiled code: "); |
322 m->code()->print_value_on(st); | 314 m->code()->print_value_on(st); |
323 st->cr(); | 315 } |
324 } | 316 if (m->is_native()) { |
325 if (m->is_method_handle_invoke()) { | |
326 st->print_cr(" - invoke method type: " INTPTR_FORMAT, (address) m->method_handle_type()); | |
327 // m is classified as native, but it does not have an interesting | |
328 // native_function or signature handler | |
329 } else if (m->is_native()) { | |
330 st->print_cr(" - native function: " INTPTR_FORMAT, m->native_function()); | 317 st->print_cr(" - native function: " INTPTR_FORMAT, m->native_function()); |
331 st->print_cr(" - signature handler: " INTPTR_FORMAT, m->signature_handler()); | 318 st->print_cr(" - signature handler: " INTPTR_FORMAT, m->signature_handler()); |
332 } | 319 } |
333 } | 320 } |
334 | 321 |
359 Klass::oop_verify_on(obj, st); | 346 Klass::oop_verify_on(obj, st); |
360 guarantee(obj->is_method(), "object must be method"); | 347 guarantee(obj->is_method(), "object must be method"); |
361 if (!obj->partially_loaded()) { | 348 if (!obj->partially_loaded()) { |
362 methodOop m = methodOop(obj); | 349 methodOop m = methodOop(obj); |
363 guarantee(m->is_perm(), "should be in permspace"); | 350 guarantee(m->is_perm(), "should be in permspace"); |
364 guarantee(m->constants()->is_perm(), "should be in permspace"); | |
365 guarantee(m->constants()->is_constantPool(), "should be constant pool"); | |
366 guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop"); | 351 guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop"); |
367 guarantee(m->constMethod()->is_perm(), "should be in permspace"); | 352 guarantee(m->constMethod()->is_perm(), "should be in permspace"); |
368 methodDataOop method_data = m->method_data(); | 353 methodDataOop method_data = m->method_data(); |
369 guarantee(method_data == NULL || | 354 guarantee(method_data == NULL || |
370 method_data->is_perm(), "should be in permspace"); | 355 method_data->is_perm(), "should be in permspace"); |