1/*
2 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#include "precompiled.hpp"
26#include "classfile/moduleEntry.hpp"
27#include "code/codeCache.hpp"
28#include "code/vmreg.inline.hpp"
29#include "compiler/abstractCompiler.hpp"
30#include "compiler/disassembler.hpp"
31#include "gc/shared/collectedHeap.inline.hpp"
32#include "interpreter/interpreter.hpp"
33#include "interpreter/oopMapCache.hpp"
34#include "memory/resourceArea.hpp"
35#include "memory/universe.hpp"
36#include "oops/markOop.hpp"
37#include "oops/method.hpp"
38#include "oops/methodData.hpp"
39#include "oops/oop.inline.hpp"
40#include "oops/verifyOopClosure.hpp"
41#include "prims/methodHandles.hpp"
42#include "runtime/frame.inline.hpp"
43#include "runtime/handles.inline.hpp"
44#include "runtime/javaCalls.hpp"
45#include "runtime/monitorChunk.hpp"
46#include "runtime/os.hpp"
47#include "runtime/sharedRuntime.hpp"
48#include "runtime/signature.hpp"
49#include "runtime/stubCodeGenerator.hpp"
50#include "runtime/stubRoutines.hpp"
51#include "runtime/thread.inline.hpp"
52#include "utilities/debug.hpp"
53#include "utilities/decoder.hpp"
54#include "utilities/formatBuffer.hpp"
55
56RegisterMap::RegisterMap(JavaThread *thread, bool update_map) {
57 _thread = thread;
58 _update_map = update_map;
59 clear();
60 debug_only(_update_for_id = NULL;)
61#ifndef PRODUCT
62 for (int i = 0; i < reg_count ; i++ ) _location[i] = NULL;
63#endif /* PRODUCT */
64}
65
66RegisterMap::RegisterMap(const RegisterMap* map) {
67 assert(map != this, "bad initialization parameter");
68 assert(map != NULL, "RegisterMap must be present");
69 _thread = map->thread();
70 _update_map = map->update_map();
71 _include_argument_oops = map->include_argument_oops();
72 debug_only(_update_for_id = map->_update_for_id;)
73 pd_initialize_from(map);
74 if (update_map()) {
75 for(int i = 0; i < location_valid_size; i++) {
76 LocationValidType bits = !update_map() ? 0 : map->_location_valid[i];
77 _location_valid[i] = bits;
78 // for whichever bits are set, pull in the corresponding map->_location
79 int j = i*location_valid_type_size;
80 while (bits != 0) {
81 if ((bits & 1) != 0) {
82 assert(0 <= j && j < reg_count, "range check");
83 _location[j] = map->_location[j];
84 }
85 bits >>= 1;
86 j += 1;
87 }
88 }
89 }
90}
91
92void RegisterMap::clear() {
93 set_include_argument_oops(true);
94 if (_update_map) {
95 for(int i = 0; i < location_valid_size; i++) {
96 _location_valid[i] = 0;
97 }
98 pd_clear();
99 } else {
100 pd_initialize();
101 }
102}
103
104#ifndef PRODUCT
105
106void RegisterMap::print_on(outputStream* st) const {
107 st->print_cr("Register map");
108 for(int i = 0; i < reg_count; i++) {
109
110 VMReg r = VMRegImpl::as_VMReg(i);
111 intptr_t* src = (intptr_t*) location(r);
112 if (src != NULL) {
113
114 r->print_on(st);
115 st->print(" [" INTPTR_FORMAT "] = ", p2i(src));
116 if (((uintptr_t)src & (sizeof(*src)-1)) != 0) {
117 st->print_cr("<misaligned>");
118 } else {
119 st->print_cr(INTPTR_FORMAT, *src);
120 }
121 }
122 }
123}
124
125void RegisterMap::print() const {
126 print_on(tty);
127}
128
129#endif
130// This returns the pc that if you were in the debugger you'd see. Not
131// the idealized value in the frame object. This undoes the magic conversion
132// that happens for deoptimized frames. In addition it makes the value the
133// hardware would want to see in the native frame. The only user (at this point)
134// is deoptimization. It likely no one else should ever use it.
135
136address frame::raw_pc() const {
137 if (is_deoptimized_frame()) {
138 CompiledMethod* cm = cb()->as_compiled_method_or_null();
139 if (cm->is_method_handle_return(pc()))
140 return cm->deopt_mh_handler_begin() - pc_return_offset;
141 else
142 return cm->deopt_handler_begin() - pc_return_offset;
143 } else {
144 return (pc() - pc_return_offset);
145 }
146}
147
148// Change the pc in a frame object. This does not change the actual pc in
149// actual frame. To do that use patch_pc.
150//
151void frame::set_pc(address newpc ) {
152#ifdef ASSERT
153 if (_cb != NULL && _cb->is_nmethod()) {
154 assert(!((nmethod*)_cb)->is_deopt_pc(_pc), "invariant violation");
155 }
156#endif // ASSERT
157
158 // Unsafe to use the is_deoptimzed tester after changing pc
159 _deopt_state = unknown;
160 _pc = newpc;
161 _cb = CodeCache::find_blob_unsafe(_pc);
162
163}
164
165// type testers
166bool frame::is_ignored_frame() const {
167 return false; // FIXME: some LambdaForm frames should be ignored
168}
169bool frame::is_deoptimized_frame() const {
170 assert(_deopt_state != unknown, "not answerable");
171 return _deopt_state == is_deoptimized;
172}
173
174bool frame::is_native_frame() const {
175 return (_cb != NULL &&
176 _cb->is_nmethod() &&
177 ((nmethod*)_cb)->is_native_method());
178}
179
180bool frame::is_java_frame() const {
181 if (is_interpreted_frame()) return true;
182 if (is_compiled_frame()) return true;
183 return false;
184}
185
186
187bool frame::is_compiled_frame() const {
188 if (_cb != NULL &&
189 _cb->is_compiled() &&
190 ((CompiledMethod*)_cb)->is_java_method()) {
191 return true;
192 }
193 return false;
194}
195
196
197bool frame::is_runtime_frame() const {
198 return (_cb != NULL && _cb->is_runtime_stub());
199}
200
201bool frame::is_safepoint_blob_frame() const {
202 return (_cb != NULL && _cb->is_safepoint_stub());
203}
204
205// testers
206
207bool frame::is_first_java_frame() const {
208 RegisterMap map(JavaThread::current(), false); // No update
209 frame s;
210 for (s = sender(&map); !(s.is_java_frame() || s.is_first_frame()); s = s.sender(&map));
211 return s.is_first_frame();
212}
213
214
215bool frame::entry_frame_is_first() const {
216 return entry_frame_call_wrapper()->is_first_frame();
217}
218
219JavaCallWrapper* frame::entry_frame_call_wrapper_if_safe(JavaThread* thread) const {
220 JavaCallWrapper** jcw = entry_frame_call_wrapper_addr();
221 address addr = (address) jcw;
222
223 // addr must be within the usable part of the stack
224 if (thread->is_in_usable_stack(addr)) {
225 return *jcw;
226 }
227
228 return NULL;
229}
230
231bool frame::is_entry_frame_valid(JavaThread* thread) const {
232 // Validate the JavaCallWrapper an entry frame must have
233 address jcw = (address)entry_frame_call_wrapper();
234 bool jcw_safe = (jcw < thread->stack_base()) && (jcw > (address)fp()); // less than stack base
235 if (!jcw_safe) {
236 return false;
237 }
238
239 // Validate sp saved in the java frame anchor
240 JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor();
241 return (jfa->last_Java_sp() > sp());
242}
243
244bool frame::should_be_deoptimized() const {
245 if (_deopt_state == is_deoptimized ||
246 !is_compiled_frame() ) return false;
247 assert(_cb != NULL && _cb->is_compiled(), "must be an nmethod");
248 CompiledMethod* nm = (CompiledMethod *)_cb;
249 if (TraceDependencies) {
250 tty->print("checking (%s) ", nm->is_marked_for_deoptimization() ? "true" : "false");
251 nm->print_value_on(tty);
252 tty->cr();
253 }
254
255 if( !nm->is_marked_for_deoptimization() )
256 return false;
257
258 // If at the return point, then the frame has already been popped, and
259 // only the return needs to be executed. Don't deoptimize here.
260 return !nm->is_at_poll_return(pc());
261}
262
263bool frame::can_be_deoptimized() const {
264 if (!is_compiled_frame()) return false;
265 CompiledMethod* nm = (CompiledMethod*)_cb;
266
267 if( !nm->can_be_deoptimized() )
268 return false;
269
270 return !nm->is_at_poll_return(pc());
271}
272
273void frame::deoptimize(JavaThread* thread) {
274 assert(thread->frame_anchor()->has_last_Java_frame() &&
275 thread->frame_anchor()->walkable(), "must be");
276 // Schedule deoptimization of an nmethod activation with this frame.
277 assert(_cb != NULL && _cb->is_compiled(), "must be");
278
279 // If the call site is a MethodHandle call site use the MH deopt
280 // handler.
281 CompiledMethod* cm = (CompiledMethod*) _cb;
282 address deopt = cm->is_method_handle_return(pc()) ?
283 cm->deopt_mh_handler_begin() :
284 cm->deopt_handler_begin();
285
286 // Save the original pc before we patch in the new one
287 cm->set_original_pc(this, pc());
288 patch_pc(thread, deopt);
289
290#ifdef ASSERT
291 {
292 RegisterMap map(thread, false);
293 frame check = thread->last_frame();
294 while (id() != check.id()) {
295 check = check.sender(&map);
296 }
297 assert(check.is_deoptimized_frame(), "missed deopt");
298 }
299#endif // ASSERT
300}
301
302frame frame::java_sender() const {
303 RegisterMap map(JavaThread::current(), false);
304 frame s;
305 for (s = sender(&map); !(s.is_java_frame() || s.is_first_frame()); s = s.sender(&map)) ;
306 guarantee(s.is_java_frame(), "tried to get caller of first java frame");
307 return s;
308}
309
310frame frame::real_sender(RegisterMap* map) const {
311 frame result = sender(map);
312 while (result.is_runtime_frame() ||
313 result.is_ignored_frame()) {
314 result = result.sender(map);
315 }
316 return result;
317}
318
319// Interpreter frames
320
321
322void frame::interpreter_frame_set_locals(intptr_t* locs) {
323 assert(is_interpreted_frame(), "Not an interpreted frame");
324 *interpreter_frame_locals_addr() = locs;
325}
326
327Method* frame::interpreter_frame_method() const {
328 assert(is_interpreted_frame(), "interpreted frame expected");
329 Method* m = *interpreter_frame_method_addr();
330 assert(m->is_method(), "not a Method*");
331 return m;
332}
333
334void frame::interpreter_frame_set_method(Method* method) {
335 assert(is_interpreted_frame(), "interpreted frame expected");
336 *interpreter_frame_method_addr() = method;
337}
338
339void frame::interpreter_frame_set_mirror(oop mirror) {
340 assert(is_interpreted_frame(), "interpreted frame expected");
341 *interpreter_frame_mirror_addr() = mirror;
342}
343
344jint frame::interpreter_frame_bci() const {
345 assert(is_interpreted_frame(), "interpreted frame expected");
346 address bcp = interpreter_frame_bcp();
347 return interpreter_frame_method()->bci_from(bcp);
348}
349
350address frame::interpreter_frame_bcp() const {
351 assert(is_interpreted_frame(), "interpreted frame expected");
352 address bcp = (address)*interpreter_frame_bcp_addr();
353 return interpreter_frame_method()->bcp_from(bcp);
354}
355
356void frame::interpreter_frame_set_bcp(address bcp) {
357 assert(is_interpreted_frame(), "interpreted frame expected");
358 *interpreter_frame_bcp_addr() = (intptr_t)bcp;
359}
360
361address frame::interpreter_frame_mdp() const {
362 assert(ProfileInterpreter, "must be profiling interpreter");
363 assert(is_interpreted_frame(), "interpreted frame expected");
364 return (address)*interpreter_frame_mdp_addr();
365}
366
367void frame::interpreter_frame_set_mdp(address mdp) {
368 assert(is_interpreted_frame(), "interpreted frame expected");
369 assert(ProfileInterpreter, "must be profiling interpreter");
370 *interpreter_frame_mdp_addr() = (intptr_t)mdp;
371}
372
373BasicObjectLock* frame::next_monitor_in_interpreter_frame(BasicObjectLock* current) const {
374 assert(is_interpreted_frame(), "Not an interpreted frame");
375#ifdef ASSERT
376 interpreter_frame_verify_monitor(current);
377#endif
378 BasicObjectLock* next = (BasicObjectLock*) (((intptr_t*) current) + interpreter_frame_monitor_size());
379 return next;
380}
381
382BasicObjectLock* frame::previous_monitor_in_interpreter_frame(BasicObjectLock* current) const {
383 assert(is_interpreted_frame(), "Not an interpreted frame");
384#ifdef ASSERT
385// // This verification needs to be checked before being enabled
386// interpreter_frame_verify_monitor(current);
387#endif
388 BasicObjectLock* previous = (BasicObjectLock*) (((intptr_t*) current) - interpreter_frame_monitor_size());
389 return previous;
390}
391
392// Interpreter locals and expression stack locations.
393
394intptr_t* frame::interpreter_frame_local_at(int index) const {
395 const int n = Interpreter::local_offset_in_bytes(index)/wordSize;
396 return &((*interpreter_frame_locals_addr())[n]);
397}
398
399intptr_t* frame::interpreter_frame_expression_stack_at(jint offset) const {
400 const int i = offset * interpreter_frame_expression_stack_direction();
401 const int n = i * Interpreter::stackElementWords;
402 return &(interpreter_frame_expression_stack()[n]);
403}
404
405jint frame::interpreter_frame_expression_stack_size() const {
406 // Number of elements on the interpreter expression stack
407 // Callers should span by stackElementWords
408 int element_size = Interpreter::stackElementWords;
409 size_t stack_size = 0;
410 if (frame::interpreter_frame_expression_stack_direction() < 0) {
411 stack_size = (interpreter_frame_expression_stack() -
412 interpreter_frame_tos_address() + 1)/element_size;
413 } else {
414 stack_size = (interpreter_frame_tos_address() -
415 interpreter_frame_expression_stack() + 1)/element_size;
416 }
417 assert( stack_size <= (size_t)max_jint, "stack size too big");
418 return ((jint)stack_size);
419}
420
421
422// (frame::interpreter_frame_sender_sp accessor is in frame_<arch>.cpp)
423
424const char* frame::print_name() const {
425 if (is_native_frame()) return "Native";
426 if (is_interpreted_frame()) return "Interpreted";
427 if (is_compiled_frame()) {
428 if (is_deoptimized_frame()) return "Deoptimized";
429 return "Compiled";
430 }
431 if (sp() == NULL) return "Empty";
432 return "C";
433}
434
435void frame::print_value_on(outputStream* st, JavaThread *thread) const {
436 NOT_PRODUCT(address begin = pc()-40;)
437 NOT_PRODUCT(address end = NULL;)
438
439 st->print("%s frame (sp=" INTPTR_FORMAT " unextended sp=" INTPTR_FORMAT, print_name(), p2i(sp()), p2i(unextended_sp()));
440 if (sp() != NULL)
441 st->print(", fp=" INTPTR_FORMAT ", real_fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT,
442 p2i(fp()), p2i(real_fp()), p2i(pc()));
443
444 if (StubRoutines::contains(pc())) {
445 st->print_cr(")");
446 st->print("(");
447 StubCodeDesc* desc = StubCodeDesc::desc_for(pc());
448 st->print("~Stub::%s", desc->name());
449 NOT_PRODUCT(begin = desc->begin(); end = desc->end();)
450 } else if (Interpreter::contains(pc())) {
451 st->print_cr(")");
452 st->print("(");
453 InterpreterCodelet* desc = Interpreter::codelet_containing(pc());
454 if (desc != NULL) {
455 st->print("~");
456 desc->print_on(st);
457 NOT_PRODUCT(begin = desc->code_begin(); end = desc->code_end();)
458 } else {
459 st->print("~interpreter");
460 }
461 }
462 st->print_cr(")");
463
464 if (_cb != NULL) {
465 st->print(" ");
466 _cb->print_value_on(st);
467 st->cr();
468#ifndef PRODUCT
469 if (end == NULL) {
470 begin = _cb->code_begin();
471 end = _cb->code_end();
472 }
473#endif
474 }
475 NOT_PRODUCT(if (WizardMode && Verbose) Disassembler::decode(begin, end);)
476}
477
478
479void frame::print_on(outputStream* st) const {
480 print_value_on(st,NULL);
481 if (is_interpreted_frame()) {
482 interpreter_frame_print_on(st);
483 }
484}
485
486
487void frame::interpreter_frame_print_on(outputStream* st) const {
488#ifndef PRODUCT
489 assert(is_interpreted_frame(), "Not an interpreted frame");
490 jint i;
491 for (i = 0; i < interpreter_frame_method()->max_locals(); i++ ) {
492 intptr_t x = *interpreter_frame_local_at(i);
493 st->print(" - local [" INTPTR_FORMAT "]", x);
494 st->fill_to(23);
495 st->print_cr("; #%d", i);
496 }
497 for (i = interpreter_frame_expression_stack_size() - 1; i >= 0; --i ) {
498 intptr_t x = *interpreter_frame_expression_stack_at(i);
499 st->print(" - stack [" INTPTR_FORMAT "]", x);
500 st->fill_to(23);
501 st->print_cr("; #%d", i);
502 }
503 // locks for synchronization
504 for (BasicObjectLock* current = interpreter_frame_monitor_end();
505 current < interpreter_frame_monitor_begin();
506 current = next_monitor_in_interpreter_frame(current)) {
507 st->print(" - obj [");
508 current->obj()->print_value_on(st);
509 st->print_cr("]");
510 st->print(" - lock [");
511 current->lock()->print_on(st);
512 st->print_cr("]");
513 }
514 // monitor
515 st->print_cr(" - monitor[" INTPTR_FORMAT "]", p2i(interpreter_frame_monitor_begin()));
516 // bcp
517 st->print(" - bcp [" INTPTR_FORMAT "]", p2i(interpreter_frame_bcp()));
518 st->fill_to(23);
519 st->print_cr("; @%d", interpreter_frame_bci());
520 // locals
521 st->print_cr(" - locals [" INTPTR_FORMAT "]", p2i(interpreter_frame_local_at(0)));
522 // method
523 st->print(" - method [" INTPTR_FORMAT "]", p2i(interpreter_frame_method()));
524 st->fill_to(23);
525 st->print("; ");
526 interpreter_frame_method()->print_name(st);
527 st->cr();
528#endif
529}
530
531// Print whether the frame is in the VM or OS indicating a HotSpot problem.
532// Otherwise, it's likely a bug in the native library that the Java code calls,
533// hopefully indicating where to submit bugs.
534void frame::print_C_frame(outputStream* st, char* buf, int buflen, address pc) {
535 // C/C++ frame
536 bool in_vm = os::address_is_in_vm(pc);
537 st->print(in_vm ? "V" : "C");
538
539 int offset;
540 bool found;
541
542 // libname
543 found = os::dll_address_to_library_name(pc, buf, buflen, &offset);
544 if (found) {
545 // skip directory names
546 const char *p1, *p2;
547 p1 = buf;
548 int len = (int)strlen(os::file_separator());
549 while ((p2 = strstr(p1, os::file_separator())) != NULL) p1 = p2 + len;
550 st->print(" [%s+0x%x]", p1, offset);
551 } else {
552 st->print(" " PTR_FORMAT, p2i(pc));
553 }
554
555 found = os::dll_address_to_function_name(pc, buf, buflen, &offset);
556 if (found) {
557 st->print(" %s+0x%x", buf, offset);
558 }
559}
560
561// frame::print_on_error() is called by fatal error handler. Notice that we may
562// crash inside this function if stack frame is corrupted. The fatal error
563// handler can catch and handle the crash. Here we assume the frame is valid.
564//
565// First letter indicates type of the frame:
566// J: Java frame (compiled)
567// A: Java frame (aot compiled)
568// j: Java frame (interpreted)
569// V: VM frame (C/C++)
570// v: Other frames running VM generated code (e.g. stubs, adapters, etc.)
571// C: C/C++ frame
572//
573// We don't need detailed frame type as that in frame::print_name(). "C"
574// suggests the problem is in user lib; everything else is likely a VM bug.
575
576void frame::print_on_error(outputStream* st, char* buf, int buflen, bool verbose) const {
577 if (_cb != NULL) {
578 if (Interpreter::contains(pc())) {
579 Method* m = this->interpreter_frame_method();
580 if (m != NULL) {
581 m->name_and_sig_as_C_string(buf, buflen);
582 st->print("j %s", buf);
583 st->print("+%d", this->interpreter_frame_bci());
584 ModuleEntry* module = m->method_holder()->module();
585 if (module->is_named()) {
586 module->name()->as_C_string(buf, buflen);
587 st->print(" %s", buf);
588 if (module->version() != NULL) {
589 module->version()->as_C_string(buf, buflen);
590 st->print("@%s", buf);
591 }
592 }
593 } else {
594 st->print("j " PTR_FORMAT, p2i(pc()));
595 }
596 } else if (StubRoutines::contains(pc())) {
597 StubCodeDesc* desc = StubCodeDesc::desc_for(pc());
598 if (desc != NULL) {
599 st->print("v ~StubRoutines::%s", desc->name());
600 } else {
601 st->print("v ~StubRoutines::" PTR_FORMAT, p2i(pc()));
602 }
603 } else if (_cb->is_buffer_blob()) {
604 st->print("v ~BufferBlob::%s", ((BufferBlob *)_cb)->name());
605 } else if (_cb->is_compiled()) {
606 CompiledMethod* cm = (CompiledMethod*)_cb;
607 Method* m = cm->method();
608 if (m != NULL) {
609 if (cm->is_aot()) {
610 st->print("A %d ", cm->compile_id());
611 } else if (cm->is_nmethod()) {
612 nmethod* nm = cm->as_nmethod();
613 st->print("J %d%s", nm->compile_id(), (nm->is_osr_method() ? "%" : ""));
614 st->print(" %s", nm->compiler_name());
615 }
616 m->name_and_sig_as_C_string(buf, buflen);
617 st->print(" %s", buf);
618 ModuleEntry* module = m->method_holder()->module();
619 if (module->is_named()) {
620 module->name()->as_C_string(buf, buflen);
621 st->print(" %s", buf);
622 if (module->version() != NULL) {
623 module->version()->as_C_string(buf, buflen);
624 st->print("@%s", buf);
625 }
626 }
627 st->print(" (%d bytes) @ " PTR_FORMAT " [" PTR_FORMAT "+" INTPTR_FORMAT "]",
628 m->code_size(), p2i(_pc), p2i(_cb->code_begin()), _pc - _cb->code_begin());
629#if INCLUDE_JVMCI
630 if (cm->is_nmethod()) {
631 nmethod* nm = cm->as_nmethod();
632 const char* jvmciName = nm->jvmci_name();
633 if (jvmciName != NULL) {
634 st->print(" (%s)", jvmciName);
635 }
636 }
637#endif
638 } else {
639 st->print("J " PTR_FORMAT, p2i(pc()));
640 }
641 } else if (_cb->is_runtime_stub()) {
642 st->print("v ~RuntimeStub::%s", ((RuntimeStub *)_cb)->name());
643 } else if (_cb->is_deoptimization_stub()) {
644 st->print("v ~DeoptimizationBlob");
645 } else if (_cb->is_exception_stub()) {
646 st->print("v ~ExceptionBlob");
647 } else if (_cb->is_safepoint_stub()) {
648 st->print("v ~SafepointBlob");
649 } else if (_cb->is_adapter_blob()) {
650 st->print("v ~AdapterBlob");
651 } else if (_cb->is_vtable_blob()) {
652 st->print("v ~VtableBlob");
653 } else if (_cb->is_method_handles_adapter_blob()) {
654 st->print("v ~MethodHandlesAdapterBlob");
655 } else if (_cb->is_uncommon_trap_stub()) {
656 st->print("v ~UncommonTrapBlob");
657 } else {
658 st->print("v blob " PTR_FORMAT, p2i(pc()));
659 }
660 } else {
661 print_C_frame(st, buf, buflen, pc());
662 }
663}
664
665
666/*
667 The interpreter_frame_expression_stack_at method in the case of SPARC needs the
668 max_stack value of the method in order to compute the expression stack address.
669 It uses the Method* in order to get the max_stack value but during GC this
670 Method* value saved on the frame is changed by reverse_and_push and hence cannot
671 be used. So we save the max_stack value in the FrameClosure object and pass it
672 down to the interpreter_frame_expression_stack_at method
673*/
674class InterpreterFrameClosure : public OffsetClosure {
675 private:
676 frame* _fr;
677 OopClosure* _f;
678 int _max_locals;
679 int _max_stack;
680
681 public:
682 InterpreterFrameClosure(frame* fr, int max_locals, int max_stack,
683 OopClosure* f) {
684 _fr = fr;
685 _max_locals = max_locals;
686 _max_stack = max_stack;
687 _f = f;
688 }
689
690 void offset_do(int offset) {
691 oop* addr;
692 if (offset < _max_locals) {
693 addr = (oop*) _fr->interpreter_frame_local_at(offset);
694 assert((intptr_t*)addr >= _fr->sp(), "must be inside the frame");
695 _f->do_oop(addr);
696 } else {
697 addr = (oop*) _fr->interpreter_frame_expression_stack_at((offset - _max_locals));
698 // In case of exceptions, the expression stack is invalid and the esp will be reset to express
699 // this condition. Therefore, we call f only if addr is 'inside' the stack (i.e., addr >= esp for Intel).
700 bool in_stack;
701 if (frame::interpreter_frame_expression_stack_direction() > 0) {
702 in_stack = (intptr_t*)addr <= _fr->interpreter_frame_tos_address();
703 } else {
704 in_stack = (intptr_t*)addr >= _fr->interpreter_frame_tos_address();
705 }
706 if (in_stack) {
707 _f->do_oop(addr);
708 }
709 }
710 }
711
712 int max_locals() { return _max_locals; }
713 frame* fr() { return _fr; }
714};
715
716
717class InterpretedArgumentOopFinder: public SignatureInfo {
718 private:
719 OopClosure* _f; // Closure to invoke
720 int _offset; // TOS-relative offset, decremented with each argument
721 bool _has_receiver; // true if the callee has a receiver
722 frame* _fr;
723
724 void set(int size, BasicType type) {
725 _offset -= size;
726 if (type == T_OBJECT || type == T_ARRAY) oop_offset_do();
727 }
728
729 void oop_offset_do() {
730 oop* addr;
731 addr = (oop*)_fr->interpreter_frame_tos_at(_offset);
732 _f->do_oop(addr);
733 }
734
735 public:
736 InterpretedArgumentOopFinder(Symbol* signature, bool has_receiver, frame* fr, OopClosure* f) : SignatureInfo(signature), _has_receiver(has_receiver) {
737 // compute size of arguments
738 int args_size = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0);
739 assert(!fr->is_interpreted_frame() ||
740 args_size <= fr->interpreter_frame_expression_stack_size(),
741 "args cannot be on stack anymore");
742 // initialize InterpretedArgumentOopFinder
743 _f = f;
744 _fr = fr;
745 _offset = args_size;
746 }
747
748 void oops_do() {
749 if (_has_receiver) {
750 --_offset;
751 oop_offset_do();
752 }
753 iterate_parameters();
754 }
755};
756
757
758// Entry frame has following form (n arguments)
759// +-----------+
760// sp -> | last arg |
761// +-----------+
762// : ::: :
763// +-----------+
764// (sp+n)->| first arg|
765// +-----------+
766
767
768
769// visits and GC's all the arguments in entry frame
770class EntryFrameOopFinder: public SignatureInfo {
771 private:
772 bool _is_static;
773 int _offset;
774 frame* _fr;
775 OopClosure* _f;
776
777 void set(int size, BasicType type) {
778 assert (_offset >= 0, "illegal offset");
779 if (type == T_OBJECT || type == T_ARRAY) oop_at_offset_do(_offset);
780 _offset -= size;
781 }
782
783 void oop_at_offset_do(int offset) {
784 assert (offset >= 0, "illegal offset");
785 oop* addr = (oop*) _fr->entry_frame_argument_at(offset);
786 _f->do_oop(addr);
787 }
788
789 public:
790 EntryFrameOopFinder(frame* frame, Symbol* signature, bool is_static) : SignatureInfo(signature) {
791 _f = NULL; // will be set later
792 _fr = frame;
793 _is_static = is_static;
794 _offset = ArgumentSizeComputer(signature).size() - 1; // last parameter is at index 0
795 }
796
797 void arguments_do(OopClosure* f) {
798 _f = f;
799 if (!_is_static) oop_at_offset_do(_offset+1); // do the receiver
800 iterate_parameters();
801 }
802
803};
804
805oop* frame::interpreter_callee_receiver_addr(Symbol* signature) {
806 ArgumentSizeComputer asc(signature);
807 int size = asc.size();
808 return (oop *)interpreter_frame_tos_at(size);
809}
810
811
812void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache) {
813 assert(is_interpreted_frame(), "Not an interpreted frame");
814 assert(map != NULL, "map must be set");
815 Thread *thread = Thread::current();
816 methodHandle m (thread, interpreter_frame_method());
817 jint bci = interpreter_frame_bci();
818
819 assert(!Universe::heap()->is_in(m()),
820 "must be valid oop");
821 assert(m->is_method(), "checking frame value");
822 assert((m->is_native() && bci == 0) ||
823 (!m->is_native() && bci >= 0 && bci < m->code_size()),
824 "invalid bci value");
825
826 // Handle the monitor elements in the activation
827 for (
828 BasicObjectLock* current = interpreter_frame_monitor_end();
829 current < interpreter_frame_monitor_begin();
830 current = next_monitor_in_interpreter_frame(current)
831 ) {
832#ifdef ASSERT
833 interpreter_frame_verify_monitor(current);
834#endif
835 current->oops_do(f);
836 }
837
838 if (m->is_native()) {
839 f->do_oop(interpreter_frame_temp_oop_addr());
840 }
841
842 // The method pointer in the frame might be the only path to the method's
843 // klass, and the klass needs to be kept alive while executing. The GCs
844 // don't trace through method pointers, so the mirror of the method's klass
845 // is installed as a GC root.
846 f->do_oop(interpreter_frame_mirror_addr());
847
848 int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals();
849
850 Symbol* signature = NULL;
851 bool has_receiver = false;
852
853 // Process a callee's arguments if we are at a call site
854 // (i.e., if we are at an invoke bytecode)
855 // This is used sometimes for calling into the VM, not for another
856 // interpreted or compiled frame.
857 if (!m->is_native()) {
858 Bytecode_invoke call = Bytecode_invoke_check(m, bci);
859 if (call.is_valid()) {
860 signature = call.signature();
861 has_receiver = call.has_receiver();
862 if (map->include_argument_oops() &&
863 interpreter_frame_expression_stack_size() > 0) {
864 ResourceMark rm(thread); // is this right ???
865 // we are at a call site & the expression stack is not empty
866 // => process callee's arguments
867 //
868 // Note: The expression stack can be empty if an exception
869 // occurred during method resolution/execution. In all
870 // cases we empty the expression stack completely be-
871 // fore handling the exception (the exception handling
872 // code in the interpreter calls a blocking runtime
873 // routine which can cause this code to be executed).
874 // (was bug gri 7/27/98)
875 oops_interpreted_arguments_do(signature, has_receiver, f);
876 }
877 }
878 }
879
880 InterpreterFrameClosure blk(this, max_locals, m->max_stack(), f);
881
882 // process locals & expression stack
883 InterpreterOopMap mask;
884 if (query_oop_map_cache) {
885 m->mask_for(bci, &mask);
886 } else {
887 OopMapCache::compute_one_oop_map(m, bci, &mask);
888 }
889 mask.iterate_oop(&blk);
890}
891
892
893void frame::oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f) {
894 InterpretedArgumentOopFinder finder(signature, has_receiver, this, f);
895 finder.oops_do();
896}
897
898void frame::oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* reg_map) {
899 assert(_cb != NULL, "sanity check");
900 if (_cb->oop_maps() != NULL) {
901 OopMapSet::oops_do(this, reg_map, f);
902
903 // Preserve potential arguments for a callee. We handle this by dispatching
904 // on the codeblob. For c2i, we do
905 if (reg_map->include_argument_oops()) {
906 _cb->preserve_callee_argument_oops(*this, reg_map, f);
907 }
908 }
909 // In cases where perm gen is collected, GC will want to mark
910 // oops referenced from nmethods active on thread stacks so as to
911 // prevent them from being collected. However, this visit should be
912 // restricted to certain phases of the collection only. The
913 // closure decides how it wants nmethods to be traced.
914 if (cf != NULL)
915 cf->do_code_blob(_cb);
916}
917
918class CompiledArgumentOopFinder: public SignatureInfo {
919 protected:
920 OopClosure* _f;
921 int _offset; // the current offset, incremented with each argument
922 bool _has_receiver; // true if the callee has a receiver
923 bool _has_appendix; // true if the call has an appendix
924 frame _fr;
925 RegisterMap* _reg_map;
926 int _arg_size;
927 VMRegPair* _regs; // VMReg list of arguments
928
929 void set(int size, BasicType type) {
930 if (type == T_OBJECT || type == T_ARRAY) handle_oop_offset();
931 _offset += size;
932 }
933
934 virtual void handle_oop_offset() {
935 // Extract low order register number from register array.
936 // In LP64-land, the high-order bits are valid but unhelpful.
937 VMReg reg = _regs[_offset].first();
938 oop *loc = _fr.oopmapreg_to_location(reg, _reg_map);
939 _f->do_oop(loc);
940 }
941
942 public:
943 CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, bool has_appendix, OopClosure* f, frame fr, const RegisterMap* reg_map)
944 : SignatureInfo(signature) {
945
946 // initialize CompiledArgumentOopFinder
947 _f = f;
948 _offset = 0;
949 _has_receiver = has_receiver;
950 _has_appendix = has_appendix;
951 _fr = fr;
952 _reg_map = (RegisterMap*)reg_map;
953 _arg_size = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0) + (has_appendix ? 1 : 0);
954
955 int arg_size;
956 _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, has_appendix, &arg_size);
957 assert(arg_size == _arg_size, "wrong arg size");
958 }
959
960 void oops_do() {
961 if (_has_receiver) {
962 handle_oop_offset();
963 _offset++;
964 }
965 iterate_parameters();
966 if (_has_appendix) {
967 handle_oop_offset();
968 _offset++;
969 }
970 }
971};
972
973void frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix,
974 const RegisterMap* reg_map, OopClosure* f) {
975 ResourceMark rm;
976 CompiledArgumentOopFinder finder(signature, has_receiver, has_appendix, f, *this, reg_map);
977 finder.oops_do();
978}
979
980
981// Get receiver out of callers frame, i.e. find parameter 0 in callers
982// frame. Consult ADLC for where parameter 0 is to be found. Then
983// check local reg_map for it being a callee-save register or argument
984// register, both of which are saved in the local frame. If not found
985// there, it must be an in-stack argument of the caller.
986// Note: caller.sp() points to callee-arguments
987oop frame::retrieve_receiver(RegisterMap* reg_map) {
988 frame caller = *this;
989
990 // First consult the ADLC on where it puts parameter 0 for this signature.
991 VMReg reg = SharedRuntime::name_for_receiver();
992 oop* oop_adr = caller.oopmapreg_to_location(reg, reg_map);
993 if (oop_adr == NULL) {
994 guarantee(oop_adr != NULL, "bad register save location");
995 return NULL;
996 }
997 oop r = *oop_adr;
998 assert(Universe::heap()->is_in_or_null(r), "bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", p2i(r), p2i(r));
999 return r;
1000}
1001
1002
1003BasicLock* frame::get_native_monitor() {
1004 nmethod* nm = (nmethod*)_cb;
1005 assert(_cb != NULL && _cb->is_nmethod() && nm->method()->is_native(),
1006 "Should not call this unless it's a native nmethod");
1007 int byte_offset = in_bytes(nm->native_basic_lock_sp_offset());
1008 assert(byte_offset >= 0, "should not see invalid offset");
1009 return (BasicLock*) &sp()[byte_offset / wordSize];
1010}
1011
1012oop frame::get_native_receiver() {
1013 nmethod* nm = (nmethod*)_cb;
1014 assert(_cb != NULL && _cb->is_nmethod() && nm->method()->is_native(),
1015 "Should not call this unless it's a native nmethod");
1016 int byte_offset = in_bytes(nm->native_receiver_sp_offset());
1017 assert(byte_offset >= 0, "should not see invalid offset");
1018 oop owner = ((oop*) sp())[byte_offset / wordSize];
1019 assert( Universe::heap()->is_in(owner), "bad receiver" );
1020 return owner;
1021}
1022
1023void frame::oops_entry_do(OopClosure* f, const RegisterMap* map) {
1024 assert(map != NULL, "map must be set");
1025 if (map->include_argument_oops()) {
1026 // must collect argument oops, as nobody else is doing it
1027 Thread *thread = Thread::current();
1028 methodHandle m (thread, entry_frame_call_wrapper()->callee_method());
1029 EntryFrameOopFinder finder(this, m->signature(), m->is_static());
1030 finder.arguments_do(f);
1031 }
1032 // Traverse the Handle Block saved in the entry frame
1033 entry_frame_call_wrapper()->oops_do(f);
1034}
1035
1036
1037void frame::oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) {
1038#ifndef PRODUCT
1039#if defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140
1040#pragma error_messages(off, SEC_NULL_PTR_DEREF)
1041#endif
1042 // simulate GC crash here to dump java thread in error report
1043 if (CrashGCForDumpingJavaThread) {
1044 char *t = NULL;
1045 *t = 'c';
1046 }
1047#endif
1048 if (is_interpreted_frame()) {
1049 oops_interpreted_do(f, map, use_interpreter_oop_map_cache);
1050 } else if (is_entry_frame()) {
1051 oops_entry_do(f, map);
1052 } else if (CodeCache::contains(pc())) {
1053 oops_code_blob_do(f, cf, map);
1054 } else {
1055 ShouldNotReachHere();
1056 }
1057}
1058
1059void frame::nmethods_do(CodeBlobClosure* cf) {
1060 if (_cb != NULL && _cb->is_nmethod()) {
1061 cf->do_code_blob(_cb);
1062 }
1063}
1064
1065
1066// Call f closure on the interpreted Method*s in the stack.
1067void frame::metadata_do(MetadataClosure* f) {
1068 ResourceMark rm;
1069 if (is_interpreted_frame()) {
1070 Method* m = this->interpreter_frame_method();
1071 assert(m != NULL, "expecting a method in this frame");
1072 f->do_metadata(m);
1073 }
1074}
1075
1076void frame::verify(const RegisterMap* map) {
1077 // for now make sure receiver type is correct
1078 if (is_interpreted_frame()) {
1079 Method* method = interpreter_frame_method();
1080 guarantee(method->is_method(), "method is wrong in frame::verify");
1081 if (!method->is_static()) {
1082 // fetch the receiver
1083 oop* p = (oop*) interpreter_frame_local_at(0);
1084 // make sure we have the right receiver type
1085 }
1086 }
1087#if COMPILER2_OR_JVMCI
1088 assert(DerivedPointerTable::is_empty(), "must be empty before verify");
1089#endif
1090 oops_do_internal(&VerifyOopClosure::verify_oop, NULL, (RegisterMap*)map, false);
1091}
1092
1093
1094#ifdef ASSERT
1095bool frame::verify_return_pc(address x) {
1096 if (StubRoutines::returns_to_call_stub(x)) {
1097 return true;
1098 }
1099 if (CodeCache::contains(x)) {
1100 return true;
1101 }
1102 if (Interpreter::contains(x)) {
1103 return true;
1104 }
1105 return false;
1106}
1107#endif
1108
1109#ifdef ASSERT
1110void frame::interpreter_frame_verify_monitor(BasicObjectLock* value) const {
1111 assert(is_interpreted_frame(), "Not an interpreted frame");
1112 // verify that the value is in the right part of the frame
1113 address low_mark = (address) interpreter_frame_monitor_end();
1114 address high_mark = (address) interpreter_frame_monitor_begin();
1115 address current = (address) value;
1116
1117 const int monitor_size = frame::interpreter_frame_monitor_size();
1118 guarantee((high_mark - current) % monitor_size == 0 , "Misaligned top of BasicObjectLock*");
1119 guarantee( high_mark > current , "Current BasicObjectLock* higher than high_mark");
1120
1121 guarantee((current - low_mark) % monitor_size == 0 , "Misaligned bottom of BasicObjectLock*");
1122 guarantee( current >= low_mark , "Current BasicObjectLock* below than low_mark");
1123}
1124#endif
1125
1126#ifndef PRODUCT
1127void frame::describe(FrameValues& values, int frame_no) {
1128 // boundaries: sp and the 'real' frame pointer
1129 values.describe(-1, sp(), err_msg("sp for #%d", frame_no), 1);
1130 intptr_t* frame_pointer = real_fp(); // Note: may differ from fp()
1131
1132 // print frame info at the highest boundary
1133 intptr_t* info_address = MAX2(sp(), frame_pointer);
1134
1135 if (info_address != frame_pointer) {
1136 // print frame_pointer explicitly if not marked by the frame info
1137 values.describe(-1, frame_pointer, err_msg("frame pointer for #%d", frame_no), 1);
1138 }
1139
1140 if (is_entry_frame() || is_compiled_frame() || is_interpreted_frame() || is_native_frame()) {
1141 // Label values common to most frames
1142 values.describe(-1, unextended_sp(), err_msg("unextended_sp for #%d", frame_no));
1143 }
1144
1145 if (is_interpreted_frame()) {
1146 Method* m = interpreter_frame_method();
1147 int bci = interpreter_frame_bci();
1148
1149 // Label the method and current bci
1150 values.describe(-1, info_address,
1151 FormatBuffer<1024>("#%d method %s @ %d", frame_no, m->name_and_sig_as_C_string(), bci), 2);
1152 values.describe(-1, info_address,
1153 err_msg("- %d locals %d max stack", m->max_locals(), m->max_stack()), 1);
1154 if (m->max_locals() > 0) {
1155 intptr_t* l0 = interpreter_frame_local_at(0);
1156 intptr_t* ln = interpreter_frame_local_at(m->max_locals() - 1);
1157 values.describe(-1, MAX2(l0, ln), err_msg("locals for #%d", frame_no), 1);
1158 // Report each local and mark as owned by this frame
1159 for (int l = 0; l < m->max_locals(); l++) {
1160 intptr_t* l0 = interpreter_frame_local_at(l);
1161 values.describe(frame_no, l0, err_msg("local %d", l));
1162 }
1163 }
1164
1165 // Compute the actual expression stack size
1166 InterpreterOopMap mask;
1167 OopMapCache::compute_one_oop_map(m, bci, &mask);
1168 intptr_t* tos = NULL;
1169 // Report each stack element and mark as owned by this frame
1170 for (int e = 0; e < mask.expression_stack_size(); e++) {
1171 tos = MAX2(tos, interpreter_frame_expression_stack_at(e));
1172 values.describe(frame_no, interpreter_frame_expression_stack_at(e),
1173 err_msg("stack %d", e));
1174 }
1175 if (tos != NULL) {
1176 values.describe(-1, tos, err_msg("expression stack for #%d", frame_no), 1);
1177 }
1178 if (interpreter_frame_monitor_begin() != interpreter_frame_monitor_end()) {
1179 values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_begin(), "monitors begin");
1180 values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_end(), "monitors end");
1181 }
1182 } else if (is_entry_frame()) {
1183 // For now just label the frame
1184 values.describe(-1, info_address, err_msg("#%d entry frame", frame_no), 2);
1185 } else if (is_compiled_frame()) {
1186 // For now just label the frame
1187 CompiledMethod* cm = (CompiledMethod*)cb();
1188 values.describe(-1, info_address,
1189 FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for method %s%s%s", frame_no,
1190 p2i(cm),
1191 (cm->is_aot() ? "A ": "J "),
1192 cm->method()->name_and_sig_as_C_string(),
1193 (_deopt_state == is_deoptimized) ?
1194 " (deoptimized)" :
1195 ((_deopt_state == unknown) ? " (state unknown)" : "")),
1196 2);
1197 } else if (is_native_frame()) {
1198 // For now just label the frame
1199 nmethod* nm = cb()->as_nmethod_or_null();
1200 values.describe(-1, info_address,
1201 FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for native method %s", frame_no,
1202 p2i(nm), nm->method()->name_and_sig_as_C_string()), 2);
1203 } else {
1204 // provide default info if not handled before
1205 char *info = (char *) "special frame";
1206 if ((_cb != NULL) &&
1207 (_cb->name() != NULL)) {
1208 info = (char *)_cb->name();
1209 }
1210 values.describe(-1, info_address, err_msg("#%d <%s>", frame_no, info), 2);
1211 }
1212
1213 // platform dependent additional data
1214 describe_pd(values, frame_no);
1215}
1216
1217#endif
1218
1219
1220//-----------------------------------------------------------------------------------
1221// StackFrameStream implementation
1222
1223StackFrameStream::StackFrameStream(JavaThread *thread, bool update) : _reg_map(thread, update) {
1224 assert(thread->has_last_Java_frame(), "sanity check");
1225 _fr = thread->last_frame();
1226 _is_done = false;
1227}
1228
1229
1230#ifndef PRODUCT
1231
1232void FrameValues::describe(int owner, intptr_t* location, const char* description, int priority) {
1233 FrameValue fv;
1234 fv.location = location;
1235 fv.owner = owner;
1236 fv.priority = priority;
1237 fv.description = NEW_RESOURCE_ARRAY(char, strlen(description) + 1);
1238 strcpy(fv.description, description);
1239 _values.append(fv);
1240}
1241
1242
1243#ifdef ASSERT
1244void FrameValues::validate() {
1245 _values.sort(compare);
1246 bool error = false;
1247 FrameValue prev;
1248 prev.owner = -1;
1249 for (int i = _values.length() - 1; i >= 0; i--) {
1250 FrameValue fv = _values.at(i);
1251 if (fv.owner == -1) continue;
1252 if (prev.owner == -1) {
1253 prev = fv;
1254 continue;
1255 }
1256 if (prev.location == fv.location) {
1257 if (fv.owner != prev.owner) {
1258 tty->print_cr("overlapping storage");
1259 tty->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT " %s", p2i(prev.location), *prev.location, prev.description);
1260 tty->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT " %s", p2i(fv.location), *fv.location, fv.description);
1261 error = true;
1262 }
1263 } else {
1264 prev = fv;
1265 }
1266 }
1267 assert(!error, "invalid layout");
1268}
1269#endif // ASSERT
1270
1271void FrameValues::print(JavaThread* thread) {
1272 _values.sort(compare);
1273
1274 // Sometimes values like the fp can be invalid values if the
1275 // register map wasn't updated during the walk. Trim out values
1276 // that aren't actually in the stack of the thread.
1277 int min_index = 0;
1278 int max_index = _values.length() - 1;
1279 intptr_t* v0 = _values.at(min_index).location;
1280 intptr_t* v1 = _values.at(max_index).location;
1281
1282 if (thread == Thread::current()) {
1283 while (!thread->is_in_stack((address)v0)) {
1284 v0 = _values.at(++min_index).location;
1285 }
1286 while (!thread->is_in_stack((address)v1)) {
1287 v1 = _values.at(--max_index).location;
1288 }
1289 } else {
1290 while (!thread->on_local_stack((address)v0)) {
1291 v0 = _values.at(++min_index).location;
1292 }
1293 while (!thread->on_local_stack((address)v1)) {
1294 v1 = _values.at(--max_index).location;
1295 }
1296 }
1297 intptr_t* min = MIN2(v0, v1);
1298 intptr_t* max = MAX2(v0, v1);
1299 intptr_t* cur = max;
1300 intptr_t* last = NULL;
1301 for (int i = max_index; i >= min_index; i--) {
1302 FrameValue fv = _values.at(i);
1303 while (cur > fv.location) {
1304 tty->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT, p2i(cur), *cur);
1305 cur--;
1306 }
1307 if (last == fv.location) {
1308 const char* spacer = " " LP64_ONLY(" ");
1309 tty->print_cr(" %s %s %s", spacer, spacer, fv.description);
1310 } else {
1311 tty->print_cr(" " INTPTR_FORMAT ": " INTPTR_FORMAT " %s", p2i(fv.location), *fv.location, fv.description);
1312 last = fv.location;
1313 cur--;
1314 }
1315 }
1316}
1317
1318#endif // ndef PRODUCT
1319