]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: sandbox: implement exception command
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 11 Nov 2020 23:29:57 +0000 (00:29 +0100)
committerSimon Glass <sjg@chromium.org>
Sun, 13 Dec 2020 14:58:17 +0000 (07:58 -0700)
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 <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/Kconfig
cmd/Makefile
cmd/sandbox/Makefile [new file with mode: 0644]
cmd/sandbox/exception.c [new file with mode: 0644]

index 98cf543ead00c3a2f6d05464b9881a854d138b7c..c853ce761e01a52f8062550d70789125f3dbc0bf 100644 (file)
@@ -1691,7 +1691,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.
 
index dd86675bf2ace43eff73622be2f25b67d8ee283e..5b3400a8403c17829418e7fb169e8a1aa70fac5a 100644 (file)
@@ -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 (file)
index 0000000..24df023
--- /dev/null
@@ -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 (file)
index 0000000..1aa1d67
--- /dev/null
@@ -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 <xypron.glpk@gmx.de>
+ */
+
+#include <common.h>
+#include <command.h>
+
+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 0xffff\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[] =
+       "<ex>\n"
+       "  The following exceptions are available:\n"
+       "  undefined  - undefined instruction\n"
+       "  sigsegv    - illegal memory access\n"
+       ;
+
+#include <exception.h>