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

Rick Chen rickchen36 at gmail.com
Fri Aug 7 12:41:24 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?

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
>


More information about the U-Boot mailing list