[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