log experiment stages to separate files

This commit is contained in:
2026-05-06 20:30:41 +02:00
parent 644603fb8b
commit be2c4b7bf2
2 changed files with 136 additions and 137 deletions

View File

@ -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 @builds = grep { /linux/ } Util::find_subdirs($local_builds_dir);
my @selected_builds = my @selected_builds =
TUI::select_from_list( "Select Build to Run in GDB", 0, @builds ); TUI::select_from_list( "Select Build to Run in GDB", 0, @builds );

View File

@ -35,151 +35,156 @@ my $result_browser = "$fail_bin/resultbrowser.py";
sub trace { sub trace {
my ($experiment) = @_; my ($experiment) = @_;
Util::notify("Tracing $experiment..."); # Util::notify("Tracing $experiment...");
system( my $trace_command = join " ", (
join " ", "$bochs_runner",
( "-V $fail_share/vgabios.bin",
"$bochs_runner", "-b $fail_share/BIOS-bochs-latest",
"-V $fail_share/vgabios.bin", "-1",
"-b $fail_share/BIOS-bochs-latest", "-f $fail_trace",
"-1", "-e $remote_builds_dir/$experiment/system.elf",
"-f $fail_trace", "-i $remote_builds_dir/$experiment/system.iso",
"-e $remote_builds_dir/$experiment/system.elf", "--",
"-i $remote_builds_dir/$experiment/system.iso", "-Wf,--start-symbol=fail_start_trace",
"--", "-Wf,--save-symbol=fail_start_trace",
"-Wf,--start-symbol=fail_start_trace", "-Wf,--end-symbol=fail_stop_trace",
"-Wf,--save-symbol=fail_start_trace", "-Wf,--state-file=$remote_builds_dir/$experiment/state",
"-Wf,--end-symbol=fail_stop_trace", "-Wf,--trace-file=$remote_builds_dir/$experiment/trace.pb",
"-Wf,--state-file=$remote_builds_dir/$experiment/state", "-Wf,--elf-file=$remote_builds_dir/$experiment/system.elf",
"-Wf,--trace-file=$remote_builds_dir/$experiment/trace.pb",
"-Wf,--elf-file=$remote_builds_dir/$experiment/system.elf"
# "-Wf,--full-trace", # "-Wf,--full-trace",
# "-Wf,--check-bounds", # "-Wf,--check-bounds",
) ">$remote_builds_dir/$experiment/1_trace.log"
); );
say "Trace command: $trace_command";
system($trace_command);
} }
sub import_trace { sub import_trace {
my ($experiment) = @_; my ($experiment) = @_;
Util::notify("Importing $experiment trace..."); # Util::notify("Importing $experiment trace...");
# Benchmark: ip # Benchmark: ip
system( my $import_ip_command = join " ", (
join " ", "$fail_import",
( "--database-option-file $remote_db_conf",
"$fail_import", "-t $remote_builds_dir/$experiment/trace.pb",
"--database-option-file $remote_db_conf", "-i RegisterImporter",
"-t $remote_builds_dir/$experiment/trace.pb", "-e $remote_builds_dir/$experiment/system.elf",
"-i RegisterImporter", "-v $experiment",
"-e $remote_builds_dir/$experiment/system.elf", "-b ip",
"-v $experiment", "--no-gp", # Don't inject general purpose registers
"-b ip", "--ip", # Inject instruction pointer
"--no-gp", # Don't inject general purpose registers ">$remote_builds_dir/$experiment/2_import_ip.log"
"--ip" # Inject instruction pointer
)
); );
say "Import IP command: $import_ip_command";
system($import_ip_command);
# Benchmark: mem # Benchmark: mem
system( my $import_mem_command = join " ",
join " ", (
( "$fail_import",
"$fail_import", "--database-option-file $remote_db_conf",
"--database-option-file $remote_db_conf", "-t $remote_builds_dir/$experiment/trace.pb",
"-t $remote_builds_dir/$experiment/trace.pb", "-i MemoryImporter",
"-i MemoryImporter", "-e $remote_builds_dir/$experiment/system.elf",
"-e $remote_builds_dir/$experiment/system.elf", "-v $experiment",
"-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 # Benchmark: regs
system( my $import_regs_command = join " ", (
join " ", "$fail_import",
( "--database-option-file $remote_db_conf",
"$fail_import", "-t $remote_builds_dir/$experiment/trace.pb",
"--database-option-file $remote_db_conf", "-i RegisterImporter",
"-t $remote_builds_dir/$experiment/trace.pb", "-e $remote_builds_dir/$experiment/system.elf",
"-i RegisterImporter", "-v $experiment",
"-e $remote_builds_dir/$experiment/system.elf", "-b regs",
"-v $experiment", "--flags", # Inject flags register
"-b regs", ">$remote_builds_dir/$experiment/2_import_regs.log"
"--flags" # Inject flags register
)
); );
say "Import REGS command: $import_regs_command";
system($import_regs_command);
# Import fulltrace for VisualFAIL # Import fulltrace for VisualFAIL
system( # system(
join " ", # join " ",
( # (
"$fail_import", # "$fail_import",
"--database-option-file $remote_db_conf", # "--database-option-file $remote_db_conf",
"-t $remote_builds_dir/$experiment/trace.pb", # "-t $remote_builds_dir/$experiment/trace.pb",
"-i FullTraceImporter", # "-i FullTraceImporter",
"-e $remote_builds_dir/$experiment/system.elf", # "-e $remote_builds_dir/$experiment/system.elf",
"-v $experiment", # "-v $experiment",
) # )
); # );
# Import objdump disassembly + source files # Import objdump disassembly + source files
system( # system(
join " ", # join " ",
( # (
"$fail_import", # "$fail_import",
"--database-option-file $remote_db_conf", # "--database-option-file $remote_db_conf",
"-t $remote_builds_dir/$experiment/trace.pb", # "-t $remote_builds_dir/$experiment/trace.pb",
"-i ElfImporter", # "-i ElfImporter",
"-e $remote_builds_dir/$experiment/system.elf", # "-e $remote_builds_dir/$experiment/system.elf",
"-v $experiment", # "-v $experiment",
"-b ip", # "-b ip",
"--objdump objdump", # "--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",
# )
# );
# "--sources", my $prune_command = join " ",
) (
); "$fail_prune", "--database-option-file $remote_db_conf",
system( "-v $experiment", "-b %%",
join " ", "--overwrite", ">$remote_builds_dir/$experiment/2_prune.log"
( );
"$fail_import", say "Prune command: $prune_command";
"--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($prune_command);
)
);
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_prune",
"--database-option-file $remote_db_conf",
"-v $experiment",
"-b %%", "--overwrite"
)
);
} }
sub inject { sub inject {
@ -195,7 +200,8 @@ sub inject {
# "--port $fail_server_port", # "--port $fail_server_port",
"--database-option-file $remote_db_conf", "-v $experiment", "--database-option-file $remote_db_conf", "-v $experiment",
"-b %", "--inject-single-bit", "-b %", "--inject-single-bit",
"--inject-registers", ">$remote_root/server.log" "--inject-registers",
">$remote_builds_dir/$experiment/3_server.log"
); );
say "Server command: $server_command"; say "Server command: $server_command";
@ -220,7 +226,7 @@ sub inject {
"-Wf,--detected-marker=fail_marker_detected", "-Wf,--detected-marker=fail_marker_detected",
# ">/dev/null" # ">/dev/null"
">$remote_root/client.log" ">$remote_builds_dir/$experiment/4_client.log"
); );
say "Client command: $client_command"; say "Client command: $client_command";
@ -263,10 +269,6 @@ sub results {
} }
} }
# system("rm $remote_root/runner.log");
system("rm $remote_root/server.log");
system("rm $remote_root/client.log");
# Run experiments # Run experiments
my @experiments = Util::find_subdirs($remote_builds_dir); my @experiments = Util::find_subdirs($remote_builds_dir);
for my $experiment (@experiments) { for my $experiment (@experiments) {
@ -277,13 +279,6 @@ for my $experiment (@experiments) {
import_trace($experiment); import_trace($experiment);
inject($experiment); inject($experiment);
results($experiment); results($experiment);
# system(
# "mv $remote_root/runner.log $remote_builds_dir/$experiment/runner.log");
system(
"mv $remote_root/server.log $remote_builds_dir/$experiment/server.log");
system(
"mv $remote_root/client.log $remote_builds_dir/$experiment/client.log");
} }
Util::notify("Finished all experiments"); Util::notify("Finished all experiments");