1 /* 2 * Copyright (c) 1997, 2016, 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/shared/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.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/macros.hpp" 55 #include "utilities/vmError.hpp" 56 57 #include <stdio.h> 58 59 #ifndef ASSERT 60 # ifdef _DEBUG 61 // NOTE: don't turn the lines below into a comment -- if you're getting 62 // a compile error here, change the settings to define ASSERT 63 ASSERT should be defined when _DEBUG is defined. It is not intended to be used for debugging 64 functions that do not slow down the system too much and thus can be left in optimized code. 65 On the other hand, the code should not be included in a production version. 66 # endif // _DEBUG 67 #endif // ASSERT 68 69 70 #ifdef _DEBUG 71 # ifndef ASSERT 72 configuration error: ASSERT must be defined in debug version 73 # endif // ASSERT 74 #endif // _DEBUG 75 76 77 #ifdef PRODUCT 78 # if -defined _DEBUG || -defined ASSERT 79 configuration error: ASSERT et al. must not be defined in PRODUCT version 80 # endif 81 #endif // PRODUCT 82 83 FormatBufferResource::FormatBufferResource(const char * format, ...) 84 : FormatBufferBase((char*)resource_allocate_bytes(FormatBufferBase::BufferSize)) { 85 va_list argp; 86 va_start(argp, format); 87 jio_vsnprintf(_buf, FormatBufferBase::BufferSize, 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() && !SuppressFatalErrorMessage) { 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 void report_vm_error(const char* file, int line, const char* error_msg) 211 { 212 report_vm_error(file, line, error_msg, "%s", ""); 213 } 214 215 void report_vm_error(const char* file, int line, const char* error_msg, const char* detail_fmt, ...) 216 { 217 if (Debugging || error_is_suppressed(file, line)) return; 218 va_list detail_args; 219 va_start(detail_args, detail_fmt); 220 VMError::report_and_die(Thread::current_or_null(), file, line, error_msg, detail_fmt, detail_args); 221 va_end(detail_args); 222 } 223 224 void report_vm_status_error(const char* file, int line, const char* error_msg, 225 int status, const char* detail) { 226 report_vm_error(file, line, error_msg, "error %s(%d), %s", os::errno_name(status), status, detail); 227 } 228 229 void report_fatal(const char* file, int line, const char* detail_fmt, ...) 230 { 231 if (Debugging || error_is_suppressed(file, line)) return; 232 va_list detail_args; 233 va_start(detail_args, detail_fmt); 234 VMError::report_and_die(Thread::current_or_null(), file, line, "fatal error", detail_fmt, detail_args); 235 va_end(detail_args); 236 } 237 238 void report_vm_out_of_memory(const char* file, int line, size_t size, 239 VMErrorType vm_err_type, const char* detail_fmt, ...) { 240 if (Debugging) return; 241 va_list detail_args; 242 va_start(detail_args, detail_fmt); 243 VMError::report_and_die(Thread::current_or_null(), file, line, size, vm_err_type, detail_fmt, detail_args); 244 va_end(detail_args); 245 246 // The UseOSErrorReporting option in report_and_die() may allow a return 247 // to here. If so then we'll have to figure out how to handle it. 248 guarantee(false, "report_and_die() should not return here"); 249 } 250 251 void report_should_not_call(const char* file, int line) { 252 report_vm_error(file, line, "ShouldNotCall()"); 253 } 254 255 void report_should_not_reach_here(const char* file, int line) { 256 report_vm_error(file, line, "ShouldNotReachHere()"); 257 } 258 259 void report_unimplemented(const char* file, int line) { 260 report_vm_error(file, line, "Unimplemented()"); 261 } 262 263 #ifdef ASSERT 264 bool is_executing_unit_tests() { 265 return ExecutingUnitTests; 266 } 267 268 void report_assert_msg(const char* msg, ...) { 269 va_list ap; 270 va_start(ap, msg); 271 272 fprintf(stderr, "assert failed: %s\n", err_msg(FormatBufferDummy(), msg, ap).buffer()); 273 274 va_end(ap); 275 } 276 #endif // ASSERT 277 278 void report_untested(const char* file, int line, const char* message) { 279 #ifndef PRODUCT 280 warning("Untested: %s in %s: %d\n", message, file, line); 281 #endif // !PRODUCT 282 } 283 284 void report_out_of_shared_space(SharedSpaceType shared_space) { 285 static const char* name[] = { 286 "shared read only space", 287 "shared read write space", 288 "shared miscellaneous data space", 289 "shared miscellaneous code space" 290 }; 291 static const char* flag[] = { 292 "SharedReadOnlySize", 293 "SharedReadWriteSize", 294 "SharedMiscDataSize", 295 "SharedMiscCodeSize" 296 }; 297 298 warning("\nThe %s is not large enough\n" 299 "to preload requested classes. Use -XX:%s=<size>\n" 300 "to increase the initial size of %s.\n", 301 name[shared_space], flag[shared_space], name[shared_space]); 302 exit(2); 303 } 304 305 306 void report_insufficient_metaspace(size_t required_size) { 307 warning("\nThe MaxMetaspaceSize of " SIZE_FORMAT " bytes is not large enough.\n" 308 "Either don't specify the -XX:MaxMetaspaceSize=<size>\n" 309 "or increase the size to at least " SIZE_FORMAT ".\n", 310 MaxMetaspaceSize, required_size); 311 exit(2); 312 } 313 314 void report_java_out_of_memory(const char* message) { 315 static jint out_of_memory_reported = 0; 316 317 // A number of threads may attempt to report OutOfMemoryError at around the 318 // same time. To avoid dumping the heap or executing the data collection 319 // commands multiple times we just do it once when the first threads reports 320 // the error. 321 if (Atomic::cmpxchg(1, &out_of_memory_reported, 0) == 0) { 322 // create heap dump before OnOutOfMemoryError commands are executed 323 if (HeapDumpOnOutOfMemoryError) { 324 tty->print_cr("java.lang.OutOfMemoryError: %s", message); 325 HeapDumper::dump_heap_from_oome(); 326 } 327 328 if (OnOutOfMemoryError && OnOutOfMemoryError[0]) { 329 VMError::report_java_out_of_memory(message); 330 } 331 332 if (CrashOnOutOfMemoryError) { 333 tty->print_cr("Aborting due to java.lang.OutOfMemoryError: %s", message); 334 fatal("OutOfMemory encountered: %s", message); 335 } 336 337 if (ExitOnOutOfMemoryError) { 338 tty->print_cr("Terminating due to java.lang.OutOfMemoryError: %s", message); 339 os::exit(3); 340 } 341 } 342 } 343 344 static bool error_reported = false; 345 346 // call this when the VM is dying--it might loosen some asserts 347 void set_error_reported() { 348 error_reported = true; 349 } 350 351 bool is_error_reported() { 352 return error_reported; 353 } 354 355 #ifndef PRODUCT 356 #include <signal.h> 357 358 typedef void (*voidfun_t)(); 359 // Crash with an authentic sigfpe 360 static void crash_with_sigfpe() { 361 // generate a native synchronous SIGFPE where possible; 362 // if that did not cause a signal (e.g. on ppc), just 363 // raise the signal. 364 volatile int x = 0; 365 volatile int y = 1/x; 366 #ifndef _WIN32 367 // OSX implements raise(sig) incorrectly so we need to 368 // explicitly target the current thread 369 pthread_kill(pthread_self(), SIGFPE); 370 #endif 371 } // end: crash_with_sigfpe 372 373 // crash with sigsegv at non-null address. 374 static void crash_with_segfault() { 375 376 char* const crash_addr = (char*) get_segfault_address(); 377 *crash_addr = 'X'; 378 379 } // end: crash_with_segfault 380 381 // returns an address which is guaranteed to generate a SIGSEGV on read, 382 // for test purposes, which is not NULL and contains bits in every word 383 void* get_segfault_address() { 384 return (void*) 385 #ifdef _LP64 386 0xABC0000000000ABCULL; 387 #else 388 0x00000ABC; 389 #endif 390 } 391 392 void test_error_handler() { 393 controlled_crash(ErrorHandlerTest); 394 } 395 396 void controlled_crash(int how) { 397 if (how == 0) return; 398 399 // If asserts are disabled, use the corresponding guarantee instead. 400 NOT_DEBUG(if (how <= 2) how += 2); 401 402 const char* const str = "hello"; 403 const size_t num = (size_t)os::vm_page_size(); 404 405 const char* const eol = os::line_separator(); 406 const char* const msg = "this message should be truncated during formatting"; 407 char * const dataPtr = NULL; // bad data pointer 408 const void (*funcPtr)(void) = (const void(*)()) 0xF; // bad function pointer 409 410 // Keep this in sync with test/runtime/ErrorHandling/ErrorHandler.java 411 switch (how) { 412 case 1: vmassert(str == NULL, "expected null"); 413 case 2: vmassert(num == 1023 && *str == 'X', 414 "num=" SIZE_FORMAT " str=\"%s\"", num, str); 415 case 3: guarantee(str == NULL, "expected null"); 416 case 4: guarantee(num == 1023 && *str == 'X', 417 "num=" SIZE_FORMAT " str=\"%s\"", num, str); 418 case 5: fatal("expected null"); 419 case 6: fatal("num=" SIZE_FORMAT " str=\"%s\"", num, str); 420 case 7: fatal("%s%s# %s%s# %s%s# %s%s# %s%s# " 421 "%s%s# %s%s# %s%s# %s%s# %s%s# " 422 "%s%s# %s%s# %s%s# %s%s# %s", 423 msg, eol, msg, eol, msg, eol, msg, eol, msg, eol, 424 msg, eol, msg, eol, msg, eol, msg, eol, msg, eol, 425 msg, eol, msg, eol, msg, eol, msg, eol, msg); 426 case 8: vm_exit_out_of_memory(num, OOM_MALLOC_ERROR, "ChunkPool::allocate"); 427 case 9: ShouldNotCallThis(); 428 case 10: ShouldNotReachHere(); 429 case 11: Unimplemented(); 430 // There's no guarantee the bad data pointer will crash us 431 // so "break" out to the ShouldNotReachHere(). 432 case 12: *dataPtr = '\0'; break; 433 // There's no guarantee the bad function pointer will crash us 434 // so "break" out to the ShouldNotReachHere(). 435 case 13: (*funcPtr)(); break; 436 case 14: crash_with_segfault(); break; 437 case 15: crash_with_sigfpe(); break; 438 439 default: tty->print_cr("ERROR: %d: unexpected test_num value.", how); 440 } 441 ShouldNotReachHere(); 442 } 443 #endif // !PRODUCT 444 445 // ------ helper functions for debugging go here ------------ 446 447 // All debug entries should be wrapped with a stack allocated 448 // Command object. It makes sure a resource mark is set and 449 // flushes the logfile to prevent file sharing problems. 450 451 class Command : public StackObj { 452 private: 453 ResourceMark rm; 454 ResetNoHandleMark rnhm; 455 HandleMark hm; 456 bool debug_save; 457 public: 458 static int level; 459 Command(const char* str) { 460 debug_save = Debugging; 461 Debugging = true; 462 if (level++ > 0) return; 463 tty->cr(); 464 tty->print_cr("\"Executing %s\"", str); 465 } 466 467 ~Command() { 468 tty->flush(); 469 Debugging = debug_save; 470 level--; 471 } 472 }; 473 474 int Command::level = 0; 475 476 #ifndef PRODUCT 477 478 extern "C" void blob(CodeBlob* cb) { 479 Command c("blob"); 480 cb->print(); 481 } 482 483 484 extern "C" void dump_vtable(address p) { 485 Command c("dump_vtable"); 486 Klass* k = (Klass*)p; 487 k->vtable()->print(); 488 } 489 490 491 extern "C" void nm(intptr_t p) { 492 // Actually we look through all CodeBlobs (the nm name has been kept for backwards compatability) 493 Command c("nm"); 494 CodeBlob* cb = CodeCache::find_blob((address)p); 495 if (cb == NULL) { 496 tty->print_cr("NULL"); 497 } else { 498 cb->print(); 499 } 500 } 501 502 503 extern "C" void disnm(intptr_t p) { 504 Command c("disnm"); 505 CodeBlob* cb = CodeCache::find_blob((address) p); 506 if (cb != NULL) { 507 nmethod* nm = cb->as_nmethod_or_null(); 508 if (nm != NULL) { 509 nm->print(); 510 } else { 511 cb->print(); 512 } 513 Disassembler::decode(cb); 514 } 515 } 516 517 518 extern "C" void printnm(intptr_t p) { 519 char buffer[256]; 520 sprintf(buffer, "printnm: " INTPTR_FORMAT, p); 521 Command c(buffer); 522 CodeBlob* cb = CodeCache::find_blob((address) p); 523 if (cb->is_nmethod()) { 524 nmethod* nm = (nmethod*)cb; 525 nm->print_nmethod(true); 526 } 527 } 528 529 530 extern "C" void universe() { 531 Command c("universe"); 532 Universe::print_on(tty); 533 } 534 535 536 extern "C" void verify() { 537 // try to run a verify on the entire system 538 // note: this may not be safe if we're not at a safepoint; for debugging, 539 // this manipulates the safepoint settings to avoid assertion failures 540 Command c("universe verify"); 541 bool safe = SafepointSynchronize::is_at_safepoint(); 542 if (!safe) { 543 tty->print_cr("warning: not at safepoint -- verify may fail"); 544 SafepointSynchronize::set_is_at_safepoint(); 545 } 546 // Ensure Eden top is correct before verification 547 Universe::heap()->prepare_for_verify(); 548 Universe::verify(); 549 if (!safe) SafepointSynchronize::set_is_not_at_safepoint(); 550 } 551 552 553 extern "C" void pp(void* p) { 554 Command c("pp"); 555 FlagSetting fl(PrintVMMessages, true); 556 FlagSetting f2(DisplayVMOutput, true); 557 if (Universe::heap()->is_in(p)) { 558 oop obj = oop(p); 559 obj->print(); 560 } else { 561 tty->print(PTR_FORMAT, p2i(p)); 562 } 563 } 564 565 566 // pv: print vm-printable object 567 extern "C" void pa(intptr_t p) { ((AllocatedObj*) p)->print(); } 568 extern "C" void findpc(intptr_t x); 569 570 #endif // !PRODUCT 571 572 extern "C" void ps() { // print stack 573 if (Thread::current_or_null() == NULL) return; 574 Command c("ps"); 575 576 577 // Prints the stack of the current Java thread 578 JavaThread* p = JavaThread::active(); 579 tty->print(" for thread: "); 580 p->print(); 581 tty->cr(); 582 583 if (p->has_last_Java_frame()) { 584 // If the last_Java_fp is set we are in C land and 585 // can call the standard stack_trace function. 586 #ifdef PRODUCT 587 p->print_stack(); 588 } else { 589 tty->print_cr("Cannot find the last Java frame, printing stack disabled."); 590 #else // !PRODUCT 591 p->trace_stack(); 592 } else { 593 frame f = os::current_frame(); 594 RegisterMap reg_map(p); 595 f = f.sender(®_map); 596 tty->print("(guessing starting frame id=" PTR_FORMAT " based on current fp)\n", p2i(f.id())); 597 p->trace_stack_from(vframe::new_vframe(&f, ®_map, p)); 598 pd_ps(f); 599 #endif // PRODUCT 600 } 601 602 } 603 604 extern "C" void pfl() { 605 // print frame layout 606 Command c("pfl"); 607 JavaThread* p = JavaThread::active(); 608 tty->print(" for thread: "); 609 p->print(); 610 tty->cr(); 611 if (p->has_last_Java_frame()) { 612 p->print_frame_layout(); 613 } 614 } 615 616 #ifndef PRODUCT 617 618 extern "C" void psf() { // print stack frames 619 { 620 Command c("psf"); 621 JavaThread* p = JavaThread::active(); 622 tty->print(" for thread: "); 623 p->print(); 624 tty->cr(); 625 if (p->has_last_Java_frame()) { 626 p->trace_frames(); 627 } 628 } 629 } 630 631 632 extern "C" void threads() { 633 Command c("threads"); 634 Threads::print(false, true); 635 } 636 637 638 extern "C" void psd() { 639 Command c("psd"); 640 SystemDictionary::print(); 641 } 642 643 644 extern "C" void safepoints() { 645 Command c("safepoints"); 646 SafepointSynchronize::print_state(); 647 } 648 649 #endif // !PRODUCT 650 651 extern "C" void pss() { // print all stacks 652 if (Thread::current_or_null() == NULL) return; 653 Command c("pss"); 654 Threads::print(true, PRODUCT_ONLY(false) NOT_PRODUCT(true)); 655 } 656 657 #ifndef PRODUCT 658 659 extern "C" void debug() { // to set things up for compiler debugging 660 Command c("debug"); 661 WizardMode = true; 662 PrintVMMessages = PrintCompilation = true; 663 PrintInlining = PrintAssembly = true; 664 tty->flush(); 665 } 666 667 668 extern "C" void ndebug() { // undo debug() 669 Command c("ndebug"); 670 PrintCompilation = false; 671 PrintInlining = PrintAssembly = false; 672 tty->flush(); 673 } 674 675 676 extern "C" void flush() { 677 Command c("flush"); 678 tty->flush(); 679 } 680 681 extern "C" void events() { 682 Command c("events"); 683 Events::print(); 684 } 685 686 extern "C" Method* findm(intptr_t pc) { 687 Command c("findm"); 688 nmethod* nm = CodeCache::find_nmethod((address)pc); 689 return (nm == NULL) ? (Method*)NULL : nm->method(); 690 } 691 692 693 extern "C" nmethod* findnm(intptr_t addr) { 694 Command c("findnm"); 695 return CodeCache::find_nmethod((address)addr); 696 } 697 698 // Another interface that isn't ambiguous in dbx. 699 // Can we someday rename the other find to hsfind? 700 extern "C" void hsfind(intptr_t x) { 701 Command c("hsfind"); 702 os::print_location(tty, x, false); 703 } 704 705 706 extern "C" void find(intptr_t x) { 707 Command c("find"); 708 os::print_location(tty, x, false); 709 } 710 711 712 extern "C" void findpc(intptr_t x) { 713 Command c("findpc"); 714 os::print_location(tty, x, true); 715 } 716 717 718 // Need method pointer to find bcp, when not in permgen. 719 extern "C" void findbcp(intptr_t method, intptr_t bcp) { 720 Command c("findbcp"); 721 Method* mh = (Method*)method; 722 if (!mh->is_native()) { 723 tty->print_cr("bci_from(%p) = %d; print_codes():", 724 mh, mh->bci_from(address(bcp))); 725 mh->print_codes_on(tty); 726 } 727 } 728 729 // int versions of all methods to avoid having to type type casts in the debugger 730 731 void pp(intptr_t p) { pp((void*)p); } 732 void pp(oop p) { pp((void*)p); } 733 734 void help() { 735 Command c("help"); 736 tty->print_cr("basic"); 737 tty->print_cr(" pp(void* p) - try to make sense of p"); 738 tty->print_cr(" pv(intptr_t p)- ((PrintableResourceObj*) p)->print()"); 739 tty->print_cr(" ps() - print current thread stack"); 740 tty->print_cr(" pss() - print all thread stacks"); 741 tty->print_cr(" pm(int pc) - print Method* given compiled PC"); 742 tty->print_cr(" findm(intptr_t pc) - finds Method*"); 743 tty->print_cr(" find(intptr_t x) - finds & prints nmethod/stub/bytecode/oop based on pointer into it"); 744 tty->print_cr(" pns(void* sp, void* fp, void* pc) - print native (i.e. mixed) stack trace. E.g."); 745 tty->print_cr(" pns($sp, $rbp, $pc) on Linux/amd64 and Solaris/amd64 or"); 746 tty->print_cr(" pns($sp, $ebp, $pc) on Linux/x86 or"); 747 tty->print_cr(" pns($sp, 0, $pc) on Linux/ppc64 or"); 748 tty->print_cr(" pns($sp + 0x7ff, 0, $pc) on Solaris/SPARC"); 749 tty->print_cr(" - in gdb do 'set overload-resolution off' before calling pns()"); 750 tty->print_cr(" - in dbx do 'frame 1' before calling pns()"); 751 752 tty->print_cr("misc."); 753 tty->print_cr(" flush() - flushes the log file"); 754 tty->print_cr(" events() - dump events from ring buffers"); 755 756 757 tty->print_cr("compiler debugging"); 758 tty->print_cr(" debug() - to set things up for compiler debugging"); 759 tty->print_cr(" ndebug() - undo debug"); 760 } 761 762 #endif // !PRODUCT 763 764 void print_native_stack(outputStream* st, frame fr, Thread* t, char* buf, int buf_size) { 765 766 // see if it's a valid frame 767 if (fr.pc()) { 768 st->print_cr("Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)"); 769 770 int count = 0; 771 while (count++ < StackPrintLimit) { 772 fr.print_on_error(st, buf, buf_size); 773 st->cr(); 774 // Compiled code may use EBP register on x86 so it looks like 775 // non-walkable C frame. Use frame.sender() for java frames. 776 if (t && t->is_Java_thread()) { 777 // Catch very first native frame by using stack address. 778 // For JavaThread stack_base and stack_size should be set. 779 if (!t->on_local_stack((address)(fr.real_fp() + 1))) { 780 break; 781 } 782 if (fr.is_java_frame() || fr.is_native_frame() || fr.is_runtime_frame()) { 783 RegisterMap map((JavaThread*)t, false); // No update 784 fr = fr.sender(&map); 785 } else { 786 fr = os::get_sender_for_C_frame(&fr); 787 } 788 } else { 789 // is_first_C_frame() does only simple checks for frame pointer, 790 // it will pass if java compiled code has a pointer in EBP. 791 if (os::is_first_C_frame(&fr)) break; 792 fr = os::get_sender_for_C_frame(&fr); 793 } 794 } 795 796 if (count > StackPrintLimit) { 797 st->print_cr("...<more frames>..."); 798 } 799 800 st->cr(); 801 } 802 } 803 804 #ifndef PRODUCT 805 806 extern "C" void pns(void* sp, void* fp, void* pc) { // print native stack 807 Command c("pns"); 808 static char buf[O_BUFLEN]; 809 Thread* t = Thread::current_or_null(); 810 // Call generic frame constructor (certain arguments may be ignored) 811 frame fr(sp, fp, pc); 812 print_native_stack(tty, fr, t, buf, sizeof(buf)); 813 } 814 815 #endif // !PRODUCT 816 817 ////////////////////////////////////////////////////////////////////////////// 818 // Test multiple STATIC_ASSERT forms in various scopes. 819 820 #ifndef PRODUCT 821 822 // namespace scope 823 STATIC_ASSERT(true); 824 STATIC_ASSERT(true); 825 STATIC_ASSERT(1 == 1); 826 STATIC_ASSERT(0 == 0); 827 828 void test_multiple_static_assert_forms_in_function_scope() { 829 STATIC_ASSERT(true); 830 STATIC_ASSERT(true); 831 STATIC_ASSERT(0 == 0); 832 STATIC_ASSERT(1 == 1); 833 } 834 835 // class scope 836 struct TestMultipleStaticAssertFormsInClassScope { 837 STATIC_ASSERT(true); 838 STATIC_ASSERT(true); 839 STATIC_ASSERT(0 == 0); 840 STATIC_ASSERT(1 == 1); 841 }; 842 843 #endif // !PRODUCT