[PATCH v2] cmd: exception: unaligned data access on RISC-V
Heinrich Schuchardt
xypron.glpk at gmx.de
Fri Aug 7 11:39:59 CEST 2020
On 07.08.20 10:33, Rick Chen wrote:
>> From: Heinrich Schuchardt [mailto:xypron.glpk at gmx.de]
>> Sent: Thursday, August 06, 2020 6:35 PM
>> To: Rick Jian-Zhi Chen(陳建志)
>> Cc: u-boot at 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 at 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 at 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
More information about the U-Boot
mailing list