From: Christoph Müllner Date: Tue, 31 Jan 2023 23:20:43 +0000 (+0100) Subject: riscv.pm: Add improved error messages to read_reg code X-Git-Tag: openssl-3.2.0-alpha1~1156 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac97cd6005878700653d8e50b6e7319728c523a1;p=thirdparty%2Fopenssl.git riscv.pm: Add improved error messages to read_reg code On systems where Devel::StackTrace is available, we can use this module to create more usable error messages. Further, don't print error messages in case of official register aliases, but simply accept them. Signed-off-by: Christoph Müllner Reviewed-by: Tomas Mraz Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/20078) --- diff --git a/crypto/perlasm/riscv.pm b/crypto/perlasm/riscv.pm index 384ac5f385b..6f862210ffe 100644 --- a/crypto/perlasm/riscv.pm +++ b/crypto/perlasm/riscv.pm @@ -9,20 +9,42 @@ use strict; use warnings; +# Set $have_stacktrace to 1 if we have Devel::StackTrace +my $have_stacktrace = 0; +if (eval {require Devel::StackTrace;1;}) { + $have_stacktrace = 1; +} + my @regs = map("x$_",(0..31)); +# Mapping from the RISC-V psABI ABI mnemonic names to the register number. +my @regaliases = ('zero','ra','sp','gp','tp','t0','t1','t2','s0','s1', + map("a$_",(0..7)), + map("s$_",(2..11)), + map("t$_",(3..6)) +); + my %reglookup; @reglookup{@regs} = @regs; +@reglookup{@regaliases} = @regs; # Takes a register name, possibly an alias, and converts it to a register index # from 0 to 31 sub read_reg { my $reg = lc shift; if (!exists($reglookup{$reg})) { - die("Unknown register ".$reg); + my $trace = ""; + if ($have_stacktrace) { + $trace = Devel::StackTrace->new->as_string; + } + die("Unknown register ".$reg."\n".$trace); } my $regstr = $reglookup{$reg}; if (!($regstr =~ /^x([0-9]+)$/)) { - die("Could not process register ".$reg); + my $trace = ""; + if ($have_stacktrace) { + $trace = Devel::StackTrace->new->as_string; + } + die("Could not process register ".$reg."\n".$trace); } return $1; }