diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-08-06 12:34:59 +0200 |
---|---|---|
committer | Andes <uboot@andestech.com> | 2020-08-14 14:39:34 +0800 |
commit | db3585d181221dd025fcdece9d56b02da63cfe96 (patch) | |
tree | 5ebe42ed72ac8f7ef6e2bfc83cce8862836105d8 /cmd/riscv | |
parent | 3a85e03f83e979e431e86c2d6394a5e4770dad1f (diff) | |
download | u-boot-db3585d181221dd025fcdece9d56b02da63cfe96.tar.gz |
cmd: exception: unaligned data access on RISC-V
The command 'exception' can be used to test the handling of exceptions.
Currently the exception command only allows to create an illegal
instruction exception on RISC-V.
Provide a sub-command 'exception unaligned' to cause a misaligned load
address exception.
Adjust the online help for 'exception undefined'.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Rick Chen <rick@andestech.com>
Diffstat (limited to 'cmd/riscv')
-rw-r--r-- | cmd/riscv/exception.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/cmd/riscv/exception.c b/cmd/riscv/exception.c index 3c8dbbec0e..9687cec812 100644 --- a/cmd/riscv/exception.c +++ b/cmd/riscv/exception.c @@ -8,6 +8,18 @@ #include <common.h> #include <command.h> +static int do_unaligned(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + asm volatile ( + "auipc a1, 0\n" + "ori a1, a1, 3\n" + "lw a2, (0)(a1)\n" + ); + printf("The system supports unaligned access.\n"); + return CMD_RET_SUCCESS; +} + static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { @@ -16,6 +28,8 @@ static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc, } static struct cmd_tbl cmd_sub[] = { + U_BOOT_CMD_MKENT(unaligned, CONFIG_SYS_MAXARGS, 1, do_unaligned, + "", ""), U_BOOT_CMD_MKENT(undefined, CONFIG_SYS_MAXARGS, 1, do_undefined, "", ""), }; @@ -23,7 +37,8 @@ static struct cmd_tbl cmd_sub[] = { static char exception_help_text[] = "<ex>\n" " The following exceptions are available:\n" - " undefined - undefined instruction\n" + " undefined - illegal instruction\n" + " unaligned - load address misaligned\n" ; #include <exception.h> |