Skip to content

Commit 1684062

Browse files
committed
[GR-67816] Handle --limit-modules and some more -XX options by JVM launcher.
PullRequest: graal/21536
2 parents 7221408 + 31db0fd commit 1684062

File tree

2 files changed

+47
-4
lines changed
  • espresso/src
    • com.oracle.truffle.espresso.launcher/src/com/oracle/truffle/espresso/launcher
    • com.oracle.truffle.espresso.libjavavm/src/com/oracle/truffle/espresso/libjavavm

2 files changed

+47
-4
lines changed

espresso/src/com.oracle.truffle.espresso.launcher/src/com/oracle/truffle/espresso/launcher/EspressoLauncher.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.nio.file.Paths;
3232
import java.util.ArrayList;
3333
import java.util.HashMap;
34+
import java.util.Iterator;
3435
import java.util.List;
3536
import java.util.Map;
3637
import java.util.Set;
@@ -183,6 +184,9 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
183184
ArrayList<String> unrecognized = new ArrayList<>();
184185
boolean isRelaxStaticObjectSafetyChecksSet = false;
185186
int javaAgentIndex = 0;
187+
boolean heapDumpOnOutOfMemoryError = false;
188+
String heapDumpPath = null;
189+
boolean ignoreUnrecognized = false;
186190

187191
List<String> expandedArguments = expandAtFiles(arguments);
188192

@@ -231,6 +235,9 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
231235
espressoOptions.put("java.Module", mainClassName);
232236
launchMode = LaunchMode.LM_MODULE;
233237
break;
238+
case "--limit-modules":
239+
espressoOptions.put("java.Properties.jdk.module.limitmods", args.getValue(arg, "limit-modules"));
240+
break;
234241
case "-jar":
235242
jarFileName = args.getValue(arg, "jar file");
236243
break;
@@ -285,6 +292,18 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
285292
case "-XX:+PauseOnExit":
286293
pauseOnExit = true;
287294
break;
295+
case "-XX:+HeapDumpOnOutOfMemoryError":
296+
heapDumpOnOutOfMemoryError = true;
297+
break;
298+
case "-XX:-HeapDumpOnOutOfMemoryError":
299+
heapDumpOnOutOfMemoryError = false;
300+
break;
301+
case "-XX:+IgnoreUnrecognizedVMOptions":
302+
ignoreUnrecognized = true;
303+
break;
304+
case "-XX:-IgnoreUnrecognizedVMOptions":
305+
ignoreUnrecognized = false;
306+
break;
288307

289308
case "--engine.RelaxStaticObjectSafetyChecks":
290309
isRelaxStaticObjectSafetyChecksSet = true;
@@ -331,6 +350,8 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
331350
} else if (arg.startsWith("--sun-misc-unsafe-memory-access")) {
332351
String value = args.getValue(arg, "sun.misc.Unsafe memory access");
333352
espressoOptions.put("java.SunMiscUnsafeMemoryAccess", value);
353+
} else if (arg.startsWith("-XX:HeapDumpPath=")) {
354+
heapDumpPath = arg.substring("-XX:HeapDumpPath=".length());
334355
} else if (arg.startsWith("-XX:")) {
335356
handleXXArg(arg, unrecognized);
336357
} else if (arg.startsWith("-D")) {
@@ -408,6 +429,23 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
408429
espressoOptions.put("engine.RelaxStaticObjectSafetyChecks", "true");
409430
}
410431

432+
if (heapDumpOnOutOfMemoryError) {
433+
unrecognized.add("--vm.XX:+HeapDumpOnOutOfMemoryError");
434+
}
435+
if (heapDumpPath != null) {
436+
unrecognized.add("--vm.XX:HeapDumpPath=" + heapDumpPath);
437+
}
438+
439+
if (ignoreUnrecognized) {
440+
// We remove the unrecognized -XX options from the list to ignore them:
441+
Iterator<String> unrecognizedIt = unrecognized.iterator();
442+
while (unrecognizedIt.hasNext()) {
443+
String option = unrecognizedIt.next();
444+
if (option.startsWith("-XX")) {
445+
unrecognizedIt.remove();
446+
}
447+
}
448+
}
411449
return unrecognized;
412450
}
413451

espresso/src/com.oracle.truffle.espresso.libjavavm/src/com/oracle/truffle/espresso/libjavavm/Arguments.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public static int setupContext(Context.Builder builder, JNIJavaVMInitArgs args,
9595

9696
boolean ignoreUnrecognized = args.getIgnoreUnrecognized();
9797
boolean printFlagsFinal = false;
98+
String argumentError = null;
9899
List<String> xOptions = new ArrayList<>();
99100

100101
for (int i = 0; i < count; i++) {
@@ -243,14 +244,18 @@ public static int setupContext(Context.Builder builder, JNIJavaVMInitArgs args,
243244
}
244245
}
245246
} catch (ArgumentException e) {
246-
if (!ignoreUnrecognized) {
247-
// Failed to parse
248-
warn(e.getMessage());
249-
return JNI_ERR();
247+
// Failed to parse
248+
if (argumentError == null) {
249+
argumentError = e.getMessage();
250250
}
251251
}
252252
}
253253

254+
if (argumentError != null && !ignoreUnrecognized) {
255+
warn(argumentError);
256+
return JNI_ERR();
257+
}
258+
254259
for (String xOption : xOptions) {
255260
RuntimeOptions.set(xOption.substring(2 /* drop the -X */), null);
256261
}

0 commit comments

Comments
 (0)