mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:16:51 +00:00
[dart/fuzzer] Add kbc execution mode
Rationale: This enables testing of bytecode interpretation, compilation, or mixed mode. Change-Id: Ie4322c62f1f6a1abe4896ec98c4edf40d25b7135 Reviewed-on: https://dart-review.googlesource.com/c/78186 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Aart Bik <ajcbik@google.com>
This commit is contained in:
parent
7e77c29989
commit
d31db6581c
|
@ -48,13 +48,16 @@ where
|
|||
--dart-top : sets DART_TOP explicitly through command line
|
||||
--mode1 : m1
|
||||
--mode2 : m2, and values one of
|
||||
jit-[debug-]ia32 = Dart JIT (ia32)
|
||||
jit-[debug-]x64 = Dart JIT (x64)
|
||||
jit-[debug-]arm32 = Dart JIT (simarm)
|
||||
jit-[debug-]arm64 = Dart JIT (simarm64)
|
||||
aot-[debug-]x64 = Dart AOT (x64)
|
||||
aot-[debug-]arm64 = Dart AOT (simarm64)
|
||||
js = dart2js + JS
|
||||
jit-[debug-]ia32 = Dart JIT (ia32)
|
||||
jit-[debug-]x64 = Dart JIT (x64)
|
||||
jit-[debug-]arm32 = Dart JIT (simarm)
|
||||
jit-[debug-]arm64 = Dart JIT (simarm64)
|
||||
aot-[debug-]x64 = Dart AOT (x64)
|
||||
aot-[debug-]arm64 = Dart AOT (simarm64)
|
||||
kbc-int-[debug-]x64 = Dart KBC (interpreted bytecode)
|
||||
kbc-mix-[debug-]x64 = Dart KBC (mixed-mode bytecode)
|
||||
kbc-cmp-[debug-]x64 = Dart KBC (compiled bytecode)
|
||||
js = dart2js + JS
|
||||
|
||||
If no modes are given, a random JIT and/or AOT combination is used.
|
||||
|
||||
|
|
|
@ -55,6 +55,8 @@ abstract class TestRunner {
|
|||
return new TestRunnerJIT(getTag(mode), top, tmp, env);
|
||||
if (mode.startsWith('aot'))
|
||||
return new TestRunnerAOT(getTag(mode), top, tmp, env);
|
||||
if (mode.startsWith('kbc'))
|
||||
return new TestRunnerKBC(mode, getTag(mode), top, tmp, env);
|
||||
if (mode.startsWith('js')) return new TestRunnerJS(top, tmp, env);
|
||||
throw ('unknown runner in mode: $mode');
|
||||
}
|
||||
|
@ -120,6 +122,51 @@ class TestRunnerAOT implements TestRunner {
|
|||
Map<String, String> env;
|
||||
}
|
||||
|
||||
/// Concrete test runner of bytecode.
|
||||
class TestRunnerKBC implements TestRunner {
|
||||
TestRunnerKBC(
|
||||
String mode, String tag, String top, String tmp, Map<String, String> e) {
|
||||
generate = '$top/pkg/vm/tool/gen_kernel';
|
||||
platform = '--platform=$top/out/$tag/vm_platform_strong.dill';
|
||||
dill = '$tmp/out.dill';
|
||||
dart = '$top/out/$tag/dart';
|
||||
fileName = '$tmp/fuzz.dart';
|
||||
env = e;
|
||||
cmd = [dart];
|
||||
if (mode.startsWith('kbc-int')) {
|
||||
description = 'KBC-INT-${tag}';
|
||||
cmd += ['--enable-interpreter', '--compilation-counter-threshold=-1'];
|
||||
} else if (mode.startsWith('kbc-mix')) {
|
||||
description = 'KBC-MIX-${tag}';
|
||||
cmd += ['--enable-interpreter'];
|
||||
} else if (mode.startsWith('kbc-cmp')) {
|
||||
description = 'KBC-CMP-${tag}';
|
||||
cmd += ['--use-bytecode-compiler'];
|
||||
} else {
|
||||
throw ('unknown KBC mode: $mode');
|
||||
}
|
||||
cmd += [dill];
|
||||
}
|
||||
|
||||
TestResult run() {
|
||||
TestResult result = runCommand(
|
||||
[generate, '--gen-bytecode', platform, '-o', dill, fileName], env);
|
||||
if (result.code != ResultCode.success) {
|
||||
return result;
|
||||
}
|
||||
return runCommand(cmd, env);
|
||||
}
|
||||
|
||||
String description;
|
||||
String generate;
|
||||
String platform;
|
||||
String dill;
|
||||
String dart;
|
||||
String fileName;
|
||||
List<String> cmd;
|
||||
Map<String, String> env;
|
||||
}
|
||||
|
||||
/// Concrete test runner of Dart2JS.
|
||||
class TestRunnerJS implements TestRunner {
|
||||
TestRunnerJS(String top, String tmp, Map<String, String> e) {
|
||||
|
@ -349,7 +396,7 @@ class DartFuzzTestSession {
|
|||
// Random when not set.
|
||||
if (mode == null || mode == '') {
|
||||
// Pick a mode at random (cluster), different from other.
|
||||
const cluster_modes = 10;
|
||||
const cluster_modes = 16;
|
||||
Random rand = new Random();
|
||||
do {
|
||||
mode = modes[rand.nextInt(cluster_modes)];
|
||||
|
@ -387,6 +434,12 @@ class DartFuzzTestSession {
|
|||
'jit-arm64',
|
||||
'aot-debug-x64',
|
||||
'aot-x64',
|
||||
'kbc-int-debug-x64',
|
||||
'kbc-cmp-debug-x64',
|
||||
'kbc-mix-debug-x64',
|
||||
'kbc-int-x64',
|
||||
'kbc-cmp-x64',
|
||||
'kbc-mix-x64',
|
||||
// Times out often:
|
||||
'aot-arm64',
|
||||
'aot-debug-arm64',
|
||||
|
|
Loading…
Reference in a new issue