Update faults filtering to be selectable from menu
This commit is contained in:
71
scripts/Modules/Filters.pm
Normal file
71
scripts/Modules/Filters.pm
Normal 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;
|
||||
Reference in New Issue
Block a user