--- a/test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java Mon Nov 04 11:42:24 2019 -0800
+++ b/test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java Mon Nov 04 12:36:54 2019 -0800
@@ -34,6 +34,7 @@
import java.io.*;
import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.cds.CDSTestUtils;
public class ExtraSymbols {
static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables";
@@ -46,10 +47,9 @@
checkOutput(output);
int numEntries1 = numOfEntries(output);
- // 2. Dump an archive with extra symbols. All symbols in
- // ExtraSymbols.symbols.txt are valid. Dumping should succeed.
+ // 2. Dump an archive with lots of extra symbols.
output = TestCommon.dump(appJar, TestCommon.list("Hello"), CDS_LOGGING,
- "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("ExtraSymbols.symbols.txt"));
+ "-XX:SharedArchiveConfigFile=" + makeLotsExtraSymbols());
checkOutput(output);
int numEntries2 = numOfEntries(output);
if (numEntries2 <= numEntries1) {
@@ -86,4 +86,30 @@
output.shouldContain("Shared symbol table stats -------- base:");
output.shouldHaveExitValue(0);
}
+
+ static String makeLotsExtraSymbols() throws Exception {
+ String fileName = "LotsExtraSymbols.txt";
+ File f = new File(fileName);
+ try (FileWriter fw = new FileWriter(f)) {
+ fw.write("VERSION: 1.0\n");
+ fw.write("@SECTION: Symbol\n");
+ appendSymbol(fw, "This file is auto-generated by test/hotspot/jtreg/runtime/cds/appcds/ExtraSymbols.java. Do not edit.");
+ appendSymbol(fw, "Hello");
+ appendSymbol(fw, ""); // empty string
+ appendSymbol(fw, "Hello_\u0001"); // <128 escaping with \x
+ appendSymbol(fw, "Hello_\u00ff"); // <256 escaping with \x
+ appendSymbol(fw, "Hello_\u1234"); // >= 256 escaping with \x
+ appendSymbol(fw, "Hello_\uffff"); // >= 256 escaping with \x
+
+ for (int i = 0; i < 10000; i++) {
+ appendSymbol(fw, "NewSymbol" + Integer.toString(i));
+ }
+ }
+ return fileName;
+ }
+
+ private static void appendSymbol(FileWriter fw, String symbol) throws Exception {
+ fw.write(CDSTestUtils.formatArchiveConfigSymbol(symbol));
+ fw.write("\n");
+ }
}