1690 }
1691 }
1692 }
1693 #ifdef ASSERT
1694 assert(st_method() == method && st.bci() == bci,
1695 "Wrong stack trace");
1696 st.next();
1697 // vframeStream::method isn't GC-safe so store off a copy
1698 // of the Method* in case we GC.
1699 if (!st.at_end()) {
1700 st_method = st.method();
1701 }
1702 #endif
1703
1704 // the format of the stacktrace will be:
1705 // - 1 or more fillInStackTrace frames for the exception class (skipped)
1706 // - 0 or more <init> methods for the exception class (skipped)
1707 // - rest of the stack
1708
1709 if (!skip_fillInStackTrace_check) {
1710 if ((method->name() == vmSymbols::fillInStackTrace_name() ||
1711 method->name() == vmSymbols::fillInStackTrace0_name()) &&
1712 throwable->is_a(method->method_holder())) {
1713 continue;
1714 }
1715 else {
1716 skip_fillInStackTrace_check = true; // gone past them all
1717 }
1718 }
1719 if (!skip_throwableInit_check) {
1720 assert(skip_fillInStackTrace_check, "logic error in backtrace filtering");
1721
1722 // skip <init> methods of the exception class and superclasses
1723 // This is simlar to classic VM.
1724 if (method->name() == vmSymbols::object_initializer_name() &&
1725 throwable->is_a(method->method_holder())) {
1726 continue;
1727 } else {
1728 // there are none or we've seen them all - either way stop checking
1729 skip_throwableInit_check = true;
1730 }
1731 }
|
1690 }
1691 }
1692 }
1693 #ifdef ASSERT
1694 assert(st_method() == method && st.bci() == bci,
1695 "Wrong stack trace");
1696 st.next();
1697 // vframeStream::method isn't GC-safe so store off a copy
1698 // of the Method* in case we GC.
1699 if (!st.at_end()) {
1700 st_method = st.method();
1701 }
1702 #endif
1703
1704 // the format of the stacktrace will be:
1705 // - 1 or more fillInStackTrace frames for the exception class (skipped)
1706 // - 0 or more <init> methods for the exception class (skipped)
1707 // - rest of the stack
1708
1709 if (!skip_fillInStackTrace_check) {
1710 if (method->name() == vmSymbols::fillInStackTrace_name() &&
1711 throwable->is_a(method->method_holder())) {
1712 continue;
1713 }
1714 else {
1715 skip_fillInStackTrace_check = true; // gone past them all
1716 }
1717 }
1718 if (!skip_throwableInit_check) {
1719 assert(skip_fillInStackTrace_check, "logic error in backtrace filtering");
1720
1721 // skip <init> methods of the exception class and superclasses
1722 // This is simlar to classic VM.
1723 if (method->name() == vmSymbols::object_initializer_name() &&
1724 throwable->is_a(method->method_holder())) {
1725 continue;
1726 } else {
1727 // there are none or we've seen them all - either way stop checking
1728 skip_throwableInit_check = true;
1729 }
1730 }
|