-----BEGIN PGP SIGNATURE-----

iQIcBAABAgAGBQJa0x9XAAoJEPMMOL0/L748nEgQAKzn+70LB/2QawU3aybW8L+k
 AZO8HpRhOVL5WF6hrybJ8220nJL2tlj+sR4TgJX802FxhoejZslyCf842xVCY26g
 wEmIbz+c7oaNre9htGEIcMOOMF3GtMd0zqVNFSvbhy5iXzQKOW2DYcMVEvQgpRPp
 7mRwtXTls713TCI4KcUSwvswuTFI9WJIFqdTP1E/7yjkIwf4DlkrF9E/v8hnLa9h
 BsmQ2uBtAD7Cu+byJjdOa4v1iapWQoWgEzLRqwOo1X1tEzoInC6+z7iz5neAbF9j
 A0Q/TAbnsB14AXz4bZBmotCjoeWFfyw07GkMVjl230Q4W61nSvjvkLRCSwN2Wety
 U1n1Zz8/IYfsCdjv/pfDeBIWkDyGZlcxspaXhYlTv6DVyV7q3Nw0orjKHSiIJY4c
 Sgcwp02cwReXYSJugQs7V68eRMFAz3kAq+iPLXya5MjasZOwCY1BBIFDUI3ZBRST
 0VZeYZ4VnmY6baaw58gxdiDbTHsqidqkL82dfrmScwpEbR2+5v85spN8oxyNcIp3
 NNSUZmBdsYjb1iAt4ntNZYUulrMm6o5y3227aXAeCu6ojfhUOKFaK07YuI99AFgK
 U+1SBbpqEXP0oaoZLELWcdD+x7zET6RWc1XocFD4+jW27qr5fhRQOpnvo626nKcX
 zKngDQTONXC/e1h2FsNz
 =eEOw
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/vivier/tags/m68k-for-2.12-pull-request' into staging

# gpg: Signature made Sun 15 Apr 2018 10:45:59 BST
# gpg:                using RSA key F30C38BD3F2FBE3C
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>"
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>"
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>"
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier/tags/m68k-for-2.12-pull-request:
  m68k: fix exception stack frame for 68000

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2018-04-16 10:11:17 +01:00
commit ae2b1b4e1b
1 changed files with 18 additions and 15 deletions

View File

@ -287,22 +287,25 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
uint16_t format, uint16_t sr,
uint32_t addr, uint32_t retaddr)
{
CPUState *cs = CPU(m68k_env_get_cpu(env));
switch (format) {
case 4:
*sp -= 4;
cpu_stl_kernel(env, *sp, env->pc);
*sp -= 4;
cpu_stl_kernel(env, *sp, addr);
break;
case 3:
case 2:
*sp -= 4;
cpu_stl_kernel(env, *sp, addr);
break;
if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) {
/* all except 68000 */
CPUState *cs = CPU(m68k_env_get_cpu(env));
switch (format) {
case 4:
*sp -= 4;
cpu_stl_kernel(env, *sp, env->pc);
*sp -= 4;
cpu_stl_kernel(env, *sp, addr);
break;
case 3:
case 2:
*sp -= 4;
cpu_stl_kernel(env, *sp, addr);
break;
}
*sp -= 2;
cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
}
*sp -= 2;
cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
*sp -= 4;
cpu_stl_kernel(env, *sp, retaddr);
*sp -= 2;