8305489: runtime/ErrorHandling/TestDwarf.java fails in some Linux configurations after JDK-8303805
Reviewed-by: dholmes, lmesnik
This commit is contained in:
parent
7e2bcf6d00
commit
125f743223
@ -114,7 +114,6 @@ runtime/os/TestTracePageSizes.java#Parallel 8267460 linux-aarch64
|
|||||||
runtime/os/TestTracePageSizes.java#Serial 8267460 linux-aarch64
|
runtime/os/TestTracePageSizes.java#Serial 8267460 linux-aarch64
|
||||||
runtime/ErrorHandling/CreateCoredumpOnCrash.java 8267433 macosx-x64
|
runtime/ErrorHandling/CreateCoredumpOnCrash.java 8267433 macosx-x64
|
||||||
runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all
|
runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all
|
||||||
runtime/ErrorHandling/TestDwarf.java#checkDecoder 8305489 linux-all
|
|
||||||
runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315 linux-ppc64le
|
runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315 linux-ppc64le
|
||||||
runtime/Thread/TestAlwaysPreTouchStacks.java 8335167 macosx-aarch64
|
runtime/Thread/TestAlwaysPreTouchStacks.java 8335167 macosx-aarch64
|
||||||
runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x64
|
runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x64
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test id=checkDecoder
|
* @test
|
||||||
* @bug 8242181
|
* @bug 8242181
|
||||||
* @library / /test/lib
|
* @library / /test/lib
|
||||||
* @summary Test DWARF parser with various crashes if debug symbols are available. If the libjvm debug symbols are not
|
* @summary Test DWARF parser with various crashes if debug symbols are available. If the libjvm debug symbols are not
|
||||||
@ -30,15 +30,7 @@
|
|||||||
* by the environment variable _JVM_DWARF_PATH, then no verification of the hs_err_file is done for libjvm.so.
|
* by the environment variable _JVM_DWARF_PATH, then no verification of the hs_err_file is done for libjvm.so.
|
||||||
* @requires vm.debug == true & vm.flagless & vm.compMode != "Xint" & os.family == "linux" & !vm.graal.enabled & vm.gc.G1
|
* @requires vm.debug == true & vm.flagless & vm.compMode != "Xint" & os.family == "linux" & !vm.graal.enabled & vm.gc.G1
|
||||||
* @modules java.base/jdk.internal.misc
|
* @modules java.base/jdk.internal.misc
|
||||||
* @run main/native/othervm -Xbootclasspath/a:. -XX:-CreateCoredumpOnCrash -DcheckDecoder=true TestDwarf
|
* @run main/native/othervm -Xbootclasspath/a:. -XX:-CreateCoredumpOnCrash TestDwarf
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @test id=dontCheckDecoder
|
|
||||||
* @library / /test/lib
|
|
||||||
* @requires vm.debug == true & vm.flagless & vm.compMode != "Xint" & os.family == "linux" & !vm.graal.enabled & vm.gc.G1
|
|
||||||
* @modules java.base/jdk.internal.misc
|
|
||||||
* @run main/native/othervm -Xbootclasspath/a:. -XX:-CreateCoredumpOnCrash -DcheckDecoder=false TestDwarf
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import jdk.test.lib.Asserts;
|
import jdk.test.lib.Asserts;
|
||||||
@ -63,8 +55,6 @@ public class TestDwarf {
|
|||||||
System.loadLibrary("TestDwarf");
|
System.loadLibrary("TestDwarf");
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean checkDecoder = Boolean.getBoolean("checkDecoder");
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
if (args.length != 0) {
|
if (args.length != 0) {
|
||||||
switch (args[0]) {
|
switch (args[0]) {
|
||||||
@ -127,11 +117,11 @@ public class TestDwarf {
|
|||||||
new DwarfConstraint(0, "dereference_null", "libTestDwarfHelper.h", 46));
|
new DwarfConstraint(0, "dereference_null", "libTestDwarfHelper.h", 46));
|
||||||
}
|
}
|
||||||
|
|
||||||
// The full pattern accepts lines like:
|
// A full pattern could check for lines like:
|
||||||
// V [libjvm.so+0x8f4ed8] report_fatal(VMErrorType, char const*, int, char const*, ...)+0x78 (debug.cpp:212)
|
// V [libjvm.so+0x8f4ed8] report_fatal(VMErrorType, char const*, int, char const*, ...)+0x78 (debug.cpp:212)
|
||||||
// but if the decoder is not available we only get
|
// but the decoder is not reliably working at the moment (see JDK-8305489). We therefore use a pattern that only
|
||||||
|
// checks that lines have the following structure with source information:
|
||||||
// V [libjvm.so+0x8f4ed8] (debug.cpp:212)
|
// V [libjvm.so+0x8f4ed8] (debug.cpp:212)
|
||||||
private static final String FULL_PATTERN ="[CV][\\s\\t]+\\[([a-zA-Z0-9_.]+)\\+0x.+][\\s\\t]+.*\\+0x.+[\\s\\t]+\\([a-zA-Z0-9_.]+\\.[a-z]+:[1-9][0-9]*\\)";
|
|
||||||
private static final String NO_DECODER_PATTERN ="[CV][\\s\\t]+\\[([a-zA-Z0-9_.]+)\\+0x.+].*\\([a-zA-Z0-9_.]+\\.[a-z]+:[1-9][0-9]*\\)";
|
private static final String NO_DECODER_PATTERN ="[CV][\\s\\t]+\\[([a-zA-Z0-9_.]+)\\+0x.+].*\\([a-zA-Z0-9_.]+\\.[a-z]+:[1-9][0-9]*\\)";
|
||||||
|
|
||||||
private static void runAndCheck(Flags flags, DwarfConstraint... constraints) throws Exception {
|
private static void runAndCheck(Flags flags, DwarfConstraint... constraints) throws Exception {
|
||||||
@ -149,7 +139,7 @@ public class TestDwarf {
|
|||||||
int matches = 0;
|
int matches = 0;
|
||||||
int frameIdx = 0;
|
int frameIdx = 0;
|
||||||
|
|
||||||
Pattern pattern = Pattern.compile(checkDecoder ? FULL_PATTERN : NO_DECODER_PATTERN);
|
Pattern pattern = Pattern.compile(NO_DECODER_PATTERN);
|
||||||
|
|
||||||
// Check all stack entries after the line starting with "Native frames" in the hs_err_file until an empty line
|
// Check all stack entries after the line starting with "Native frames" in the hs_err_file until an empty line
|
||||||
// is found which denotes the end of the stack frames.
|
// is found which denotes the end of the stack frames.
|
||||||
@ -202,14 +192,6 @@ public class TestDwarf {
|
|||||||
pattern = Pattern.compile("Failed to load DWARF file for library.*" + library + ".*or find DWARF sections directly inside it");
|
pattern = Pattern.compile("Failed to load DWARF file for library.*" + library + ".*or find DWARF sections directly inside it");
|
||||||
matcher = pattern.matcher(crashOutputString);
|
matcher = pattern.matcher(crashOutputString);
|
||||||
if (!matcher.find()) {
|
if (!matcher.find()) {
|
||||||
// Symbols were fine so check if we expected decoder output and didn't find it.
|
|
||||||
if (checkDecoder) {
|
|
||||||
pattern = Pattern.compile(NO_DECODER_PATTERN);
|
|
||||||
matcher = pattern.matcher(line);
|
|
||||||
if (matcher.find()) {
|
|
||||||
Asserts.fail("Could not find decoded method signature in \"" + line + "\"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bailoutIfUnsupportedDwarfVersion(crashOutputString);
|
bailoutIfUnsupportedDwarfVersion(crashOutputString);
|
||||||
Asserts.fail("Could not find filename or line number in \"" + line + "\"");
|
Asserts.fail("Could not find filename or line number in \"" + line + "\"");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user