Changeset
target/m68k/op_helper.c |    7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
Git apply log
Switched to a new branch '20180413111245.28627.3415.stgit@pasha-VirtualBox'
Applying: m68: fix exception stack frame for 68000
To https://github.com/patchew-project/qemu
 * [new tag]         patchew/20180413111245.28627.3415.stgit@pasha-VirtualBox -> patchew/20180413111245.28627.3415.stgit@pasha-VirtualBox
Test passed: checkpatch

loading

Test passed: docker-mingw@fedora

loading

Test passed: docker-build@min-glib

loading

Test passed: s390x

loading

[Qemu-devel] [PATCH] m68: fix exception stack frame for 68000
Posted by Pavel Dovgalyuk, 13 weeks ago
68000 CPUs do not save format in the exception stack frame.
This patch adds feature checking to prevent format saving for 68000.
m68k_ret() already includes this modification, this patch fixes
the exception processing function too.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
---
 target/m68k/op_helper.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c
index 3a7f7f2..e367133 100644
--- a/target/m68k/op_helper.c
+++ b/target/m68k/op_helper.c
@@ -301,8 +301,11 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
         cpu_stl_kernel(env, *sp, addr);
         break;
     }
-    *sp -= 2;
-    cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
+    if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) {
+        /*  all except 68000 */
+        *sp -= 2;
+        cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
+    }
     *sp -= 4;
     cpu_stl_kernel(env, *sp, retaddr);
     *sp -= 2;


Re: [Qemu-devel] [PATCH] m68: fix exception stack frame for 68000
Posted by Laurent Vivier, 13 weeks ago
Le 13/04/2018 à 13:12, Pavel Dovgalyuk a écrit :
> 68000 CPUs do not save format in the exception stack frame.
> This patch adds feature checking to prevent format saving for 68000.
> m68k_ret() already includes this modification, this patch fixes
> the exception processing function too.
> 
> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
> ---
>  target/m68k/op_helper.c |    7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c
> index 3a7f7f2..e367133 100644
> --- a/target/m68k/op_helper.c
> +++ b/target/m68k/op_helper.c
> @@ -301,8 +301,11 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
>          cpu_stl_kernel(env, *sp, addr);
>          break;
>      }
> -    *sp -= 2;
> -    cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
> +    if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) {
> +        /*  all except 68000 */
> +        *sp -= 2;
> +        cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
> +    }
>      *sp -= 4;
>      cpu_stl_kernel(env, *sp, retaddr);
>      *sp -= 2;
> 

To be the exact counterpart of m68k_rte(), I think you should include
the "switch () { }" into the "if () { }".

Thanks,
Laurent

Re: [Qemu-devel] [PATCH] m68: fix exception stack frame for 68000
Posted by Pavel Dovgalyuk, 13 weeks ago
> From: Laurent Vivier [mailto:laurent@vivier.eu]
> Le 13/04/2018 à 13:12, Pavel Dovgalyuk a écrit :
> > 68000 CPUs do not save format in the exception stack frame.
> > This patch adds feature checking to prevent format saving for 68000.
> > m68k_ret() already includes this modification, this patch fixes
> > the exception processing function too.
> >
> > Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
> > ---
> >  target/m68k/op_helper.c |    7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c
> > index 3a7f7f2..e367133 100644
> > --- a/target/m68k/op_helper.c
> > +++ b/target/m68k/op_helper.c
> > @@ -301,8 +301,11 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
> >          cpu_stl_kernel(env, *sp, addr);
> >          break;
> >      }
> > -    *sp -= 2;
> > -    cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
> > +    if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) {
> > +        /*  all except 68000 */
> > +        *sp -= 2;
> > +        cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
> > +    }
> >      *sp -= 4;
> >      cpu_stl_kernel(env, *sp, retaddr);
> >      *sp -= 2;
> >
> 
> To be the exact counterpart of m68k_rte(), I think you should include
> the "switch () { }" into the "if () { }".

That's right, thank you.


Pavel Dovgalyuk