psasim: add support for PSA functions that return uint32_t or void
Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com>
diff --git a/tests/psa-client-server/psasim/src/psa_sim_generate.pl b/tests/psa-client-server/psasim/src/psa_sim_generate.pl
index 1c27487..dfbced1 100755
--- a/tests/psa-client-server/psasim/src/psa_sim_generate.pl
+++ b/tests/psa-client-server/psasim/src/psa_sim_generate.pl
@@ -529,6 +529,9 @@
uint8_t *in_params, size_t in_params_len,
uint8_t **out_params, size_t *out_params_len)
{
+EOF
+
+ print $fh <<EOF unless $ret_name eq "(void)";
$ret_type $ret_name = $ret_default;
EOF
# Output the variables we will need when we call the target function
@@ -775,6 +778,8 @@
uint8_t *ser_params = NULL;
uint8_t *ser_result = NULL;
size_t result_length;
+EOF
+ print $fh <<EOF unless $ret_type eq "void";
$ret_type $ret_name = $ret_default;
EOF
@@ -802,11 +807,27 @@
EOF
}
+ print $fh <<EOF if $#$args < 0;
+ 0;
+EOF
+
print $fh <<EOF;
ser_params = malloc(needed);
if (ser_params == NULL) {
- status = PSA_ERROR_INSUFFICIENT_MEMORY;
+EOF
+
+ if ($ret_type eq "psa_status_t") {
+ print $fh <<EOF if $;
+ $ret_name = PSA_ERROR_INSUFFICIENT_MEMORY;
+EOF
+ } elsif ($ret_type eq "uint32_t") {
+ print $fh <<EOF if $;
+ $ret_name = 0;
+EOF
+ }
+
+ print $fh <<EOF;
goto fail;
}
@@ -869,7 +890,7 @@
}
EOF
- print $fh <<EOF;
+ print $fh <<EOF if $ret_type ne "void";
ok = psasim_deserialise_$ret_type(&rpos, &rremain, &$ret_name);
if (!ok) {
@@ -916,8 +937,14 @@
fail:
free(ser_params);
free(ser_result);
+EOF
+
+ print $fh <<EOF if $ret_type ne "void";
return $ret_name;
+EOF
+
+ print $fh <<EOF;
}
EOF
}
@@ -943,7 +970,11 @@
my $ret_name = $f->{return}->{name};
my $args = $f->{args};
- print $fh "\n $ret_name = $name(\n";
+ if ($ret_name eq "(void)") {
+ print $fh "\n $name(\n";
+ } else {
+ print $fh "\n $ret_name = $name(\n";
+ }
print $fh " );\n" if $#$args < 0; # If no arguments, empty arg list
@@ -1025,7 +1056,7 @@
my %funcs = ();
for (my $i = 0; $i <= $#src; $i++) {
my $line = $src[$i];
- if ($line =~ /^psa_status_t (psa_\w*)\(/) { # begin function definition
+ if ($line =~ /^(psa_status_t|uint32_t|void) (psa_\w*)\(/) { # begin function definition
#print "have one $line\n";
while ($line !~ /;/) {
$line .= $src[$i + 1];
@@ -1044,9 +1075,13 @@
my $ret_name = "";
$ret_name = "status" if $ret_type eq "psa_status_t";
+ $ret_name = "value" if $ret_type eq "uint32_t";
+ $ret_name = "(void)" if $ret_type eq "void";
die("ret_name for $ret_type?") unless length($ret_name);
my $ret_default = "";
$ret_default = "PSA_ERROR_CORRUPTION_DETECTED" if $ret_type eq "psa_status_t";
+ $ret_default = "0" if $ret_type eq "uint32_t";
+ $ret_default = "(void)" if $ret_type eq "void";
die("ret_default for $ret_type?") unless length($ret_default);
#print "FUNC $func RET_NAME $ret_name RET_TYPE $ret_type ARGS (", join("; ", @args), ")\n";