提交 054f5678 编写于 作者: V vladidan

Merge

...@@ -497,6 +497,9 @@ class CompilerInterfaceVC10 extends CompilerInterface { ...@@ -497,6 +497,9 @@ class CompilerInterfaceVC10 extends CompilerInterface {
addAttr(rv, "TargetMachine", "MachineX64"); 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; return rv;
} }
...@@ -504,8 +507,7 @@ class CompilerInterfaceVC10 extends CompilerInterface { ...@@ -504,8 +507,7 @@ class CompilerInterfaceVC10 extends CompilerInterface {
Vector getDebugLinkerFlags() { Vector getDebugLinkerFlags() {
Vector rv = new Vector(); Vector rv = new Vector();
// /DEBUG option // Empty now that /DEBUG option is used by all configs
addAttr(rv, "GenerateDebugInformation", "true");
return rv; return rv;
} }
......
...@@ -1444,32 +1444,41 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, TRAPS) { ...@@ -1444,32 +1444,41 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, TRAPS) {
} }
} }
#ifdef ASSERT #ifdef ASSERT
assert(st_method() == method && st.bci() == bci, assert(st_method() == method && st.bci() == bci,
"Wrong stack trace"); "Wrong stack trace");
st.next(); st.next();
// vframeStream::method isn't GC-safe so store off a copy // vframeStream::method isn't GC-safe so store off a copy
// of the methodOop in case we GC. // of the methodOop in case we GC.
if (!st.at_end()) { if (!st.at_end()) {
st_method = st.method(); st_method = st.method();
} }
#endif #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) { if (!skip_fillInStackTrace_check) {
// check "fillInStackTrace" only once, so we negate the flag if ((method->name() == vmSymbols::fillInStackTrace_name() ||
// after the first time check. method->name() == vmSymbols::fillInStackTrace0_name()) &&
skip_fillInStackTrace_check = true; throwable->is_a(method->method_holder())) {
if (method->name() == vmSymbols::fillInStackTrace_name()) {
continue; 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) { 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() && if (method->name() == vmSymbols::object_initializer_name() &&
throwable->is_a(method->method_holder())) { throwable->is_a(method->method_holder())) {
continue; continue;
} else { } 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; skip_throwableInit_check = true;
} }
} }
......
...@@ -330,6 +330,7 @@ ...@@ -330,6 +330,7 @@
template(dispatch_name, "dispatch") \ template(dispatch_name, "dispatch") \
template(getSystemClassLoader_name, "getSystemClassLoader") \ template(getSystemClassLoader_name, "getSystemClassLoader") \
template(fillInStackTrace_name, "fillInStackTrace") \ template(fillInStackTrace_name, "fillInStackTrace") \
template(fillInStackTrace0_name, "fillInStackTrace0") \
template(getCause_name, "getCause") \ template(getCause_name, "getCause") \
template(initCause_name, "initCause") \ template(initCause_name, "initCause") \
template(setProperty_name, "setProperty") \ template(setProperty_name, "setProperty") \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册