Re: [PATCH v2] cmd: exception: unaligned data access on RISC-V

From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Thursday, August 06, 2020 6:35 PM To: Rick Jian-Zhi Chen(陳建志) Cc: u-boot@lists.denx.de; Leo Yu-Chi Liang(梁育齊); Heinrich Schuchardt Subject: [PATCH v2] 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
v2: If unaligned access is support, print success message.
cmd/riscv/exception.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
WARNING: Possible new command - make sure you add a test #142: FILE: cmd/riscv/exception.c:11:
Other than that, Reviewed-by: Rick Chen rick@andestech.com
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>
2.27.0

On 07.08.20 10:33, Rick Chen wrote:
From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Thursday, August 06, 2020 6:35 PM To: Rick Jian-Zhi Chen(陳建志) Cc: u-boot@lists.denx.de; Leo Yu-Chi Liang(梁育齊); Heinrich Schuchardt Subject: [PATCH v2] 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
v2: If unaligned access is support, print success message.
cmd/riscv/exception.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
WARNING: Possible new command - make sure you add a test #142: FILE: cmd/riscv/exception.c:11:
Other than that, Reviewed-by: Rick Chen rick@andestech.com
Do you want CONFIG_CMD_EXCEPTION to be enabled in one of the QEMU configs to make it testable on Gitlab CI?
As QEMU does not create exceptions for unaligned access only a test for the "exception undefined" command makes sense to me.
Patch "riscv: additional crash information" influences the output we see. So that patch should be merged before we add any test.
Best regards
Heinrich
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>
2.27.0

On 07.08.20 10:33, Rick Chen wrote:
From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Thursday, August 06, 2020 6:35 PM To: Rick Jian-Zhi Chen(陳建志) Cc: u-boot@lists.denx.de; Leo Yu-Chi Liang(梁育齊); Heinrich Schuchardt Subject: [PATCH v2] 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
v2: If unaligned access is support, print success message.
cmd/riscv/exception.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
WARNING: Possible new command - make sure you add a test #142: FILE: cmd/riscv/exception.c:11:
Other than that, Reviewed-by: Rick Chen rick@andestech.com
Do you want CONFIG_CMD_EXCEPTION to be enabled in one of the QEMU configs to make it testable on Gitlab CI?
No. Let's keep as it is.
As QEMU does not create exceptions for unaligned access only a test for the "exception undefined" command makes sense to me.
Patch "riscv: additional crash information" influences the output we see. So that patch should be merged before we add any test.
OK.
Thanks, Rick
Best regards
Heinrich
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>
2.27.0
participants (2)
-
Heinrich Schuchardt
-
Rick Chen