diff mbox series

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

Message ID 20200806103459.9263-1-xypron.glpk@gmx.de
State Accepted, archived
Commit db3585d181221dd025fcdece9d56b02da63cfe96
Headers show
Series [v2] cmd: exception: unaligned data access on RISC-V | expand

Commit Message

Heinrich Schuchardt Aug. 6, 2020, 10:34 a.m. UTC
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(-)

--
2.27.0

Comments

Rick Chen Aug. 7, 2020, 8:33 a.m. UTC | #1
> 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
Heinrich Schuchardt Aug. 7, 2020, 9:39 a.m. UTC | #2
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
Rick Chen Aug. 7, 2020, 10:41 a.m. UTC | #3
> 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
>
diff mbox series

Patch

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>