1 /*
   2  * Copyright (c) 1997, 2015, 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/systemDictionary.hpp"
  27 #include "code/codeCache.hpp"
  28 #include "code/icBuffer.hpp"
  29 #include "code/nmethod.hpp"
  30 #include "code/vtableStubs.hpp"
  31 #include "compiler/compileBroker.hpp"
  32 #include "compiler/disassembler.hpp"
  33 #include "gc_interface/collectedHeap.hpp"
  34 #include "interpreter/bytecodeHistogram.hpp"
  35 #include "interpreter/interpreter.hpp"
  36 #include "memory/resourceArea.hpp"
  37 #include "memory/universe.hpp"
  38 #include "oops/oop.inline.hpp"
  39 #include "prims/privilegedStack.hpp"
  40 #include "runtime/arguments.hpp"
  41 #include "runtime/atomic.inline.hpp"
  42 #include "runtime/frame.hpp"
  43 #include "runtime/java.hpp"
  44 #include "runtime/os.hpp"
  45 #include "runtime/sharedRuntime.hpp"
  46 #include "runtime/stubCodeGenerator.hpp"
  47 #include "runtime/stubRoutines.hpp"
  48 #include "runtime/thread.inline.hpp"
  49 #include "runtime/vframe.hpp"
  50 #include "runtime/vm_version.hpp"
  51 #include "services/heapDumper.hpp"
  52 #include "utilities/defaultStream.hpp"
  53 #include "utilities/events.hpp"
  54 #include "utilities/top.hpp"
  55 #include "utilities/vmError.hpp"
  56 
  57 #ifndef ASSERT
  58 #  ifdef _DEBUG
  59    // NOTE: don't turn the lines below into a comment -- if you're getting
  60    // a compile error here, change the settings to define ASSERT
  61    ASSERT should be defined when _DEBUG is defined.  It is not intended to be used for debugging
  62    functions that do not slow down the system too much and thus can be left in optimized code.
  63    On the other hand, the code should not be included in a production version.
  64 #  endif // _DEBUG
  65 #endif // ASSERT
  66 
  67 
  68 #ifdef _DEBUG
  69 #  ifndef ASSERT
  70      configuration error: ASSERT must be defined in debug version
  71 #  endif // ASSERT
  72 #endif // _DEBUG
  73 
  74 
  75 #ifdef PRODUCT
  76 #  if -defined _DEBUG || -defined ASSERT
  77      configuration error: ASSERT et al. must not be defined in PRODUCT version
  78 #  endif
  79 #endif // PRODUCT
  80 
  81 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
  82 
  83 FormatBufferResource::FormatBufferResource(const char * format, ...)
  84   : FormatBufferBase((char*)resource_allocate_bytes(RES_BUFSZ)) {
  85   va_list argp;
  86   va_start(argp, format);
  87   jio_vsnprintf(_buf, RES_BUFSZ, format, argp);
  88   va_end(argp);
  89 }
  90 
  91 ATTRIBUTE_PRINTF(1, 2)
  92 void warning(const char* format, ...) {
  93   if (PrintWarnings) {
  94     FILE* const err = defaultStream::error_stream();
  95     jio_fprintf(err, "%s warning: ", VM_Version::vm_name());
  96     va_list ap;
  97     va_start(ap, format);
  98     vfprintf(err, format, ap);
  99     va_end(ap);
 100     fputc('\n', err);
 101   }
 102   if (BreakAtWarning) BREAKPOINT;
 103 }
 104 
 105 #ifndef PRODUCT
 106 
 107 #define is_token_break(ch) (isspace(ch) || (ch) == ',')
 108 
 109 static const char* last_file_name = NULL;
 110 static int         last_line_no   = -1;
 111 
 112 // assert/guarantee/... may happen very early during VM initialization.
 113 // Don't rely on anything that is initialized by Threads::create_vm(). For
 114 // example, don't use tty.
 115 bool error_is_suppressed(const char* file_name, int line_no) {
 116   // The following 1-element cache requires that passed-in
 117   // file names are always only constant literals.
 118   if (file_name == last_file_name && line_no == last_line_no)  return true;
 119 
 120   int file_name_len = (int)strlen(file_name);
 121   char separator = os::file_separator()[0];
 122   const char* base_name = strrchr(file_name, separator);
 123   if (base_name == NULL)
 124     base_name = file_name;
 125 
 126   // scan the SuppressErrorAt option
 127   const char* cp = SuppressErrorAt;
 128   for (;;) {
 129     const char* sfile;
 130     int sfile_len;
 131     int sline;
 132     bool noisy;
 133     while ((*cp) != '\0' && is_token_break(*cp))  cp++;
 134     if ((*cp) == '\0')  break;
 135     sfile = cp;
 136     while ((*cp) != '\0' && !is_token_break(*cp) && (*cp) != ':')  cp++;
 137     sfile_len = cp - sfile;
 138     if ((*cp) == ':')  cp++;
 139     sline = 0;
 140     while ((*cp) != '\0' && isdigit(*cp)) {
 141       sline *= 10;
 142       sline += (*cp) - '0';
 143       cp++;
 144     }
 145     // "file:line!" means the assert suppression is not silent
 146     noisy = ((*cp) == '!');
 147     while ((*cp) != '\0' && !is_token_break(*cp))  cp++;
 148     // match the line
 149     if (sline != 0) {
 150       if (sline != line_no)  continue;
 151     }
 152     // match the file
 153     if (sfile_len > 0) {
 154       const char* look = file_name;
 155       const char* look_max = file_name + file_name_len - sfile_len;
 156       const char* foundp;
 157       bool match = false;
 158       while (!match
 159              && (foundp = strchr(look, sfile[0])) != NULL
 160              && foundp <= look_max) {
 161         match = true;
 162         for (int i = 1; i < sfile_len; i++) {
 163           if (sfile[i] != foundp[i]) {
 164             match = false;
 165             break;
 166           }
 167         }
 168         look = foundp + 1;
 169       }
 170       if (!match)  continue;
 171     }
 172     // got a match!
 173     if (noisy) {
 174       fdStream out(defaultStream::output_fd());
 175       out.print_raw("[error suppressed at ");
 176       out.print_raw(base_name);
 177       char buf[16];
 178       jio_snprintf(buf, sizeof(buf), ":%d]", line_no);
 179       out.print_raw_cr(buf);
 180     } else {
 181       // update 1-element cache for fast silent matches
 182       last_file_name = file_name;
 183       last_line_no   = line_no;
 184     }
 185     return true;
 186   }
 187 
 188   if (!is_error_reported()) {
 189     // print a friendly hint:
 190     fdStream out(defaultStream::output_fd());
 191     out.print_raw_cr("# To suppress the following error report, specify this argument");
 192     out.print_raw   ("# after -XX: or in .hotspotrc:  SuppressErrorAt=");
 193     out.print_raw   (base_name);
 194     char buf[16];
 195     jio_snprintf(buf, sizeof(buf), ":%d", line_no);
 196     out.print_raw_cr(buf);
 197   }
 198   return false;
 199 }
 200 
 201 #undef is_token_break
 202 
 203 #else
 204 
 205 // Place-holder for non-existent suppression check:
 206 #define error_is_suppressed(file_name, line_no) (false)
 207 
 208 #endif // !PRODUCT
 209 
 210 // A function that never returns. Tells the compilers
 211 // that the control flow stops at the call of this function.
 212 ATTRIBUTE_NORETURN static void noreturn_function() {
 213   while (true) {
 214     os::naked_short_sleep(10);
 215   }
 216 }
 217 
 218 void report_vm_error(const char* file, int line, const char* error_msg,
 219                      const char* detail_msg)
 220 {
 221   if (!Debugging && !error_is_suppressed(file, line)) {
 222     Thread* const thread = ThreadLocalStorage::get_thread_slow();
 223     VMError err(thread, file, line, error_msg, detail_msg);
 224     err.report_and_die();
 225   }
 226   BREAKPOINT;
 227 }
 228 
 229 void report_vm_out_of_memory(const char* file, int line, size_t size,
 230                              VMErrorType vm_err_type, const char* message) {
 231   if (!Debugging) {
 232     Thread* const thread = ThreadLocalStorage::get_thread_slow();
 233     VMError err(thread, file, line, size, vm_err_type, message);
 234     err.report_and_die();
 235   }
 236   BREAKPOINT;
 237   noreturn_function();
 238 }
 239 
 240 void report_vm_error_noreturn(const char* file, int line, const char* error_msg,
 241                               const char* detail_msg)
 242 {
 243   report_vm_error(file, line, error_msg, detail_msg);
 244   noreturn_function();
 245 }
 246 
 247 void report_fatal(const char* file, int line, const char* message)
 248 {
 249   report_vm_error_noreturn(file, line, "fatal error", message);
 250 }
 251 
 252 
 253 void report_should_not_call(const char* file, int line) {
 254   report_vm_error_noreturn(file, line, "ShouldNotCall()");
 255 }
 256 
 257 void report_should_not_reach_here(const char* file, int line) {
 258   report_vm_error_noreturn(file, line, "ShouldNotReachHere()");
 259 }
 260 
 261 void report_unimplemented(const char* file, int line) {
 262   report_vm_error(file, line, "Unimplemented()");
 263 }
 264 
 265 void report_untested(const char* file, int line, const char* message) {
 266 #ifndef PRODUCT
 267   warning("Untested: %s in %s: %d\n", message, file, line);
 268 #endif // !PRODUCT
 269 }
 270 
 271 void report_out_of_shared_space(SharedSpaceType shared_space) {
 272   static const char* name[] = {
 273     "shared read only space",
 274     "shared read write space",
 275     "shared miscellaneous data space",
 276     "shared miscellaneous code space"
 277   };
 278   static const char* flag[] = {
 279     "SharedReadOnlySize",
 280     "SharedReadWriteSize",
 281     "SharedMiscDataSize",
 282     "SharedMiscCodeSize"
 283   };
 284 
 285    warning("\nThe %s is not large enough\n"
 286            "to preload requested classes. Use -XX:%s=<size>\n"
 287            "to increase the initial size of %s.\n",
 288            name[shared_space], flag[shared_space], name[shared_space]);
 289    exit(2);
 290 }
 291 
 292 void report_insufficient_metaspace(size_t required_size) {
 293   warning("\nThe MaxMetaspaceSize of " SIZE_FORMAT " bytes is not large enough.\n"
 294           "Either don't specify the -XX:MaxMetaspaceSize=<size>\n"
 295           "or increase the size to at least " SIZE_FORMAT ".\n",
 296           MaxMetaspaceSize, required_size);
 297   exit(2);
 298 }
 299 
 300 void report_java_out_of_memory(const char* message) {
 301   static jint out_of_memory_reported = 0;
 302 
 303   // A number of threads may attempt to report OutOfMemoryError at around the
 304   // same time. To avoid dumping the heap or executing the data collection
 305   // commands multiple times we just do it once when the first threads reports
 306   // the error.
 307   if (Atomic::cmpxchg(1, &out_of_memory_reported, 0) == 0) {
 308     // create heap dump before OnOutOfMemoryError commands are executed
 309     if (HeapDumpOnOutOfMemoryError) {
 310       tty->print_cr("java.lang.OutOfMemoryError: %s", message);
 311       HeapDumper::dump_heap_from_oome();
 312     }
 313 
 314     if (OnOutOfMemoryError && OnOutOfMemoryError[0]) {
 315       VMError err(message);
 316       err.report_java_out_of_memory();
 317     }
 318   }
 319 }
 320 
 321 static bool error_reported = false;
 322 
 323 // call this when the VM is dying--it might loosen some asserts
 324 void set_error_reported() {
 325   error_reported = true;
 326 }
 327 
 328 bool is_error_reported() {
 329     return error_reported;
 330 }
 331 
 332 #ifndef PRODUCT
 333 #include <signal.h>
 334 
 335 typedef void (*voidfun_t)();
 336 // Crash with an authentic sigfpe
 337 static void crash_with_sigfpe() {
 338   // generate a native synchronous SIGFPE where possible;
 339   // if that did not cause a signal (e.g. on ppc), just
 340   // raise the signal.
 341   volatile int x = 0;
 342   volatile int y = 1/x;
 343 #ifndef _WIN32
 344   raise(SIGFPE);
 345 #endif
 346 } // end: crash_with_sigfpe
 347 
 348 // crash with sigsegv at non-null address.
 349 static void crash_with_segfault() {
 350 
 351   char* const crash_addr = (char*) get_segfault_address();
 352   *crash_addr = 'X';
 353 
 354 } // end: crash_with_segfault
 355 
 356 // returns an address which is guaranteed to generate a SIGSEGV on read,
 357 // for test purposes, which is not NULL and contains bits in every word
 358 void* get_segfault_address() {
 359   return (void*)
 360 #ifdef _LP64
 361     0xABC0000000000ABCULL;
 362 #else
 363     0x00000ABC;
 364 #endif
 365 }
 366 
 367 void test_error_handler() {
 368   controlled_crash(ErrorHandlerTest);
 369 }
 370 
 371 void controlled_crash(int how) {
 372   if (how == 0) return;
 373 
 374   // If asserts are disabled, use the corresponding guarantee instead.
 375   NOT_DEBUG(if (how <= 2) how += 2);
 376 
 377   const char* const str = "hello";
 378   const size_t      num = (size_t)os::vm_page_size();
 379 
 380   const char* const eol = os::line_separator();
 381   const char* const msg = "this message should be truncated during formatting";
 382   char * const dataPtr = NULL;  // bad data pointer
 383   const void (*funcPtr)(void) = (const void(*)()) 0xF;  // bad function pointer
 384 
 385   // Keep this in sync with test/runtime/6888954/vmerrors.sh.
 386   switch (how) {
 387     case  1: vmassert(str == NULL, "expected null");
 388     case  2: vmassert(num == 1023 && *str == 'X',
 389                       err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str));
 390     case  3: guarantee(str == NULL, "expected null");
 391     case  4: guarantee(num == 1023 && *str == 'X',
 392                        err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str));
 393     case  5: fatal("expected null");
 394     case  6: fatal(err_msg("num=" SIZE_FORMAT " str=\"%s\"", num, str));
 395     case  7: fatal(err_msg("%s%s#    %s%s#    %s%s#    %s%s#    %s%s#    "
 396                            "%s%s#    %s%s#    %s%s#    %s%s#    %s%s#    "
 397                            "%s%s#    %s%s#    %s%s#    %s%s#    %s",
 398                            msg, eol, msg, eol, msg, eol, msg, eol, msg, eol,
 399                            msg, eol, msg, eol, msg, eol, msg, eol, msg, eol,
 400                            msg, eol, msg, eol, msg, eol, msg, eol, msg));
 401     case  8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate");
 402     case  9: ShouldNotCallThis();
 403     case 10: ShouldNotReachHere();
 404     case 11: Unimplemented();
 405     // There's no guarantee the bad data pointer will crash us
 406     // so "break" out to the ShouldNotReachHere().
 407     case 12: *dataPtr = '\0'; break;
 408     // There's no guarantee the bad function pointer will crash us
 409     // so "break" out to the ShouldNotReachHere().
 410     case 13: (*funcPtr)(); break;
 411     case 14: crash_with_segfault(); break;
 412     case 15: crash_with_sigfpe(); break;
 413 
 414     default: tty->print_cr("ERROR: %d: unexpected test_num value.", how);
 415   }
 416   ShouldNotReachHere();
 417 }
 418 #endif // !PRODUCT
 419 
 420 // ------ helper functions for debugging go here ------------
 421 
 422 // All debug entries should be wrapped with a stack allocated
 423 // Command object. It makes sure a resource mark is set and
 424 // flushes the logfile to prevent file sharing problems.
 425 
 426 class Command : public StackObj {
 427  private:
 428   ResourceMark rm;
 429   ResetNoHandleMark rnhm;
 430   HandleMark   hm;
 431   bool debug_save;
 432  public:
 433   static int level;
 434   Command(const char* str) {
 435     debug_save = Debugging;
 436     Debugging = true;
 437     if (level++ > 0)  return;
 438     tty->cr();
 439     tty->print_cr("\"Executing %s\"", str);
 440   }
 441 
 442   ~Command() {
 443         tty->flush();
 444         Debugging = debug_save;
 445         level--;
 446   }
 447 };
 448 
 449 int Command::level = 0;
 450 
 451 #ifndef PRODUCT
 452 
 453 extern "C" void blob(CodeBlob* cb) {
 454   Command c("blob");
 455   cb->print();
 456 }
 457 
 458 
 459 extern "C" void dump_vtable(address p) {
 460   Command c("dump_vtable");
 461   Klass* k = (Klass*)p;
 462   InstanceKlass::cast(k)->vtable()->print();
 463 }
 464 
 465 
 466 extern "C" void nm(intptr_t p) {
 467   // Actually we look through all CodeBlobs (the nm name has been kept for backwards compatability)
 468   Command c("nm");
 469   CodeBlob* cb = CodeCache::find_blob((address)p);
 470   if (cb == NULL) {
 471     tty->print_cr("NULL");
 472   } else {
 473     cb->print();
 474   }
 475 }
 476 
 477 
 478 extern "C" void disnm(intptr_t p) {
 479   Command c("disnm");
 480   CodeBlob* cb = CodeCache::find_blob((address) p);
 481   nmethod* nm = cb->as_nmethod_or_null();
 482   if (nm) {
 483     nm->print();
 484     Disassembler::decode(nm);
 485   } else {
 486     cb->print();
 487     Disassembler::decode(cb);
 488   }
 489 }
 490 
 491 
 492 extern "C" void printnm(intptr_t p) {
 493   char buffer[256];
 494   sprintf(buffer, "printnm: " INTPTR_FORMAT, p);
 495   Command c(buffer);
 496   CodeBlob* cb = CodeCache::find_blob((address) p);
 497   if (cb->is_nmethod()) {
 498     nmethod* nm = (nmethod*)cb;
 499     nm->print_nmethod(true);
 500   }
 501 }
 502 
 503 
 504 extern "C" void universe() {
 505   Command c("universe");
 506   Universe::print();
 507 }
 508 
 509 
 510 extern "C" void verify() {
 511   // try to run a verify on the entire system
 512   // note: this may not be safe if we're not at a safepoint; for debugging,
 513   // this manipulates the safepoint settings to avoid assertion failures
 514   Command c("universe verify");
 515   bool safe = SafepointSynchronize::is_at_safepoint();
 516   if (!safe) {
 517     tty->print_cr("warning: not at safepoint -- verify may fail");
 518     SafepointSynchronize::set_is_at_safepoint();
 519   }
 520   // Ensure Eden top is correct before verification
 521   Universe::heap()->prepare_for_verify();
 522   Universe::verify();
 523   if (!safe) SafepointSynchronize::set_is_not_at_safepoint();
 524 }
 525 
 526 
 527 extern "C" void pp(void* p) {
 528   Command c("pp");
 529   FlagSetting fl(PrintVMMessages, true);
 530   FlagSetting f2(DisplayVMOutput, true);
 531   if (Universe::heap()->is_in(p)) {
 532     oop obj = oop(p);
 533     obj->print();
 534   } else {
 535     tty->print(PTR_FORMAT, p);
 536   }
 537 }
 538 
 539 
 540 // pv: print vm-printable object
 541 extern "C" void pa(intptr_t p)   { ((AllocatedObj*) p)->print(); }
 542 extern "C" void findpc(intptr_t x);
 543 
 544 #endif // !PRODUCT
 545 
 546 extern "C" void ps() { // print stack
 547   if (Thread::current() == NULL) return;
 548   Command c("ps");
 549 
 550 
 551   // Prints the stack of the current Java thread
 552   JavaThread* p = JavaThread::active();
 553   tty->print(" for thread: ");
 554   p->print();
 555   tty->cr();
 556 
 557   if (p->has_last_Java_frame()) {
 558     // If the last_Java_fp is set we are in C land and
 559     // can call the standard stack_trace function.
 560 #ifdef PRODUCT
 561     p->print_stack();
 562   } else {
 563     tty->print_cr("Cannot find the last Java frame, printing stack disabled.");
 564 #else // !PRODUCT
 565     p->trace_stack();
 566   } else {
 567     frame f = os::current_frame();
 568     RegisterMap reg_map(p);
 569     f = f.sender(&reg_map);
 570     tty->print("(guessing starting frame id=%#p based on current fp)\n", f.id());
 571     p->trace_stack_from(vframe::new_vframe(&f, &reg_map, p));
 572   pd_ps(f);
 573 #endif // PRODUCT
 574   }
 575 
 576 }
 577 
 578 extern "C" void pfl() {
 579   // print frame layout
 580   Command c("pfl");
 581   JavaThread* p = JavaThread::active();
 582   tty->print(" for thread: ");
 583   p->print();
 584   tty->cr();
 585   if (p->has_last_Java_frame()) {
 586     p->print_frame_layout();
 587   }
 588 }
 589 
 590 #ifndef PRODUCT
 591 
 592 extern "C" void psf() { // print stack frames
 593   {
 594     Command c("psf");
 595     JavaThread* p = JavaThread::active();
 596     tty->print(" for thread: ");
 597     p->print();
 598     tty->cr();
 599     if (p->has_last_Java_frame()) {
 600       p->trace_frames();
 601     }
 602   }
 603 }
 604 
 605 
 606 extern "C" void threads() {
 607   Command c("threads");
 608   Threads::print(false, true);
 609 }
 610 
 611 
 612 extern "C" void psd() {
 613   Command c("psd");
 614   SystemDictionary::print();
 615 }
 616 
 617 
 618 extern "C" void safepoints() {
 619   Command c("safepoints");
 620   SafepointSynchronize::print_state();
 621 }
 622 
 623 #endif // !PRODUCT
 624 
 625 extern "C" void pss() { // print all stacks
 626   if (Thread::current() == NULL) return;
 627   Command c("pss");
 628   Threads::print(true, PRODUCT_ONLY(false) NOT_PRODUCT(true));
 629 }
 630 
 631 #ifndef PRODUCT
 632 
 633 extern "C" void debug() {               // to set things up for compiler debugging
 634   Command c("debug");
 635   WizardMode = true;
 636   PrintVMMessages = PrintCompilation = true;
 637   PrintInlining = PrintAssembly = true;
 638   tty->flush();
 639 }
 640 
 641 
 642 extern "C" void ndebug() {              // undo debug()
 643   Command c("ndebug");
 644   PrintCompilation = false;
 645   PrintInlining = PrintAssembly = false;
 646   tty->flush();
 647 }
 648 
 649 
 650 extern "C" void flush()  {
 651   Command c("flush");
 652   tty->flush();
 653 }
 654 
 655 extern "C" void events() {
 656   Command c("events");
 657   Events::print();
 658 }
 659 
 660 extern "C" Method* findm(intptr_t pc) {
 661   Command c("findm");
 662   nmethod* nm = CodeCache::find_nmethod((address)pc);
 663   return (nm == NULL) ? (Method*)NULL : nm->method();
 664 }
 665 
 666 
 667 extern "C" nmethod* findnm(intptr_t addr) {
 668   Command c("findnm");
 669   return  CodeCache::find_nmethod((address)addr);
 670 }
 671 
 672 // Another interface that isn't ambiguous in dbx.
 673 // Can we someday rename the other find to hsfind?
 674 extern "C" void hsfind(intptr_t x) {
 675   Command c("hsfind");
 676   os::print_location(tty, x, false);
 677 }
 678 
 679 
 680 extern "C" void find(intptr_t x) {
 681   Command c("find");
 682   os::print_location(tty, x, false);
 683 }
 684 
 685 
 686 extern "C" void findpc(intptr_t x) {
 687   Command c("findpc");
 688   os::print_location(tty, x, true);
 689 }
 690 
 691 
 692 // Need method pointer to find bcp, when not in permgen.
 693 extern "C" void findbcp(intptr_t method, intptr_t bcp) {
 694   Command c("findbcp");
 695   Method* mh = (Method*)method;
 696   if (!mh->is_native()) {
 697     tty->print_cr("bci_from(%p) = %d; print_codes():",
 698                         mh, mh->bci_from(address(bcp)));
 699     mh->print_codes_on(tty);
 700   }
 701 }
 702 
 703 // int versions of all methods to avoid having to type type casts in the debugger
 704 
 705 void pp(intptr_t p)          { pp((void*)p); }
 706 void pp(oop p)               { pp((void*)p); }
 707 
 708 void help() {
 709   Command c("help");
 710   tty->print_cr("basic");
 711   tty->print_cr("  pp(void* p)   - try to make sense of p");
 712   tty->print_cr("  pv(intptr_t p)- ((PrintableResourceObj*) p)->print()");
 713   tty->print_cr("  ps()          - print current thread stack");
 714   tty->print_cr("  pss()         - print all thread stacks");
 715   tty->print_cr("  pm(int pc)    - print Method* given compiled PC");
 716   tty->print_cr("  findm(intptr_t pc) - finds Method*");
 717   tty->print_cr("  find(intptr_t x)   - finds & prints nmethod/stub/bytecode/oop based on pointer into it");
 718   tty->print_cr("  pns(void* sp, void* fp, void* pc)  - print native (i.e. mixed) stack trace. E.g.");
 719   tty->print_cr("                   pns($sp, $rbp, $pc) on Linux/amd64 and Solaris/amd64 or");
 720   tty->print_cr("                   pns($sp, $ebp, $pc) on Linux/x86 or");
 721   tty->print_cr("                   pns($sp, 0, $pc)    on Linux/ppc64 or");
 722   tty->print_cr("                   pns($sp + 0x7ff, 0, $pc) on Solaris/SPARC");
 723   tty->print_cr("                 - in gdb do 'set overload-resolution off' before calling pns()");
 724   tty->print_cr("                 - in dbx do 'frame 1' before calling pns()");
 725 
 726   tty->print_cr("misc.");
 727   tty->print_cr("  flush()       - flushes the log file");
 728   tty->print_cr("  events()      - dump events from ring buffers");
 729 
 730 
 731   tty->print_cr("compiler debugging");
 732   tty->print_cr("  debug()       - to set things up for compiler debugging");
 733   tty->print_cr("  ndebug()      - undo debug");
 734 }
 735 
 736 #endif // !PRODUCT
 737 
 738 void print_native_stack(outputStream* st, frame fr, Thread* t, char* buf, int buf_size) {
 739 
 740   // see if it's a valid frame
 741   if (fr.pc()) {
 742     st->print_cr("Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)");
 743 
 744     int count = 0;
 745     while (count++ < StackPrintLimit) {
 746       fr.print_on_error(st, buf, buf_size);
 747       st->cr();
 748       // Compiled code may use EBP register on x86 so it looks like
 749       // non-walkable C frame. Use frame.sender() for java frames.
 750       if (t && t->is_Java_thread()) {
 751         // Catch very first native frame by using stack address.
 752         // For JavaThread stack_base and stack_size should be set.
 753         if (!t->on_local_stack((address)(fr.real_fp() + 1))) {
 754           break;
 755         }
 756         if (fr.is_java_frame() || fr.is_native_frame() || fr.is_runtime_frame()) {
 757           RegisterMap map((JavaThread*)t, false); // No update
 758           fr = fr.sender(&map);
 759         } else {
 760           fr = os::get_sender_for_C_frame(&fr);
 761         }
 762       } else {
 763         // is_first_C_frame() does only simple checks for frame pointer,
 764         // it will pass if java compiled code has a pointer in EBP.
 765         if (os::is_first_C_frame(&fr)) break;
 766         fr = os::get_sender_for_C_frame(&fr);
 767       }
 768     }
 769 
 770     if (count > StackPrintLimit) {
 771       st->print_cr("...<more frames>...");
 772     }
 773 
 774     st->cr();
 775   }
 776 }
 777 
 778 #ifndef PRODUCT
 779 
 780 extern "C" void pns(void* sp, void* fp, void* pc) { // print native stack
 781   Command c("pns");
 782   static char buf[O_BUFLEN];
 783   Thread* t = ThreadLocalStorage::get_thread_slow();
 784   // Call generic frame constructor (certain arguments may be ignored)
 785   frame fr(sp, fp, pc);
 786   print_native_stack(tty, fr, t, buf, sizeof(buf));
 787 }
 788 
 789 #endif // !PRODUCT