Combine query filters instead of combining them
This commit is contained in:
@@ -140,12 +140,11 @@ sub get_default_configs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub build_filter_clause {
|
sub build_filter_clause {
|
||||||
my ( $experiment_dir, $config_name ) = @_;
|
my ( $experiment_dir, @config_names ) = @_;
|
||||||
|
|
||||||
return "" unless defined $config_name && length($config_name) > 0;
|
# Drop empty ones, rest is combined
|
||||||
|
@config_names = grep { defined && length } @config_names;
|
||||||
my $regions = $CONFIGS{$config_name}{regions};
|
return "" unless @config_names;
|
||||||
return "" unless defined $regions;
|
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
unless defined $experiment_dir && -f "$experiment_dir/system.elf";
|
unless defined $experiment_dir && -f "$experiment_dir/system.elf";
|
||||||
@@ -153,17 +152,21 @@ sub build_filter_clause {
|
|||||||
my $elf = "$experiment_dir/system.elf";
|
my $elf = "$experiment_dir/system.elf";
|
||||||
|
|
||||||
my @filters;
|
my @filters;
|
||||||
|
for my $config_name (@config_names) {
|
||||||
|
my $regions = $CONFIGS{$config_name}{regions};
|
||||||
|
next unless defined $regions;
|
||||||
|
|
||||||
for my $region (@$regions) {
|
for my $region (@$regions) {
|
||||||
my ( $start, $end, $col );
|
my ( $start, $end, $col );
|
||||||
|
|
||||||
if ( ref($region) eq 'HASH' ) {
|
if ( ref($region) eq 'HASH' ) {
|
||||||
|
|
||||||
# Single-function form: resolve [start, end) via symbol + size.
|
# resolve [start, end) via symbol + size
|
||||||
$col = $region->{col};
|
$col = $region->{col};
|
||||||
( $start, $end ) = Util::elf_sym_range( $elf, $region->{func} );
|
( $start, $end ) = Util::elf_sym_range( $elf, $region->{func} );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# Linker-range form: [start_sym, end_sym, col].
|
# [start_sym, end_sym, col]
|
||||||
my ( $start_sym, $end_sym );
|
my ( $start_sym, $end_sym );
|
||||||
( $start_sym, $end_sym, $col ) = @$region;
|
( $start_sym, $end_sym, $col ) = @$region;
|
||||||
$start = Util::elf_sym_addr( $elf, $start_sym );
|
$start = Util::elf_sym_addr( $elf, $start_sym );
|
||||||
@@ -173,6 +176,7 @@ sub build_filter_clause {
|
|||||||
next unless defined $start && defined $end && $end > $start;
|
next unless defined $start && defined $end && $end > $start;
|
||||||
push @filters, "$col NOT BETWEEN $start AND @{[$end - 1]}";
|
push @filters, "$col NOT BETWEEN $start AND @{[$end - 1]}";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "" unless @filters;
|
return "" unless @filters;
|
||||||
return "\nAND " . join( "\nAND ", @filters );
|
return "\nAND " . join( "\nAND ", @filters );
|
||||||
|
|||||||
Reference in New Issue
Block a user