Fix signal code reporting (#6554)

Signed-off-by: Artur Bieniek <abieniek@internships.antmicro.com>
This commit is contained in:
Artur Bieniek 2025-10-14 13:04:53 +02:00 committed by GitHub
parent eb53bca6fd
commit cefcf836fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 13 deletions

View File

@ -240,17 +240,18 @@ sub run {
warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n"; warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n";
warn "%Error: $command\n"; warn "%Error: $command\n";
} }
if ($status & 127) { my $signal = ($status & 127);
if (($status & 127) == 4 # SIGILL if ($signal) {
|| ($status & 127) == 8 # SIGFPA if ($signal == 4 # SIGILL
|| ($status & 127) == 11) { # SIGSEGV || $signal == 8 # SIGFPA
|| $signal == 11) { # SIGSEGV
warn "%Error: Verilator internal fault, sorry. " warn "%Error: Verilator internal fault, sorry. "
. "Suggest trying --debug --gdbbt\n" if !$Debug; . "Suggest trying --debug --gdbbt\n" if !$Debug;
} elsif (($status & 127) == 6) { # SIGABRT } elsif ($signal == 6) { # SIGABRT
warn "%Error: Verilator aborted. " warn "%Error: Verilator aborted. "
. "Suggest trying --debug --gdbbt\n" if !$Debug; . "Suggest trying --debug --gdbbt\n" if !$Debug;
} else { } else {
warn "%Error: Verilator threw signal $status. " warn "%Error: Verilator threw signal $signal. "
. "Suggest trying --debug --gdbbt\n" if !$Debug; . "Suggest trying --debug --gdbbt\n" if !$Debug;
} }
} }
@ -259,7 +260,7 @@ sub run {
} }
exit $! if $!; # errno exit $! if $!; # errno
exit $? >> 8 if $? >> 8; # pass along child exit code exit $? >> 8 if $? >> 8; # pass along child exit code
exit 128 + ($status & 127); # last resort exit 128 + $signal; # last resort
} }
} }

View File

@ -118,21 +118,24 @@ sub run {
warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n"; warn "%Error: export VERILATOR_ROOT=" . ($ENV{VERILATOR_ROOT} || "") . "\n";
warn "%Error: $command\n"; warn "%Error: $command\n";
} }
if ($status & 127) { my $signal = ($status & 127);
if (($status & 127) == 8 || ($status & 127) == 11) { # SIGFPA or SIGSEGV if ($signal) {
if ($signal == 4 # SIGILL
|| $signal == 8 # SIGFPA
|| $signal == 11) { # SIGSEGV
warn "%Error: Verilator_coverage internal fault, sorry.\n" if !$Debug; warn "%Error: Verilator_coverage internal fault, sorry.\n" if !$Debug;
} elsif (($status & 127) == 6) { # SIGABRT } elsif ($signal == 6) { # SIGABRT
warn "%Error: Verilator_coverage aborted.\n" if !$Debug; warn "%Error: Verilator_coverage aborted.\n" if !$Debug;
} else { } else {
warn "%Error: Verilator_coverage threw signal $status.\n" if !$Debug; warn "%Error: Verilator_coverage threw signal $signal.\n" if !$Debug;
} }
} }
if ($status != 256 || $Debug) { # i.e. not normal exit(1) if ($status != 256 || $Debug) { # i.e. not normal exit(1)
warn "%Error: Command Failed $command\n"; warn "%Error: Command Failed $command\n";
} }
exit $! if $!; # errno exit $! if $!; # errno
exit $? >> 8 if $? >> 8; # child exit status exit $? >> 8 if $? >> 8; # pass along child exit code
exit 255; # last resort exit 128 + $signal; # last resort
} }
} }