diff --git a/scripts/menu.pl b/scripts/menu.pl index 0ba0399..0e5d775 100644 --- a/scripts/menu.pl +++ b/scripts/menu.pl @@ -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 ); diff --git a/scripts/runner.pl b/scripts/runner.pl index d0fbd50..18e2b3d 100644 --- a/scripts/runner.pl +++ b/scripts/runner.pl @@ -35,151 +35,156 @@ my $result_browser = "$fail_bin/resultbrowser.py"; sub trace { my ($experiment) = @_; - Util::notify("Tracing $experiment..."); + # Util::notify("Tracing $experiment..."); - system( - join " ", - ( - "$bochs_runner", - "-V $fail_share/vgabios.bin", - "-b $fail_share/BIOS-bochs-latest", - "-1", - "-f $fail_trace", - "-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,--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" + my $trace_command = join " ", ( + "$bochs_runner", + "-V $fail_share/vgabios.bin", + "-b $fail_share/BIOS-bochs-latest", + "-1", + "-f $fail_trace", + "-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,--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,--full-trace", - # "-Wf,--check-bounds", - ) + # "-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 " ", - ( - "$fail_import", - "--database-option-file $remote_db_conf", - "-t $remote_builds_dir/$experiment/trace.pb", - "-i RegisterImporter", - "-e $remote_builds_dir/$experiment/system.elf", - "-v $experiment", - "-b ip", - "--no-gp", # Don't inject general purpose registers - "--ip" # Inject instruction pointer - ) + my $import_ip_command = join " ", ( + "$fail_import", + "--database-option-file $remote_db_conf", + "-t $remote_builds_dir/$experiment/trace.pb", + "-i RegisterImporter", + "-e $remote_builds_dir/$experiment/system.elf", + "-v $experiment", + "-b ip", + "--no-gp", # Don't inject general purpose registers + "--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 " ", - ( - "$fail_import", - "--database-option-file $remote_db_conf", - "-t $remote_builds_dir/$experiment/trace.pb", - "-i MemoryImporter", - "-e $remote_builds_dir/$experiment/system.elf", - "-v $experiment", - "-b mem" - ) - ); + my $import_mem_command = join " ", + ( + "$fail_import", + "--database-option-file $remote_db_conf", + "-t $remote_builds_dir/$experiment/trace.pb", + "-i MemoryImporter", + "-e $remote_builds_dir/$experiment/system.elf", + "-v $experiment", + "-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 " ", - ( - "$fail_import", - "--database-option-file $remote_db_conf", - "-t $remote_builds_dir/$experiment/trace.pb", - "-i RegisterImporter", - "-e $remote_builds_dir/$experiment/system.elf", - "-v $experiment", - "-b regs", - "--flags" # Inject flags register - ) + my $import_regs_command = join " ", ( + "$fail_import", + "--database-option-file $remote_db_conf", + "-t $remote_builds_dir/$experiment/trace.pb", + "-i RegisterImporter", + "-e $remote_builds_dir/$experiment/system.elf", + "-v $experiment", + "-b regs", + "--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", + # 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", + # ) + # ); - # "--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", + my $prune_command = join " ", + ( + "$fail_prune", "--database-option-file $remote_db_conf", + "-v $experiment", "-b %%", + "--overwrite", ">$remote_builds_dir/$experiment/2_prune.log" + ); + say "Prune command: $prune_command"; - # "--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_prune", - "--database-option-file $remote_db_conf", - "-v $experiment", - "-b %%", "--overwrite" - ) - ); + system($prune_command); } sub inject { @@ -195,7 +200,8 @@ sub inject { # "--port $fail_server_port", "--database-option-file $remote_db_conf", "-v $experiment", "-b %", "--inject-single-bit", - "--inject-registers", ">$remote_root/server.log" + "--inject-registers", + ">$remote_builds_dir/$experiment/3_server.log" ); say "Server command: $server_command"; @@ -220,7 +226,7 @@ sub inject { "-Wf,--detected-marker=fail_marker_detected", # ">/dev/null" - ">$remote_root/client.log" + ">$remote_builds_dir/$experiment/4_client.log" ); 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 my @experiments = Util::find_subdirs($remote_builds_dir); for my $experiment (@experiments) { @@ -277,13 +279,6 @@ for my $experiment (@experiments) { import_trace($experiment); inject($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");