Update faults filtering to be selectable from menu

This commit is contained in:
2026-06-13 21:22:56 +02:00
parent 797c9512b4
commit b344c55eee
8 changed files with 176 additions and 95 deletions

View File

@ -0,0 +1,71 @@
package Modules::Filters;
use strict;
use warnings;
use diagnostics;
use FindBin;
use lib $FindBin::Bin;
use Util;
my %CONFIGS = (
no_aot => {
label => "Exclude WAMR AOT array",
regions => [ [ '_wamr_aot_start', '_wamr_aot_end' ] ],
},
no_mmap => {
label => "Exclude WAMR mmap",
regions => [ [ '_wamr_mmap_start', '_wamr_mmap_end' ] ],
},
no_runtime_pool => {
label => "Exclude WAMR runtime pool",
regions => [ [ '_wamr_runtime_pool_start', '_wamr_runtime_pool_end' ] ],
},
no_linear_pool => {
label => "Exclude WAMR linear pool",
regions => [ [ '_wamr_linear_pool_start', '_wamr_linear_pool_end' ] ],
},
no_global_heap => {
label => "Exclude WAMR global heap",
regions => [ [ '_wamr_global_heap_start', '_wamr_global_heap_end' ] ],
},
);
# Those will be executed automatically by runner.pl (+ no filter at all)
my @DEFAULT_CONFIGS = ('no_aot');
sub get_configs {
return \%CONFIGS;
}
sub get_default_configs {
return @DEFAULT_CONFIGS;
}
sub build_filter_clause {
my ( $experiment_dir, $config_name ) = @_;
return "" unless defined $config_name && length($config_name) > 0;
my $regions = $CONFIGS{$config_name}{regions};
return "" unless defined $regions;
return ""
unless defined $experiment_dir && -f "$experiment_dir/system.elf";
my @filters;
for my $pair (@$regions) {
my ( $start_sym, $end_sym ) = @$pair;
my $start =
Util::elf_sym_addr( "$experiment_dir/system.elf", $start_sym );
my $end = Util::elf_sym_addr( "$experiment_dir/system.elf", $end_sym );
next unless defined $start && defined $end && $end > $start;
push @filters,
"p.injection_instr_absolute NOT BETWEEN $start AND @{[$end - 1]}";
}
return "" unless @filters;
return "\nAND " . join( "\nAND ", @filters );
}
1;

View File

@ -126,7 +126,9 @@ sub find_subdirs {
}
sub execute_query {
my ( $experiment, $queryname, $db_conf, $builds_dir, $do_notify_file ) = @_;
my ( $experiment, $queryname, $db_conf, $builds_dir, $do_notify_file,
$filter_config_name )
= @_;
my $module = "Queries::$queryname";
my $file = "$module.pm";
@ -140,9 +142,10 @@ sub execute_query {
my $postprocess = $module->can('postprocess')
or die "$module can't postprocess()";
my $querystring = $query->($experiment, "$builds_dir/$experiment");
my $querystring =
$query->( $experiment, "$builds_dir/$experiment", $filter_config_name );
my $argsstring = $args->();
my $filenamestring = $filename->();
my $filenamestring = $filename->($filter_config_name);
# TODO: Pass the values instead of rewriting db.conf.
# Can also use DBI's database handle directly.