Add FIH testing tool
Signed-off-by: Raef Coles <raef.coles@arm.com>
Change-Id: Ia05829e1b413206d83794209642080d1a937d092
diff --git a/fih_test_tool/gdb-tool/faults/__init__.py b/fih_test_tool/gdb-tool/faults/__init__.py
new file mode 100644
index 0000000..eeac3c3
--- /dev/null
+++ b/fih_test_tool/gdb-tool/faults/__init__.py
@@ -0,0 +1,15 @@
+# Copyright (c) 2021, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+from .skip import skip_fault
+from .register import register_fault
+
+fault_types = [
+ [register_fault(reg="r" + str(x)) for x in range(16)],
+ [register_fault(reg="r" + str(x), val=0) for x in range(16)],
+ [skip_fault(size=x * 2) for x in range(8)],
+ ]
+
+# Flatten the list
+fault_types = sum(fault_types, [])
diff --git a/fih_test_tool/gdb-tool/faults/register.py b/fih_test_tool/gdb-tool/faults/register.py
new file mode 100644
index 0000000..b3d0ab0
--- /dev/null
+++ b/fih_test_tool/gdb-tool/faults/register.py
@@ -0,0 +1,32 @@
+# Copyright (c) 2021, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+import gdb
+import random
+
+class register_fault():
+ def __init__(self, reg=None,
+ val=None):
+ if reg is None:
+ self.reg = "r" + str(random.randint(0, 16))
+ else:
+ self.reg = reg
+
+ if val is None:
+ self.val = random.randint(0, 0xFFFFFFFF - 1)
+ else:
+ self.val = val
+
+ def execute(self):
+ gdb.execute('set ${} = {}'.format(self.reg, self.val))
+
+ def __repr__(self):
+ return "Register Fault: set {} to {}".format(self.reg, hex(self.val))
+
+ def as_json(self):
+ return {
+ 'type': 'register',
+ 'reg': self.reg,
+ 'val': hex(self.val),
+ }
diff --git a/fih_test_tool/gdb-tool/faults/skip.py b/fih_test_tool/gdb-tool/faults/skip.py
new file mode 100644
index 0000000..c594a5e
--- /dev/null
+++ b/fih_test_tool/gdb-tool/faults/skip.py
@@ -0,0 +1,25 @@
+# Copyright (c) 2021, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+import gdb
+import random
+
+class skip_fault():
+ def __init__(self, size=None):
+ if size is None:
+ self.size = random.randint(1, 6) * 2
+ else:
+ self.size = size
+
+ def execute(self):
+ gdb.execute('set $pc += {}'.format(self.size))
+
+ def __repr__(self):
+ return "Skip Fault: pc += {}".format(self.size)
+
+ def as_json(self):
+ return {
+ 'type': 'skip',
+ 'size': self.size,
+ }