diff mbox series

Fix breakpoint support in Nios II user-mode emulation.

Message ID 1550076626-7202-1-git-send-email-sandra@codesourcery.com (mailing list archive)
State New, archived
Headers show
Series Fix breakpoint support in Nios II user-mode emulation. | expand

Commit Message

Sandra Loosemore Feb. 13, 2019, 4:50 p.m. UTC
Nios II user-mode emulation was missing handling for EXCP_DEBUG,
making the gdb stub essentially useless.  This patch adds the missing
piece.  The new code was copied from the existing EXCP_TRAP handling
and is also similar to what other targets (e.g., arm) do with EXCP_DEBUG.

Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
---
 linux-user/nios2/cpu_loop.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Laurent Vivier Feb. 13, 2019, 8:46 p.m. UTC | #1
CC'ing NiosII Maintainers

On 13/02/2019 17:50, Sandra Loosemore wrote:
> Nios II user-mode emulation was missing handling for EXCP_DEBUG,
> making the gdb stub essentially useless.  This patch adds the missing
> piece.  The new code was copied from the existing EXCP_TRAP handling
> and is also similar to what other targets (e.g., arm) do with EXCP_DEBUG.
> 
> Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
> ---
>  linux-user/nios2/cpu_loop.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c
> index b96b1aa..5aa1eca 100644
> --- a/linux-user/nios2/cpu_loop.c
> +++ b/linux-user/nios2/cpu_loop.c
> @@ -73,6 +73,12 @@ void cpu_loop(CPUNios2State *env)
>                  queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
>                  break;
>              }
> +        case EXCP_DEBUG:
> +            info.si_signo = TARGET_SIGTRAP;
> +            info.si_errno = 0;
> +            info.si_code = TARGET_TRAP_BRKPT;
> +            queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
> +            break;
>          case 0xaa:
>              switch (env->regs[R_PC]) {
>              /*case 0x1000:*/  /* TODO:__kuser_helper_version */
>
Sandra Loosemore Feb. 25, 2019, 5:05 a.m. UTC | #2
Ping?

http://lists.nongnu.org/archive/html/qemu-devel/2019-02/msg03483.html

-Sandra
Peter Maydell Feb. 25, 2019, 9:10 a.m. UTC | #3
On Wed, 13 Feb 2019 at 17:19, Sandra Loosemore <sandra@codesourcery.com> wrote:
>
> Nios II user-mode emulation was missing handling for EXCP_DEBUG,
> making the gdb stub essentially useless.  This patch adds the missing
> piece.  The new code was copied from the existing EXCP_TRAP handling
> and is also similar to what other targets (e.g., arm) do with EXCP_DEBUG.
>
> Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
> ---
>  linux-user/nios2/cpu_loop.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c
> index b96b1aa..5aa1eca 100644
> --- a/linux-user/nios2/cpu_loop.c
> +++ b/linux-user/nios2/cpu_loop.c
> @@ -73,6 +73,12 @@ void cpu_loop(CPUNios2State *env)
>                  queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
>                  break;
>              }
> +        case EXCP_DEBUG:
> +            info.si_signo = TARGET_SIGTRAP;
> +            info.si_errno = 0;
> +            info.si_code = TARGET_TRAP_BRKPT;
> +            queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
> +            break;
>          case 0xaa:
>              switch (env->regs[R_PC]) {
>              /*case 0x1000:*/  /* TODO:__kuser_helper_version */

I don't know NiosII at all, but a quick check of the kernel
sources suggests this is correct, so

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM
Laurent Vivier Feb. 25, 2019, 10:14 a.m. UTC | #4
On 13/02/2019 17:50, Sandra Loosemore wrote:
> Nios II user-mode emulation was missing handling for EXCP_DEBUG,
> making the gdb stub essentially useless.  This patch adds the missing
> piece.  The new code was copied from the existing EXCP_TRAP handling
> and is also similar to what other targets (e.g., arm) do with EXCP_DEBUG.
> 
> Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
> ---
>   linux-user/nios2/cpu_loop.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c
> index b96b1aa..5aa1eca 100644
> --- a/linux-user/nios2/cpu_loop.c
> +++ b/linux-user/nios2/cpu_loop.c
> @@ -73,6 +73,12 @@ void cpu_loop(CPUNios2State *env)
>                   queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
>                   break;
>               }
> +        case EXCP_DEBUG:
> +            info.si_signo = TARGET_SIGTRAP;
> +            info.si_errno = 0;
> +            info.si_code = TARGET_TRAP_BRKPT;
> +            queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
> +            break;
>           case 0xaa:
>               switch (env->regs[R_PC]) {
>               /*case 0x1000:*/  /* TODO:__kuser_helper_version */
> 

Applied to my linux-user branch.

Thanks,
Laurent
diff mbox series

Patch

diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c
index b96b1aa..5aa1eca 100644
--- a/linux-user/nios2/cpu_loop.c
+++ b/linux-user/nios2/cpu_loop.c
@@ -73,6 +73,12 @@  void cpu_loop(CPUNios2State *env)
                 queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
                 break;
             }
+        case EXCP_DEBUG:
+            info.si_signo = TARGET_SIGTRAP;
+            info.si_errno = 0;
+            info.si_code = TARGET_TRAP_BRKPT;
+            queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
+            break;
         case 0xaa:
             switch (env->regs[R_PC]) {
             /*case 0x1000:*/  /* TODO:__kuser_helper_version */