test(fuzz): Capability for random inputs
Adding model for random inputs to SMC calls using a
constraint mechanism with a multi tiered sanity
metric.
Change-Id: Ia750fa57359baa424f1af273ba24483ae7330c38
Signed-off-by: Mark Dykes <mark.dykes@arm.com>
diff --git a/smc_fuzz/script/gen_arg_struct_def.py b/smc_fuzz/script/gen_arg_struct_def.py
new file mode 100755
index 0000000..ce24679
--- /dev/null
+++ b/smc_fuzz/script/gen_arg_struct_def.py
@@ -0,0 +1,69 @@
+#
+# Copyright (c) 2025 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+def gen_arg_struct_def(asdname,argfieldname,arglst,argnumfield):
+ asdfile = open(asdname, "w")
+ hline = "/*\n"
+ hline += " * Copyright (c) 2024, Arm Limited. All rights reserved.\n"
+ hline += " *\n"
+ hline += " * SPDX-License-Identifier: BSD-3-Clause\n"
+ hline += " */\n"
+ hline += "\n"
+ hline += "#ifndef ARG_STRUCT_DEF_H\n"
+ hline += "#define ARG_STRUCT_DEF_H\n"
+ hline += "\n"
+ asdfile.write(hline)
+ smccount = 0
+ argcount = 0
+ for sn in argfieldname:
+ hline = "#define "
+ hline += sn
+ hline += " "
+ hline += str(smccount)
+ hline += "\n"
+ asdfile.write(hline)
+ smccount = smccount + 1
+ smccount = smccount - 1
+ hline = "#define MAX_SMC_CALLS "
+ hline += str(smccount)
+ hline += "\n"
+ asdfile.write(hline)
+ asdfile.write("\n")
+ for sn in arglst:
+ for an in arglst[sn]:
+ hline = "#define "
+ hline += sn
+ hline += "_ARG" + str(an) + " " + str(argcount)
+ hline += "\n"
+ asdfile.write(hline)
+ argcount = argcount + 1
+ argcount = argcount - 1
+ hline = "#define MAX_ARG_LENGTH "
+ hline += str(argcount)
+ hline += "\n\n"
+ asdfile.write(hline)
+ for sn in argnumfield:
+ for ag in argnumfield[sn]:
+ fieldcount = 0
+ for fn in argnumfield[sn][ag]:
+ hline = "#define " + sn + "_ARG" + str(argnumfield[sn][ag][fn]) + "_" + fn.upper() + "_CNT " + str(fieldcount)
+ hline += "\n"
+ asdfile.write(hline)
+ fieldcount = fieldcount + 1
+ fieldcount = 0
+ hline = "\n\n"
+ asdfile.write(hline)
+ for sn in argnumfield:
+ for ag in argnumfield[sn]:
+ for fn in argnumfield[sn][ag]:
+ hline = "#define " + sn + "_ARG" + str(argnumfield[sn][ag][fn]) + "_" + fn.upper() + " " + str(fieldcount)
+ hline += "\n"
+ asdfile.write(hline)
+ fieldcount = fieldcount + 1
+ hline = "\n#endif /* ARG_STRUCT_DEF_H */\n"
+ asdfile.write(hline)
+
+ asdfile.close()