display corresponding segment for markers in explorer

This commit is contained in:
2026-04-23 18:41:58 +02:00
parent 551335bf53
commit 92f656220f
3 changed files with 59 additions and 18 deletions

View File

@ -139,4 +139,52 @@ sub execute_query {
return $result;
}
sub format_number_sep {
my ($number) = @_;
1 while $number =~ s/^(-?\d+)(\d{3})/$1.$2/;
return $number;
}
sub elf_read_sections {
my ($elffile) = @_;
my $readelf_out = qx{readelf -S $elffile};
my @lines = split "\n", $readelf_out;
my @sections;
foreach my $line (@lines) {
# [ 1] .text PROGBITS 00100000 001000 0000f0 00 AX 0 0 4
next
unless $line =~
/^\s*\[\s*\d+\]\s+(\..+?)\s+([A-Z]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+.*$/;
push @sections, {
name => $1,
type => $2,
address => $3, # Memory location
offset => $4, # File location
size => $5,
};
}
return @sections;
}
sub get_section_name {
my ( $address, @sections ) = @_;
my $name;
my $last_address = 0;
foreach my $section (@sections) {
my $cur_address = hex( $section->{address} );
if ( hex($address) >= $cur_address && $cur_address > $last_address ) {
$name = $section->{name};
$last_address = $cur_address;
}
}
return $name;
}
1;

View File

@ -86,11 +86,8 @@ sub load_faults_csv {
headers => 'auto'
);
sub format_number_sep {
my ($number) = @_;
1 while $number =~ s/^(-?\d+)(\d{3})/$1.$2/;
return $number;
}
my @sections = Util::elf_read_sections(
"$local_archive_dir/$selected_experiment/system.elf");
# Result:
# [ { benchmark => "ip", resulttype => "OK_MARKER",
@ -101,9 +98,12 @@ sub load_faults_csv {
%marker_labels =
map {
$_ => sprintf(
"%5s %10s %20s %15sx",
$_->{benchmark}, $_->{fault_address},
$_->{resulttype}, format_number_sep( $_->{faults} ),
"%5s %10s %10s %20s %15sx",
$_->{benchmark},
$_->{fault_address},
Util::get_section_name( $_->{fault_address}, @sections ),
$_->{resulttype},
Util::format_number_sep( $_->{faults} ),
);
} @marker_values;
}
@ -379,8 +379,8 @@ sub layout_resize {
my $w = $win->width();
my $h = $win->height();
my $w1 = int( $w * 0.2 );
my $w2 = int( $w * 0.4 );
my $w1 = int( $w * 0.3 );
my $w2 = int( $w * 0.3 );
my $w3 = int( $w - $w1 - $w2 );
set_geometry( $left, 0, 1, $w1, $h - 2 );

View File

@ -275,13 +275,6 @@ my %handlers = (
}
}
# TODO: To util function
sub format_number_sep {
my ($number) = @_;
1 while $number =~ s/^(-?\d+)(\d{3})/$1.$2/;
return $number;
}
my @benchs = ( 'ip', 'mem', 'regs' );
my @markers = (
'OK_MARKER', 'FAIL_MARKER',
@ -305,7 +298,7 @@ my %handlers = (
{
$entry .= sprintf(
"%50s ",
format_number_sep(
Util::format_number_sep(
$all_results{$experiment}{$benchmark}{$marker}
)
);