Compare commits
9 Commits
6ce8987ebd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
9ca8e88ec0
|
|||
|
be2c4b7bf2
|
|||
|
644603fb8b
|
|||
|
0dccd1df46
|
|||
|
9db4cb8bb1
|
|||
| 10fe608a90 | |||
|
2de6e20675
|
|||
|
bc98e2af5c
|
|||
|
3819e84acb
|
BIN
fail/bin/fail-x86-tracing
(Stored with Git LFS)
BIN
fail/bin/fail-x86-tracing
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/generic-experiment-client
(Stored with Git LFS)
BIN
fail/bin/generic-experiment-client
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/generic-experiment-server
(Stored with Git LFS)
BIN
fail/bin/generic-experiment-server
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/import-trace
(Stored with Git LFS)
BIN
fail/bin/import-trace
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/prune-trace
(Stored with Git LFS)
BIN
fail/bin/prune-trace
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -417,7 +417,7 @@ rec {
|
||||
mariadb.client
|
||||
# dbeaver-bin
|
||||
# beekeeper-studio
|
||||
tableplus
|
||||
# tableplus
|
||||
lazysql
|
||||
iwasm
|
||||
wamrc
|
||||
|
||||
@ -381,7 +381,11 @@ my %handlers = (
|
||||
);
|
||||
},
|
||||
|
||||
'20. Run Build in GDB' => sub {
|
||||
'20. Open TablePlus (Mars)' => sub {
|
||||
system('tableplus');
|
||||
},
|
||||
|
||||
'21. Run Build in GDB' => sub {
|
||||
my @builds = grep { /linux/ } Util::find_subdirs($local_builds_dir);
|
||||
my @selected_builds =
|
||||
TUI::select_from_list( "Select Build to Run in GDB", 0, @builds );
|
||||
|
||||
@ -35,11 +35,9 @@ my $result_browser = "$fail_bin/resultbrowser.py";
|
||||
sub trace {
|
||||
my ($experiment) = @_;
|
||||
|
||||
Util::notify("Tracing $experiment...");
|
||||
# Util::notify("Tracing $experiment...");
|
||||
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
my $trace_command = join " ", (
|
||||
"$bochs_runner",
|
||||
"-V $fail_share/vgabios.bin",
|
||||
"-b $fail_share/BIOS-bochs-latest",
|
||||
@ -53,23 +51,24 @@ sub trace {
|
||||
"-Wf,--end-symbol=fail_stop_trace",
|
||||
"-Wf,--state-file=$remote_builds_dir/$experiment/state",
|
||||
"-Wf,--trace-file=$remote_builds_dir/$experiment/trace.pb",
|
||||
"-Wf,--elf-file=$remote_builds_dir/$experiment/system.elf"
|
||||
"-Wf,--elf-file=$remote_builds_dir/$experiment/system.elf",
|
||||
|
||||
# "-Wf,--full-trace",
|
||||
# "-Wf,--check-bounds",
|
||||
)
|
||||
">$remote_builds_dir/$experiment/1_trace.log"
|
||||
);
|
||||
say "Trace command: $trace_command";
|
||||
|
||||
system($trace_command);
|
||||
}
|
||||
|
||||
sub import_trace {
|
||||
my ($experiment) = @_;
|
||||
|
||||
Util::notify("Importing $experiment trace...");
|
||||
# Util::notify("Importing $experiment trace...");
|
||||
|
||||
# Benchmark: ip
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
my $import_ip_command = join " ", (
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
@ -78,13 +77,15 @@ sub import_trace {
|
||||
"-v $experiment",
|
||||
"-b ip",
|
||||
"--no-gp", # Don't inject general purpose registers
|
||||
"--ip" # Inject instruction pointer
|
||||
)
|
||||
"--ip", # Inject instruction pointer
|
||||
">$remote_builds_dir/$experiment/2_import_ip.log"
|
||||
);
|
||||
say "Import IP command: $import_ip_command";
|
||||
|
||||
system($import_ip_command);
|
||||
|
||||
# Benchmark: mem
|
||||
system(
|
||||
join " ",
|
||||
my $import_mem_command = join " ",
|
||||
(
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
@ -92,14 +93,15 @@ sub import_trace {
|
||||
"-i MemoryImporter",
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
"-b mem"
|
||||
)
|
||||
"-b mem",
|
||||
">$remote_builds_dir/$experiment/2_import_mem.log"
|
||||
);
|
||||
say "Import MEM command: $import_mem_command";
|
||||
|
||||
system($import_mem_command);
|
||||
|
||||
# Benchmark: regs
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
my $import_regs_command = join " ", (
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
@ -107,76 +109,82 @@ sub import_trace {
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
"-b regs",
|
||||
"--flags" # Inject flags register
|
||||
)
|
||||
"--flags", # Inject flags register
|
||||
">$remote_builds_dir/$experiment/2_import_regs.log"
|
||||
);
|
||||
say "Import REGS command: $import_regs_command";
|
||||
|
||||
system($import_regs_command);
|
||||
|
||||
# Import fulltrace for VisualFAIL
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
"-i FullTraceImporter",
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
)
|
||||
);
|
||||
# system(
|
||||
# join " ",
|
||||
# (
|
||||
# "$fail_import",
|
||||
# "--database-option-file $remote_db_conf",
|
||||
# "-t $remote_builds_dir/$experiment/trace.pb",
|
||||
# "-i FullTraceImporter",
|
||||
# "-e $remote_builds_dir/$experiment/system.elf",
|
||||
# "-v $experiment",
|
||||
# )
|
||||
# );
|
||||
|
||||
# Import objdump disassembly + source files
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
"-i ElfImporter",
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
"-b ip",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
)
|
||||
);
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
"-i ElfImporter",
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
"-b mem",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
)
|
||||
);
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
"$fail_import",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-t $remote_builds_dir/$experiment/trace.pb",
|
||||
"-i ElfImporter",
|
||||
"-e $remote_builds_dir/$experiment/system.elf",
|
||||
"-v $experiment",
|
||||
"-b regs",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
)
|
||||
);
|
||||
# system(
|
||||
# join " ",
|
||||
# (
|
||||
# "$fail_import",
|
||||
# "--database-option-file $remote_db_conf",
|
||||
# "-t $remote_builds_dir/$experiment/trace.pb",
|
||||
# "-i ElfImporter",
|
||||
# "-e $remote_builds_dir/$experiment/system.elf",
|
||||
# "-v $experiment",
|
||||
# "-b ip",
|
||||
# "--objdump objdump",
|
||||
#
|
||||
# # "--sources",
|
||||
# )
|
||||
# );
|
||||
# system(
|
||||
# join " ",
|
||||
# (
|
||||
# "$fail_import",
|
||||
# "--database-option-file $remote_db_conf",
|
||||
# "-t $remote_builds_dir/$experiment/trace.pb",
|
||||
# "-i ElfImporter",
|
||||
# "-e $remote_builds_dir/$experiment/system.elf",
|
||||
# "-v $experiment",
|
||||
# "-b mem",
|
||||
# "--objdump objdump",
|
||||
#
|
||||
# # "--sources",
|
||||
# )
|
||||
# );
|
||||
# system(
|
||||
# join " ",
|
||||
# (
|
||||
# "$fail_import",
|
||||
# "--database-option-file $remote_db_conf",
|
||||
# "-t $remote_builds_dir/$experiment/trace.pb",
|
||||
# "-i ElfImporter",
|
||||
# "-e $remote_builds_dir/$experiment/system.elf",
|
||||
# "-v $experiment",
|
||||
# "-b regs",
|
||||
# "--objdump objdump",
|
||||
#
|
||||
# # "--sources",
|
||||
# )
|
||||
# );
|
||||
|
||||
system(
|
||||
join " ",
|
||||
my $prune_command = join " ",
|
||||
(
|
||||
"$fail_prune",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-v $experiment",
|
||||
"-b %%", "--overwrite"
|
||||
)
|
||||
"$fail_prune", "--database-option-file $remote_db_conf",
|
||||
"-v $experiment", "-b %%",
|
||||
"--overwrite", ">$remote_builds_dir/$experiment/2_prune.log"
|
||||
);
|
||||
say "Prune command: $prune_command";
|
||||
|
||||
system($prune_command);
|
||||
}
|
||||
|
||||
sub inject {
|
||||
@ -186,39 +194,18 @@ sub inject {
|
||||
|
||||
Util::notify("Injecting $experiment using $count cores...");
|
||||
|
||||
say "Forking...";
|
||||
my $pid = fork();
|
||||
die "fork failed: $!" unless defined $pid;
|
||||
|
||||
if ( $pid == 0 ) {
|
||||
|
||||
# child -> server
|
||||
|
||||
say "Running server in child process...";
|
||||
exec(
|
||||
join " ",
|
||||
(
|
||||
my $server_command = join " ", (
|
||||
"$fail_server",
|
||||
"--port $fail_server_port",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-v $experiment",
|
||||
"-b %",
|
||||
"--inject-single-bit",
|
||||
"--inject-registers"
|
||||
)
|
||||
) == 0 or die "exec server failed: $!";
|
||||
}
|
||||
|
||||
# parent -> client
|
||||
# "--port $fail_server_port",
|
||||
"--database-option-file $remote_db_conf", "-v $experiment",
|
||||
"-b %", "--inject-single-bit",
|
||||
"--inject-registers",
|
||||
">$remote_builds_dir/$experiment/3_server.log"
|
||||
);
|
||||
say "Server command: $server_command";
|
||||
|
||||
say "Waiting for server...";
|
||||
sleep(10);
|
||||
|
||||
say "Running client with $count cores in parent process";
|
||||
|
||||
system(
|
||||
join " ",
|
||||
(
|
||||
my $client_command = join " ", (
|
||||
"nice $bochs_runner",
|
||||
"-V $fail_share/vgabios.bin",
|
||||
"-b $fail_share/BIOS-bochs-latest",
|
||||
@ -227,7 +214,8 @@ sub inject {
|
||||
"-i $remote_builds_dir/$experiment/system.iso",
|
||||
"-j $count",
|
||||
"--",
|
||||
"-Wf,--server-port=$fail_server_port",
|
||||
|
||||
# "-Wf,--server-port=$fail_server_port",
|
||||
"-Wf,--state-dir=$remote_builds_dir/$experiment/state",
|
||||
"-Wf,--trap",
|
||||
"-Wf,--catch-outerspace",
|
||||
@ -236,9 +224,30 @@ sub inject {
|
||||
"-Wf,--ok-marker=fail_marker_positive",
|
||||
"-Wf,--fail-marker=fail_marker_negative",
|
||||
"-Wf,--detected-marker=fail_marker_detected",
|
||||
|
||||
">/dev/null"
|
||||
)
|
||||
) == 0 or die "client failed: $?";
|
||||
|
||||
# ">$remote_builds_dir/$experiment/4_client.log"
|
||||
);
|
||||
say "Client command: $client_command";
|
||||
|
||||
say "Forking...";
|
||||
my $pid = fork();
|
||||
die "fork failed: $!" unless defined $pid;
|
||||
|
||||
if ( $pid == 0 ) {
|
||||
|
||||
# child -> server
|
||||
say "Running server in child process...";
|
||||
exec($server_command) == 0 or die "exec server failed: $!";
|
||||
}
|
||||
|
||||
# parent -> client
|
||||
say "Waiting for server...";
|
||||
sleep(10);
|
||||
|
||||
say "Running client with $count cores in parent process";
|
||||
system($client_command) == 0 or die "client failed: $?";
|
||||
|
||||
say "Killing server with pid $pid...";
|
||||
kill 'TERM', $pid;
|
||||
|
||||
Reference in New Issue
Block a user