On 07.08.20 10:33, Rick Chen wrote: >> From: Heinrich Schuchardt [mailto:xypron.g...@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.g...@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 <r...@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