hotspot/src/share/vm/runtime/frame.cpp
changeset 22838 82c7497fbad4
parent 22828 17ecb098bc1e
parent 20282 7f9cbdf89af2
child 22876 57aa8995d43b
equal deleted inserted replaced
22837:feba5d4126b8 22838:82c7497fbad4
     1 /*
     1 /*
     2  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1997, 2013, 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.
   650 }
   650 }
   651 
   651 
   652 // Return whether the frame is in the VM or os indicating a Hotspot problem.
   652 // Return whether the frame is in the VM or os indicating a Hotspot problem.
   653 // Otherwise, it's likely a bug in the native library that the Java code calls,
   653 // Otherwise, it's likely a bug in the native library that the Java code calls,
   654 // hopefully indicating where to submit bugs.
   654 // hopefully indicating where to submit bugs.
   655 static void print_C_frame(outputStream* st, char* buf, int buflen, address pc) {
   655 void frame::print_C_frame(outputStream* st, char* buf, int buflen, address pc) {
   656   // C/C++ frame
   656   // C/C++ frame
   657   bool in_vm = os::address_is_in_vm(pc);
   657   bool in_vm = os::address_is_in_vm(pc);
   658   st->print(in_vm ? "V" : "C");
   658   st->print(in_vm ? "V" : "C");
   659 
   659 
   660   int offset;
   660   int offset;
  1095   if (oop_adr == NULL) {
  1095   if (oop_adr == NULL) {
  1096     guarantee(oop_adr != NULL, "bad register save location");
  1096     guarantee(oop_adr != NULL, "bad register save location");
  1097     return NULL;
  1097     return NULL;
  1098   }
  1098   }
  1099   oop r = *oop_adr;
  1099   oop r = *oop_adr;
  1100   assert(Universe::heap()->is_in_or_null(r), err_msg("bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", (intptr_t) r, (intptr_t) r));
  1100   assert(Universe::heap()->is_in_or_null(r), err_msg("bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", (void *) r, (void *) r));
  1101   return r;
  1101   return r;
  1102 }
  1102 }
  1103 
  1103 
  1104 
  1104 
  1105 oop* frame::oopmapreg_to_location(VMReg reg, const RegisterMap* reg_map) const {
  1105 oop* frame::oopmapreg_to_location(VMReg reg, const RegisterMap* reg_map) const {
  1226 }
  1226 }
  1227 
  1227 
  1228 
  1228 
  1229 void frame::ZapDeadClosure::do_oop(oop* p) {
  1229 void frame::ZapDeadClosure::do_oop(oop* p) {
  1230   if (TraceZapDeadLocals) tty->print_cr("zapping @ " INTPTR_FORMAT " containing " INTPTR_FORMAT, p, (address)*p);
  1230   if (TraceZapDeadLocals) tty->print_cr("zapping @ " INTPTR_FORMAT " containing " INTPTR_FORMAT, p, (address)*p);
  1231   // Need cast because on _LP64 the conversion to oop is ambiguous.  Constant
  1231   *p = cast_to_oop<intptr_t>(0xbabebabe);
  1232   // can be either long or int.
       
  1233   *p = (oop)(int)0xbabebabe;
       
  1234 }
  1232 }
  1235 frame::ZapDeadClosure frame::_zap_dead;
  1233 frame::ZapDeadClosure frame::_zap_dead;
  1236 
  1234 
  1237 void frame::zap_dead_locals(JavaThread* thread, const RegisterMap* map) {
  1235 void frame::zap_dead_locals(JavaThread* thread, const RegisterMap* map) {
  1238   assert(thread == Thread::current(), "need to synchronize to do this to another thread");
  1236   assert(thread == Thread::current(), "need to synchronize to do this to another thread");