--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Mon Apr 11 23:02:37 2011 -0400
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Tue Apr 12 10:32:42 2011 -0400
@@ -497,6 +497,9 @@
addAttr(rv, "TargetMachine", "MachineX64");
}
+ // We always want the /DEBUG option to get full symbol information in the pdb files
+ addAttr(rv, "GenerateDebugInformation", "true");
+
return rv;
}
@@ -504,8 +507,7 @@
Vector getDebugLinkerFlags() {
Vector rv = new Vector();
- // /DEBUG option
- addAttr(rv, "GenerateDebugInformation", "true");
+ // Empty now that /DEBUG option is used by all configs
return rv;
}
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Mon Apr 11 23:02:37 2011 -0400
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Tue Apr 12 10:32:42 2011 -0400
@@ -1444,32 +1444,41 @@
}
}
#ifdef ASSERT
- assert(st_method() == method && st.bci() == bci,
- "Wrong stack trace");
- st.next();
- // vframeStream::method isn't GC-safe so store off a copy
- // of the methodOop in case we GC.
- if (!st.at_end()) {
- st_method = st.method();
- }
+ assert(st_method() == method && st.bci() == bci,
+ "Wrong stack trace");
+ st.next();
+ // vframeStream::method isn't GC-safe so store off a copy
+ // of the methodOop in case we GC.
+ if (!st.at_end()) {
+ st_method = st.method();
+ }
#endif
+
+ // the format of the stacktrace will be:
+ // - 1 or more fillInStackTrace frames for the exception class (skipped)
+ // - 0 or more <init> methods for the exception class (skipped)
+ // - rest of the stack
+
if (!skip_fillInStackTrace_check) {
- // check "fillInStackTrace" only once, so we negate the flag
- // after the first time check.
- skip_fillInStackTrace_check = true;
- if (method->name() == vmSymbols::fillInStackTrace_name()) {
+ if ((method->name() == vmSymbols::fillInStackTrace_name() ||
+ method->name() == vmSymbols::fillInStackTrace0_name()) &&
+ throwable->is_a(method->method_holder())) {
continue;
}
+ else {
+ skip_fillInStackTrace_check = true; // gone past them all
+ }
}
- // skip <init> methods of the exceptions klass. If there is <init> methods
- // that belongs to a superclass of the exception we are going to skipping
- // them in stack trace. This is simlar to classic VM.
if (!skip_throwableInit_check) {
+ assert(skip_fillInStackTrace_check, "logic error in backtrace filtering");
+
+ // skip <init> methods of the exception class and superclasses
+ // This is simlar to classic VM.
if (method->name() == vmSymbols::object_initializer_name() &&
throwable->is_a(method->method_holder())) {
continue;
} else {
- // if no "Throwable.init()" method found, we stop checking it next time.
+ // there are none or we've seen them all - either way stop checking
skip_throwableInit_check = true;
}
}
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Apr 11 23:02:37 2011 -0400
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Tue Apr 12 10:32:42 2011 -0400
@@ -330,6 +330,7 @@
template(dispatch_name, "dispatch") \
template(getSystemClassLoader_name, "getSystemClassLoader") \
template(fillInStackTrace_name, "fillInStackTrace") \
+ template(fillInStackTrace0_name, "fillInStackTrace0") \
template(getCause_name, "getCause") \
template(initCause_name, "initCause") \
template(setProperty_name, "setProperty") \