Re: [PATCH 2/3] cmd: sandbox: implement exception command

2020-11-11 Thread Simon Glass
On Tue, 10 Nov 2020 at 16:09, Heinrich Schuchardt  wrote:
>
> Implement the commands
>
> * exception undefined - execute an illegal instruction
> * exception sigsegv - cause a segment violation
>
> Here is a possible output:
>
> => exception undefined
> Illegal instruction
> pc = 0x55eb8d0a7575, pc_reloc = 0x57575
> Resetting ...
>
> Signed-off-by: Heinrich Schuchardt 
> ---
>  cmd/Kconfig |  2 +-
>  cmd/Makefile|  1 +
>  cmd/sandbox/Makefile|  3 +++
>  cmd/sandbox/exception.c | 41 +
>  4 files changed, 46 insertions(+), 1 deletion(-)
>  create mode 100644 cmd/sandbox/Makefile
>  create mode 100644 cmd/sandbox/exception.c

Reviewed-by: Simon Glass 

But it does need a test


[PATCH 2/3] cmd: sandbox: implement exception command

2020-11-10 Thread Heinrich Schuchardt
Implement the commands

* exception undefined - execute an illegal instruction
* exception sigsegv - cause a segment violation

Here is a possible output:

=> exception undefined
Illegal instruction
pc = 0x55eb8d0a7575, pc_reloc = 0x57575
Resetting ...

Signed-off-by: Heinrich Schuchardt 
---
 cmd/Kconfig |  2 +-
 cmd/Makefile|  1 +
 cmd/sandbox/Makefile|  3 +++
 cmd/sandbox/exception.c | 41 +
 4 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 cmd/sandbox/Makefile
 create mode 100644 cmd/sandbox/exception.c

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 1595de999b..f9b72449c5 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1682,7 +1682,7 @@ config CMD_EFIDEBUG

 config CMD_EXCEPTION
bool "exception - raise exception"
-   depends on ARM || RISCV || X86
+   depends on ARM || RISCV || SANDBOX || X86
help
  Enable the 'exception' command which allows to raise an exception.

diff --git a/cmd/Makefile b/cmd/Makefile
index dd86675bf2..5b3400a840 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -193,6 +193,7 @@ obj-$(CONFIG_CMD_AVB) += avb.o

 obj-$(CONFIG_ARM) += arm/
 obj-$(CONFIG_RISCV) += riscv/
+obj-$(CONFIG_SANDBOX) += sandbox/
 obj-$(CONFIG_X86) += x86/

 obj-$(CONFIG_ARCH_MVEBU) += mvebu/
diff --git a/cmd/sandbox/Makefile b/cmd/sandbox/Makefile
new file mode 100644
index 00..24df023ece
--- /dev/null
+++ b/cmd/sandbox/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-$(CONFIG_CMD_EXCEPTION) += exception.o
diff --git a/cmd/sandbox/exception.c b/cmd/sandbox/exception.c
new file mode 100644
index 00..1aa1d673ae
--- /dev/null
+++ b/cmd/sandbox/exception.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * The 'exception' command can be used for testing exception handling.
+ *
+ * Copyright (c) 2020, Heinrich Schuchardt 
+ */
+
+#include 
+#include 
+
+static int do_sigsegv(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+   u8 *ptr = NULL;
+
+   *ptr = 0;
+   return CMD_RET_FAILURE;
+}
+
+static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc,
+   char *const argv[])
+{
+   asm volatile (".word 0x\n");
+   return CMD_RET_FAILURE;
+}
+
+static struct cmd_tbl cmd_sub[] = {
+   U_BOOT_CMD_MKENT(sigsegv, CONFIG_SYS_MAXARGS, 1, do_sigsegv,
+"", ""),
+   U_BOOT_CMD_MKENT(undefined, CONFIG_SYS_MAXARGS, 1, do_undefined,
+"", ""),
+};
+
+static char exception_help_text[] =
+   "\n"
+   "  The following exceptions are available:\n"
+   "  undefined  - undefined instruction\n"
+   "  sigsegv- illegal memory access\n"
+   ;
+
+#include 
--
2.28.0