Combine query filters instead of combining them

This commit is contained in:
2026-08-05 19:20:31 +02:00
parent 54c28d703a
commit 84babe540d
+25 -21
View File
@@ -140,12 +140,11 @@ sub get_default_configs {
}
sub build_filter_clause {
my ( $experiment_dir, $config_name ) = @_;
my ( $experiment_dir, @config_names ) = @_;
return "" unless defined $config_name && length($config_name) > 0;
my $regions = $CONFIGS{$config_name}{regions};
return "" unless defined $regions;
# Drop empty ones, rest is combined
@config_names = grep { defined && length } @config_names;
return "" unless @config_names;
return ""
unless defined $experiment_dir && -f "$experiment_dir/system.elf";
@@ -153,25 +152,30 @@ sub build_filter_clause {
my $elf = "$experiment_dir/system.elf";
my @filters;
for my $region (@$regions) {
my ( $start, $end, $col );
for my $config_name (@config_names) {
my $regions = $CONFIGS{$config_name}{regions};
next unless defined $regions;
if ( ref($region) eq 'HASH' ) {
for my $region (@$regions) {
my ( $start, $end, $col );
# Single-function form: resolve [start, end) via symbol + size.
$col = $region->{col};
( $start, $end ) = Util::elf_sym_range( $elf, $region->{func} );
if ( ref($region) eq 'HASH' ) {
# resolve [start, end) via symbol + size
$col = $region->{col};
( $start, $end ) = Util::elf_sym_range( $elf, $region->{func} );
}
else {
# [start_sym, end_sym, col]
my ( $start_sym, $end_sym );
( $start_sym, $end_sym, $col ) = @$region;
$start = Util::elf_sym_addr( $elf, $start_sym );
$end = Util::elf_sym_addr( $elf, $end_sym );
}
next unless defined $start && defined $end && $end > $start;
push @filters, "$col NOT BETWEEN $start AND @{[$end - 1]}";
}
else {
# Linker-range form: [start_sym, end_sym, col].
my ( $start_sym, $end_sym );
( $start_sym, $end_sym, $col ) = @$region;
$start = Util::elf_sym_addr( $elf, $start_sym );
$end = Util::elf_sym_addr( $elf, $end_sym );
}
next unless defined $start && defined $end && $end > $start;
push @filters, "$col NOT BETWEEN $start AND @{[$end - 1]}";
}
return "" unless @filters;