From 4c0d6c9821007c9fe99a16ae9d5cb9fb78adcb17 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sat, 25 Jul 2026 15:30:18 +0200 Subject: [PATCH] Add mnemonics.csv query to count mnemonics --- scripts/Queries/Mnemonics.pm | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 scripts/Queries/Mnemonics.pm diff --git a/scripts/Queries/Mnemonics.pm b/scripts/Queries/Mnemonics.pm new file mode 100644 index 0000000..d68536c --- /dev/null +++ b/scripts/Queries/Mnemonics.pm @@ -0,0 +1,50 @@ +package Mnemonics; + +use strict; +use warnings; +use diagnostics; + +use FindBin; +use lib "$FindBin::Bin/../Modules"; +use Filters; + +use feature 'say'; + +sub query { + my ( $experiment, $experiment_dir, $filter_config_name ) = @_; + $filter_config_name //= ''; + + my $filters = + Filters::build_filter_clause( $experiment_dir, $filter_config_name ); + + my $querystring = "SELECT +CASE + WHEN o.disassemble IS NOT NULL AND SUBSTRING_INDEX(TRIM(o.disassemble), ' ', 1) REGEXP '^[a-zA-Z][a-zA-Z0-9 ]*\$' + THEN SUBSTRING_INDEX(TRIM(o.disassemble), ' ', 1) + ELSE NULL +END AS mnemonic, +COUNT(DISTINCT CONCAT(t.instr2, '_', t.data_physical_address)) AS count +FROM variant v +JOIN trace t ON v.id = t.variant_id +JOIN objdump o ON o.variant_id = v.id AND o.instr_address = t.instr2_absolute +WHERE v.variant = '$experiment'$filters +GROUP BY mnemonic +ORDER BY count DESC;"; + + say $querystring; + + return $querystring; +} + +sub args { return "--batch --raw"; } + +sub filename { + my ($filter_config_name) = @_; + $filter_config_name //= ''; + my $suffix = length($filter_config_name) ? "_$filter_config_name" : ""; + return "mnemonics${suffix}.csv"; +} + +sub postprocess { $_[0] =~ s/\t/,/g; } + +1;