1 /*
2  * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
3  * Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved.
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This code is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 only, as
8  * published by the Free Software Foundation.
9  *
10  * This code is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13  * version 2 for more details (a copy is included in the LICENSE file that
14  * accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License version
17  * 2 along with this work; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19  *
20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21  * or visit www.oracle.com if you need additional information or have any
22  * questions.
23  *
24  */
25 
26 #include "precompiled.hpp"
27 #include "interpreter/interpreter.hpp"
28 #include "memory/resourceArea.hpp"
29 #include "memory/universe.hpp"
30 #include "oops/markWord.hpp"
31 #include "oops/method.hpp"
32 #include "oops/oop.inline.hpp"
33 #include "prims/methodHandles.hpp"
34 #include "runtime/frame.inline.hpp"
35 #include "runtime/handles.inline.hpp"
36 #include "runtime/javaCalls.hpp"
37 #include "runtime/monitorChunk.hpp"
38 #include "runtime/os.inline.hpp"
39 #include "runtime/signature.hpp"
40 #include "runtime/stackWatermarkSet.hpp"
41 #include "runtime/stubCodeGenerator.hpp"
42 #include "runtime/stubRoutines.hpp"
43 #include "vmreg_aarch64.inline.hpp"
44 #ifdef COMPILER1
45 #include "c1/c1_Runtime1.hpp"
46 #include "runtime/vframeArray.hpp"
47 #endif
48 
49 #ifdef ASSERT
check_location_valid()50 void RegisterMap::check_location_valid() {
51 }
52 #endif
53 
54 
55 // Profiling/safepoint support
56 
safe_for_sender(JavaThread * thread)57 bool frame::safe_for_sender(JavaThread *thread) {
58   address   sp = (address)_sp;
59   address   fp = (address)_fp;
60   address   unextended_sp = (address)_unextended_sp;
61 
62   // consider stack guards when trying to determine "safe" stack pointers
63   // sp must be within the usable part of the stack (not in guards)
64   if (!thread->is_in_usable_stack(sp)) {
65     return false;
66   }
67 
68   // When we are running interpreted code the machine stack pointer, SP, is
69   // set low enough so that the Java expression stack can grow and shrink
70   // without ever exceeding the machine stack bounds.  So, ESP >= SP.
71 
72   // When we call out of an interpreted method, SP is incremented so that
73   // the space between SP and ESP is removed.  The SP saved in the callee's
74   // frame is the SP *before* this increment.  So, when we walk a stack of
75   // interpreter frames the sender's SP saved in a frame might be less than
76   // the SP at the point of call.
77 
78   // So unextended sp must be within the stack but we need not to check
79   // that unextended sp >= sp
80   if (!thread->is_in_full_stack_checked(unextended_sp)) {
81     return false;
82   }
83 
84   // an fp must be within the stack and above (but not equal) sp
85   // second evaluation on fp+ is added to handle situation where fp is -1
86   bool fp_safe = thread->is_in_stack_range_excl(fp, sp) &&
87                  thread->is_in_full_stack_checked(fp + (return_addr_offset * sizeof(void*)));
88 
89   // We know sp/unextended_sp are safe only fp is questionable here
90 
91   // If the current frame is known to the code cache then we can attempt to
92   // to construct the sender and do some validation of it. This goes a long way
93   // toward eliminating issues when we get in frame construction code
94 
95   if (_cb != NULL ) {
96 
97     // First check if frame is complete and tester is reliable
98     // Unfortunately we can only check frame complete for runtime stubs and nmethod
99     // other generic buffer blobs are more problematic so we just assume they are
100     // ok. adapter blobs never have a frame complete and are never ok.
101 
102     if (!_cb->is_frame_complete_at(_pc)) {
103       if (_cb->is_nmethod() || _cb->is_adapter_blob() || _cb->is_runtime_stub()) {
104         return false;
105       }
106     }
107 
108     // Could just be some random pointer within the codeBlob
109     if (!_cb->code_contains(_pc)) {
110       return false;
111     }
112 
113     // Entry frame checks
114     if (is_entry_frame()) {
115       // an entry frame must have a valid fp.
116       return fp_safe && is_entry_frame_valid(thread);
117     }
118 
119     intptr_t* sender_sp = NULL;
120     intptr_t* sender_unextended_sp = NULL;
121     address   sender_pc = NULL;
122     intptr_t* saved_fp =  NULL;
123 
124     if (is_interpreted_frame()) {
125       // fp must be safe
126       if (!fp_safe) {
127         return false;
128       }
129 
130       sender_pc = (address) this->fp()[return_addr_offset];
131       // for interpreted frames, the value below is the sender "raw" sp,
132       // which can be different from the sender unextended sp (the sp seen
133       // by the sender) because of current frame local variables
134       sender_sp = (intptr_t*) addr_at(sender_sp_offset);
135       sender_unextended_sp = (intptr_t*) this->fp()[interpreter_frame_sender_sp_offset];
136       saved_fp = (intptr_t*) this->fp()[link_offset];
137 
138     } else {
139       // must be some sort of compiled/runtime frame
140       // fp does not have to be safe (although it could be check for c1?)
141 
142       // check for a valid frame_size, otherwise we are unlikely to get a valid sender_pc
143       if (_cb->frame_size() <= 0) {
144         return false;
145       }
146 
147       sender_sp = _unextended_sp + _cb->frame_size();
148       // Is sender_sp safe?
149       if (!thread->is_in_full_stack_checked((address)sender_sp)) {
150         return false;
151       }
152       sender_unextended_sp = sender_sp;
153       sender_pc = (address) *(sender_sp-1);
154       // Note: frame::sender_sp_offset is only valid for compiled frame
155       saved_fp = (intptr_t*) *(sender_sp - frame::sender_sp_offset);
156     }
157 
158 
159     // If the potential sender is the interpreter then we can do some more checking
160     if (Interpreter::contains(sender_pc)) {
161 
162       // fp is always saved in a recognizable place in any code we generate. However
163       // only if the sender is interpreted/call_stub (c1 too?) are we certain that the saved fp
164       // is really a frame pointer.
165 
166       if (!thread->is_in_stack_range_excl((address)saved_fp, (address)sender_sp)) {
167         return false;
168       }
169 
170       // construct the potential sender
171 
172       frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc);
173 
174       return sender.is_interpreted_frame_valid(thread);
175 
176     }
177 
178     // We must always be able to find a recognizable pc
179     CodeBlob* sender_blob = CodeCache::find_blob_unsafe(sender_pc);
180     if (sender_pc == NULL ||  sender_blob == NULL) {
181       return false;
182     }
183 
184     // Could be a zombie method
185     if (sender_blob->is_zombie() || sender_blob->is_unloaded()) {
186       return false;
187     }
188 
189     // Could just be some random pointer within the codeBlob
190     if (!sender_blob->code_contains(sender_pc)) {
191       return false;
192     }
193 
194     // We should never be able to see an adapter if the current frame is something from code cache
195     if (sender_blob->is_adapter_blob()) {
196       return false;
197     }
198 
199     // Could be the call_stub
200     if (StubRoutines::returns_to_call_stub(sender_pc)) {
201       if (!thread->is_in_stack_range_excl((address)saved_fp, (address)sender_sp)) {
202         return false;
203       }
204 
205       // construct the potential sender
206 
207       frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc);
208 
209       // Validate the JavaCallWrapper an entry frame must have
210       address jcw = (address)sender.entry_frame_call_wrapper();
211 
212       return thread->is_in_stack_range_excl(jcw, (address)sender.fp());
213     }
214 
215     CompiledMethod* nm = sender_blob->as_compiled_method_or_null();
216     if (nm != NULL) {
217       if (nm->is_deopt_mh_entry(sender_pc) || nm->is_deopt_entry(sender_pc) ||
218           nm->method()->is_method_handle_intrinsic()) {
219         return false;
220       }
221     }
222 
223     // If the frame size is 0 something (or less) is bad because every nmethod has a non-zero frame size
224     // because the return address counts against the callee's frame.
225 
226     if (sender_blob->frame_size() <= 0) {
227       assert(!sender_blob->is_compiled(), "should count return address at least");
228       return false;
229     }
230 
231     // We should never be able to see anything here except an nmethod. If something in the
232     // code cache (current frame) is called by an entity within the code cache that entity
233     // should not be anything but the call stub (already covered), the interpreter (already covered)
234     // or an nmethod.
235 
236     if (!sender_blob->is_compiled()) {
237         return false;
238     }
239 
240     // Could put some more validation for the potential non-interpreted sender
241     // frame we'd create by calling sender if I could think of any. Wait for next crash in forte...
242 
243     // One idea is seeing if the sender_pc we have is one that we'd expect to call to current cb
244 
245     // We've validated the potential sender that would be created
246     return true;
247   }
248 
249   // Must be native-compiled frame. Since sender will try and use fp to find
250   // linkages it must be safe
251 
252   if (!fp_safe) {
253     return false;
254   }
255 
256   // Will the pc we fetch be non-zero (which we'll find at the oldest frame)
257 
258   if ( (address) this->fp()[return_addr_offset] == NULL) return false;
259 
260 
261   // could try and do some more potential verification of native frame if we could think of some...
262 
263   return true;
264 
265 }
266 
patch_pc(Thread * thread,address pc)267 void frame::patch_pc(Thread* thread, address pc) {
268   assert(_cb == CodeCache::find_blob(pc), "unexpected pc");
269   address* pc_addr = &(((address*) sp())[-1]);
270   if (TracePcPatching) {
271     tty->print_cr("patch_pc at address " INTPTR_FORMAT " [" INTPTR_FORMAT " -> " INTPTR_FORMAT "]",
272                   p2i(pc_addr), p2i(*pc_addr), p2i(pc));
273   }
274   // Either the return address is the original one or we are going to
275   // patch in the same address that's already there.
276   assert(_pc == *pc_addr || pc == *pc_addr, "must be");
277   *pc_addr = pc;
278   address original_pc = CompiledMethod::get_deopt_original_pc(this);
279   if (original_pc != NULL) {
280     assert(original_pc == _pc, "expected original PC to be stored before patching");
281     _deopt_state = is_deoptimized;
282     // leave _pc as is
283   } else {
284     _deopt_state = not_deoptimized;
285     _pc = pc;
286   }
287 }
288 
is_interpreted_frame() const289 bool frame::is_interpreted_frame() const  {
290   return Interpreter::contains(pc());
291 }
292 
frame_size(RegisterMap * map) const293 int frame::frame_size(RegisterMap* map) const {
294   frame sender = this->sender(map);
295   return sender.sp() - sp();
296 }
297 
entry_frame_argument_at(int offset) const298 intptr_t* frame::entry_frame_argument_at(int offset) const {
299   // convert offset to index to deal with tsi
300   int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize);
301   // Entry frame's arguments are always in relation to unextended_sp()
302   return &unextended_sp()[index];
303 }
304 
305 // sender_sp
interpreter_frame_sender_sp() const306 intptr_t* frame::interpreter_frame_sender_sp() const {
307   assert(is_interpreted_frame(), "interpreted frame expected");
308   return (intptr_t*) at(interpreter_frame_sender_sp_offset);
309 }
310 
set_interpreter_frame_sender_sp(intptr_t * sender_sp)311 void frame::set_interpreter_frame_sender_sp(intptr_t* sender_sp) {
312   assert(is_interpreted_frame(), "interpreted frame expected");
313   ptr_at_put(interpreter_frame_sender_sp_offset, (intptr_t) sender_sp);
314 }
315 
316 
317 // monitor elements
318 
interpreter_frame_monitor_begin() const319 BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
320   return (BasicObjectLock*) addr_at(interpreter_frame_monitor_block_bottom_offset);
321 }
322 
interpreter_frame_monitor_end() const323 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
324   BasicObjectLock* result = (BasicObjectLock*) *addr_at(interpreter_frame_monitor_block_top_offset);
325   // make sure the pointer points inside the frame
326   assert(sp() <= (intptr_t*) result, "monitor end should be above the stack pointer");
327   assert((intptr_t*) result < fp(),  "monitor end should be strictly below the frame pointer");
328   return result;
329 }
330 
interpreter_frame_set_monitor_end(BasicObjectLock * value)331 void frame::interpreter_frame_set_monitor_end(BasicObjectLock* value) {
332   *((BasicObjectLock**)addr_at(interpreter_frame_monitor_block_top_offset)) = value;
333 }
334 
335 // Used by template based interpreter deoptimization
interpreter_frame_set_last_sp(intptr_t * sp)336 void frame::interpreter_frame_set_last_sp(intptr_t* sp) {
337     *((intptr_t**)addr_at(interpreter_frame_last_sp_offset)) = sp;
338 }
339 
sender_for_entry_frame(RegisterMap * map) const340 frame frame::sender_for_entry_frame(RegisterMap* map) const {
341   assert(map != NULL, "map must be set");
342   // Java frame called from C; skip all C frames and return top C
343   // frame of that chunk as the sender
344   JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor();
345   assert(!entry_frame_is_first(), "next Java fp must be non zero");
346   assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack");
347   // Since we are walking the stack now this nested anchor is obviously walkable
348   // even if it wasn't when it was stacked.
349   if (!jfa->walkable()) {
350     // Capture _last_Java_pc (if needed) and mark anchor walkable.
351     jfa->capture_last_Java_pc();
352   }
353   map->clear();
354   assert(map->include_argument_oops(), "should be set by clear");
355   vmassert(jfa->last_Java_pc() != NULL, "not walkable");
356   frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc());
357   return fr;
358 }
359 
360 //------------------------------------------------------------------------------
361 // frame::verify_deopt_original_pc
362 //
363 // Verifies the calculated original PC of a deoptimization PC for the
364 // given unextended SP.
365 #ifdef ASSERT
verify_deopt_original_pc(CompiledMethod * nm,intptr_t * unextended_sp)366 void frame::verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp) {
367   frame fr;
368 
369   // This is ugly but it's better than to change {get,set}_original_pc
370   // to take an SP value as argument.  And it's only a debugging
371   // method anyway.
372   fr._unextended_sp = unextended_sp;
373 
374   address original_pc = nm->get_original_pc(&fr);
375   assert(nm->insts_contains_inclusive(original_pc),
376          "original PC must be in the main code section of the the compiled method (or must be immediately following it)");
377 }
378 #endif
379 
380 //------------------------------------------------------------------------------
381 // frame::adjust_unextended_sp
adjust_unextended_sp()382 void frame::adjust_unextended_sp() {
383   // On aarch64, sites calling method handle intrinsics and lambda forms are treated
384   // as any other call site. Therefore, no special action is needed when we are
385   // returning to any of these call sites.
386 
387   if (_cb != NULL) {
388     CompiledMethod* sender_cm = _cb->as_compiled_method_or_null();
389     if (sender_cm != NULL) {
390       // If the sender PC is a deoptimization point, get the original PC.
391       if (sender_cm->is_deopt_entry(_pc) ||
392           sender_cm->is_deopt_mh_entry(_pc)) {
393         DEBUG_ONLY(verify_deopt_original_pc(sender_cm, _unextended_sp));
394       }
395     }
396   }
397 }
398 
399 //------------------------------------------------------------------------------
400 // frame::update_map_with_saved_link
update_map_with_saved_link(RegisterMap * map,intptr_t ** link_addr)401 void frame::update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr) {
402   // The interpreter and compiler(s) always save fp in a known
403   // location on entry. We must record where that location is
404   // so that if fp was live on callout from c2 we can find
405   // the saved copy no matter what it called.
406 
407   // Since the interpreter always saves fp if we record where it is then
408   // we don't have to always save fp on entry and exit to c2 compiled
409   // code, on entry will be enough.
410   map->set_location(rfp->as_VMReg(), (address) link_addr);
411   // this is weird "H" ought to be at a higher address however the
412   // oopMaps seems to have the "H" regs at the same address and the
413   // vanilla register.
414   // XXXX make this go away
415   if (true) {
416     map->set_location(rfp->as_VMReg()->next(), (address) link_addr);
417   }
418 }
419 
420 
421 //------------------------------------------------------------------------------
422 // frame::sender_for_interpreter_frame
sender_for_interpreter_frame(RegisterMap * map) const423 frame frame::sender_for_interpreter_frame(RegisterMap* map) const {
424   // SP is the raw SP from the sender after adapter or interpreter
425   // extension.
426   intptr_t* sender_sp = this->sender_sp();
427 
428   // This is the sp before any possible extension (adapter/locals).
429   intptr_t* unextended_sp = interpreter_frame_sender_sp();
430 
431 #if COMPILER2_OR_JVMCI
432   if (map->update_map()) {
433     update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset));
434   }
435 #endif // COMPILER2_OR_JVMCI
436 
437   return frame(sender_sp, unextended_sp, link(), sender_pc());
438 }
439 
440 
441 //------------------------------------------------------------------------------
442 // frame::sender_for_compiled_frame
sender_for_compiled_frame(RegisterMap * map) const443 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
444   // we cannot rely upon the last fp having been saved to the thread
445   // in C2 code but it will have been pushed onto the stack. so we
446   // have to find it relative to the unextended sp
447 
448   assert(_cb->frame_size() >= 0, "must have non-zero frame size");
449   intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size();
450   intptr_t* unextended_sp = l_sender_sp;
451 
452   // the return_address is always the word on the stack
453   address sender_pc = (address) *(l_sender_sp-1);
454 
455   intptr_t** saved_fp_addr = (intptr_t**) (l_sender_sp - frame::sender_sp_offset);
456 
457   // assert (sender_sp() == l_sender_sp, "should be");
458   // assert (*saved_fp_addr == link(), "should be");
459 
460   if (map->update_map()) {
461     // Tell GC to use argument oopmaps for some runtime stubs that need it.
462     // For C1, the runtime stub might not have oop maps, so set this flag
463     // outside of update_register_map.
464     map->set_include_argument_oops(_cb->caller_must_gc_arguments(map->thread()));
465     if (_cb->oop_maps() != NULL) {
466       OopMapSet::update_register_map(this, map);
467     }
468 
469     // Since the prolog does the save and restore of FP there is no
470     // oopmap for it so we must fill in its location as if there was
471     // an oopmap entry since if our caller was compiled code there
472     // could be live jvm state in it.
473     update_map_with_saved_link(map, saved_fp_addr);
474   }
475 
476   return frame(l_sender_sp, unextended_sp, *saved_fp_addr, sender_pc);
477 }
478 
479 //------------------------------------------------------------------------------
480 // frame::sender_raw
sender_raw(RegisterMap * map) const481 frame frame::sender_raw(RegisterMap* map) const {
482   // Default is we done have to follow them. The sender_for_xxx will
483   // update it accordingly
484    map->set_include_argument_oops(false);
485 
486   if (is_entry_frame())
487     return sender_for_entry_frame(map);
488   if (is_interpreted_frame())
489     return sender_for_interpreter_frame(map);
490   assert(_cb == CodeCache::find_blob(pc()),"Must be the same");
491 
492   // This test looks odd: why is it not is_compiled_frame() ?  That's
493   // because stubs also have OOP maps.
494   if (_cb != NULL) {
495     return sender_for_compiled_frame(map);
496   }
497 
498   // Must be native-compiled frame, i.e. the marshaling code for native
499   // methods that exists in the core system.
500   return frame(sender_sp(), link(), sender_pc());
501 }
502 
sender(RegisterMap * map) const503 frame frame::sender(RegisterMap* map) const {
504   frame result = sender_raw(map);
505 
506   if (map->process_frames()) {
507     StackWatermarkSet::on_iteration(map->thread(), result);
508   }
509 
510   return result;
511 }
512 
is_interpreted_frame_valid(JavaThread * thread) const513 bool frame::is_interpreted_frame_valid(JavaThread* thread) const {
514   assert(is_interpreted_frame(), "Not an interpreted frame");
515   // These are reasonable sanity checks
516   if (fp() == 0 || (intptr_t(fp()) & (wordSize-1)) != 0) {
517     return false;
518   }
519   if (sp() == 0 || (intptr_t(sp()) & (wordSize-1)) != 0) {
520     return false;
521   }
522   if (fp() + interpreter_frame_initial_sp_offset < sp()) {
523     return false;
524   }
525   // These are hacks to keep us out of trouble.
526   // The problem with these is that they mask other problems
527   if (fp() <= sp()) {        // this attempts to deal with unsigned comparison above
528     return false;
529   }
530 
531   // do some validation of frame elements
532 
533   // first the method
534 
535   Method* m = *interpreter_frame_method_addr();
536 
537   // validate the method we'd find in this potential sender
538   if (!Method::is_valid_method(m)) return false;
539 
540   // stack frames shouldn't be much larger than max_stack elements
541   // this test requires the use of unextended_sp which is the sp as seen by
542   // the current frame, and not sp which is the "raw" pc which could point
543   // further because of local variables of the callee method inserted after
544   // method arguments
545   if (fp() - unextended_sp() > 1024 + m->max_stack()*Interpreter::stackElementSize) {
546     return false;
547   }
548 
549   // validate bci/bcx
550 
551   address  bcp    = interpreter_frame_bcp();
552   if (m->validate_bci_from_bcp(bcp) < 0) {
553     return false;
554   }
555 
556   // validate constantPoolCache*
557   ConstantPoolCache* cp = *interpreter_frame_cache_addr();
558   if (MetaspaceObj::is_valid(cp) == false) return false;
559 
560   // validate locals
561 
562   address locals =  (address) *interpreter_frame_locals_addr();
563   return thread->is_in_stack_range_incl(locals, (address)fp());
564 }
565 
interpreter_frame_result(oop * oop_result,jvalue * value_result)566 BasicType frame::interpreter_frame_result(oop* oop_result, jvalue* value_result) {
567   assert(is_interpreted_frame(), "interpreted frame expected");
568   Method* method = interpreter_frame_method();
569   BasicType type = method->result_type();
570 
571   intptr_t* tos_addr;
572   if (method->is_native()) {
573     // TODO : ensure AARCH64 does the same as Intel here i.e. push v0 then r0
574     // Prior to calling into the runtime to report the method_exit the possible
575     // return value is pushed to the native stack. If the result is a jfloat/jdouble
576     // then ST0 is saved before EAX/EDX. See the note in generate_native_result
577     tos_addr = (intptr_t*)sp();
578     if (type == T_FLOAT || type == T_DOUBLE) {
579       // This is times two because we do a push(ltos) after pushing XMM0
580       // and that takes two interpreter stack slots.
581       tos_addr += 2 * Interpreter::stackElementWords;
582     }
583   } else {
584     tos_addr = (intptr_t*)interpreter_frame_tos_address();
585   }
586 
587   switch (type) {
588     case T_OBJECT  :
589     case T_ARRAY   : {
590       oop obj;
591       if (method->is_native()) {
592         obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
593       } else {
594         oop* obj_p = (oop*)tos_addr;
595         obj = (obj_p == NULL) ? (oop)NULL : *obj_p;
596       }
597       assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
598       *oop_result = obj;
599       break;
600     }
601     case T_BOOLEAN : value_result->z = *(jboolean*)tos_addr; break;
602     case T_BYTE    : value_result->b = *(jbyte*)tos_addr; break;
603     case T_CHAR    : value_result->c = *(jchar*)tos_addr; break;
604     case T_SHORT   : value_result->s = *(jshort*)tos_addr; break;
605     case T_INT     : value_result->i = *(jint*)tos_addr; break;
606     case T_LONG    : value_result->j = *(jlong*)tos_addr; break;
607     case T_FLOAT   : {
608         value_result->f = *(jfloat*)tos_addr;
609       break;
610     }
611     case T_DOUBLE  : value_result->d = *(jdouble*)tos_addr; break;
612     case T_VOID    : /* Nothing to do */ break;
613     default        : ShouldNotReachHere();
614   }
615 
616   return type;
617 }
618 
619 
interpreter_frame_tos_at(jint offset) const620 intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
621   int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize);
622   return &interpreter_frame_tos_address()[index];
623 }
624 
625 #ifndef PRODUCT
626 
627 #define DESCRIBE_FP_OFFSET(name) \
628   values.describe(frame_no, fp() + frame::name##_offset, #name)
629 
describe_pd(FrameValues & values,int frame_no)630 void frame::describe_pd(FrameValues& values, int frame_no) {
631   if (is_interpreted_frame()) {
632     DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
633     DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
634     DESCRIBE_FP_OFFSET(interpreter_frame_method);
635     DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
636     DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
637     DESCRIBE_FP_OFFSET(interpreter_frame_cache);
638     DESCRIBE_FP_OFFSET(interpreter_frame_locals);
639     DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
640     DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
641   }
642 }
643 #endif
644 
initial_deoptimization_info()645 intptr_t *frame::initial_deoptimization_info() {
646   // Not used on aarch64, but we must return something.
647   return NULL;
648 }
649 
real_fp() const650 intptr_t* frame::real_fp() const {
651   if (_cb != NULL) {
652     // use the frame size if valid
653     int size = _cb->frame_size();
654     if (size > 0) {
655       return unextended_sp() + size;
656     }
657   }
658   // else rely on fp()
659   assert(! is_compiled_frame(), "unknown compiled frame size");
660   return fp();
661 }
662 
663 #undef DESCRIBE_FP_OFFSET
664 
665 #define DESCRIBE_FP_OFFSET(name)                     \
666   {                                                  \
667     uintptr_t *p = (uintptr_t *)fp;                  \
668     printf(INTPTR_FORMAT " " INTPTR_FORMAT " %s\n",  \
669            (uintptr_t)(p + frame::name##_offset),    \
670            p[frame::name##_offset], #name);          \
671   }
672 
673 static THREAD_LOCAL uintptr_t nextfp;
674 static THREAD_LOCAL uintptr_t nextpc;
675 static THREAD_LOCAL uintptr_t nextsp;
676 static THREAD_LOCAL RegisterMap *reg_map;
677 
printbc(Method * m,intptr_t bcx)678 static void printbc(Method *m, intptr_t bcx) {
679   const char *name;
680   char buf[16];
681   if (m->validate_bci_from_bcp((address)bcx) < 0
682       || !m->contains((address)bcx)) {
683     name = "???";
684     snprintf(buf, sizeof buf, "(bad)");
685   } else {
686     int bci = m->bci_from((address)bcx);
687     snprintf(buf, sizeof buf, "%d", bci);
688     name = Bytecodes::name(m->code_at(bci));
689   }
690   ResourceMark rm;
691   printf("%s : %s ==> %s\n", m->name_and_sig_as_C_string(), buf, name);
692 }
693 
internal_pf(uintptr_t sp,uintptr_t fp,uintptr_t pc,uintptr_t bcx)694 void internal_pf(uintptr_t sp, uintptr_t fp, uintptr_t pc, uintptr_t bcx) {
695   if (! fp)
696     return;
697 
698   DESCRIBE_FP_OFFSET(return_addr);
699   DESCRIBE_FP_OFFSET(link);
700   DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
701   DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
702   DESCRIBE_FP_OFFSET(interpreter_frame_method);
703   DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
704   DESCRIBE_FP_OFFSET(interpreter_frame_cache);
705   DESCRIBE_FP_OFFSET(interpreter_frame_locals);
706   DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
707   DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
708   uintptr_t *p = (uintptr_t *)fp;
709 
710   // We want to see all frames, native and Java.  For compiled and
711   // interpreted frames we have special information that allows us to
712   // unwind them; for everything else we assume that the native frame
713   // pointer chain is intact.
714   frame this_frame((intptr_t*)sp, (intptr_t*)fp, (address)pc);
715   if (this_frame.is_compiled_frame() ||
716       this_frame.is_interpreted_frame()) {
717     frame sender = this_frame.sender(reg_map);
718     nextfp = (uintptr_t)sender.fp();
719     nextpc = (uintptr_t)sender.pc();
720     nextsp = (uintptr_t)sender.unextended_sp();
721   } else {
722     nextfp = p[frame::link_offset];
723     nextpc = p[frame::return_addr_offset];
724     nextsp = (uintptr_t)&p[frame::sender_sp_offset];
725   }
726 
727   if (bcx == -1ULL)
728     bcx = p[frame::interpreter_frame_bcp_offset];
729 
730   if (Interpreter::contains((address)pc)) {
731     Method* m = (Method*)p[frame::interpreter_frame_method_offset];
732     if(m && m->is_method()) {
733       printbc(m, bcx);
734     } else
735       printf("not a Method\n");
736   } else {
737     CodeBlob *cb = CodeCache::find_blob((address)pc);
738     if (cb != NULL) {
739       if (cb->is_nmethod()) {
740         ResourceMark rm;
741         nmethod* nm = (nmethod*)cb;
742         printf("nmethod %s\n", nm->method()->name_and_sig_as_C_string());
743       } else if (cb->name()) {
744         printf("CodeBlob %s\n", cb->name());
745       }
746     }
747   }
748 }
749 
npf()750 extern "C" void npf() {
751   CodeBlob *cb = CodeCache::find_blob((address)nextpc);
752   // C2 does not always chain the frame pointers when it can, instead
753   // preferring to use fixed offsets from SP, so a simple leave() does
754   // not work.  Instead, it adds the frame size to SP then pops FP and
755   // LR.  We have to do the same thing to get a good call chain.
756   if (cb && cb->frame_size())
757     nextfp = nextsp + wordSize * (cb->frame_size() - 2);
758   internal_pf (nextsp, nextfp, nextpc, -1);
759 }
760 
pf(uintptr_t sp,uintptr_t fp,uintptr_t pc,uintptr_t bcx,uintptr_t thread)761 extern "C" void pf(uintptr_t sp, uintptr_t fp, uintptr_t pc,
762                    uintptr_t bcx, uintptr_t thread) {
763   if (!reg_map) {
764     reg_map = NEW_C_HEAP_OBJ(RegisterMap, mtInternal);
765     ::new (reg_map) RegisterMap((JavaThread*)thread, false);
766   } else {
767     *reg_map = RegisterMap((JavaThread*)thread, false);
768   }
769 
770   {
771     CodeBlob *cb = CodeCache::find_blob((address)pc);
772     if (cb && cb->frame_size())
773       fp = sp + wordSize * (cb->frame_size() - 2);
774   }
775   internal_pf(sp, fp, pc, bcx);
776 }
777 
778 // support for printing out where we are in a Java method
779 // needs to be passed current fp and bcp register values
780 // prints method name, bc index and bytecode name
pm(uintptr_t fp,uintptr_t bcx)781 extern "C" void pm(uintptr_t fp, uintptr_t bcx) {
782   DESCRIBE_FP_OFFSET(interpreter_frame_method);
783   uintptr_t *p = (uintptr_t *)fp;
784   Method* m = (Method*)p[frame::interpreter_frame_method_offset];
785   printbc(m, bcx);
786 }
787 
788 #ifndef PRODUCT
789 // This is a generic constructor which is only used by pns() in debug.cpp.
frame(void * sp,void * fp,void * pc)790 frame::frame(void* sp, void* fp, void* pc) {
791   init((intptr_t*)sp, (intptr_t*)fp, (address)pc);
792 }
793 
pd_ps()794 void frame::pd_ps() {}
795 #endif
796 
make_walkable(JavaThread * thread)797 void JavaFrameAnchor::make_walkable(JavaThread* thread) {
798   // last frame set?
799   if (last_Java_sp() == NULL) return;
800   // already walkable?
801   if (walkable()) return;
802   vmassert(Thread::current() == (Thread*)thread, "not current thread");
803   vmassert(last_Java_sp() != NULL, "not called from Java code?");
804   vmassert(last_Java_pc() == NULL, "already walkable");
805   capture_last_Java_pc();
806   vmassert(walkable(), "something went wrong");
807 }
808 
capture_last_Java_pc()809 void JavaFrameAnchor::capture_last_Java_pc() {
810   vmassert(_last_Java_sp != NULL, "no last frame set");
811   vmassert(_last_Java_pc == NULL, "already walkable");
812   _last_Java_pc = (address)_last_Java_sp[-1];
813 }
814