Commit c9e1e2b0ac300d0c2abd6d1f38207b7749b40b49

Authored by blueswir1
1 parent 1f487ee9

Fix Sparc64 host signal handling

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4484 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 10 additions and 5 deletions
cpu-exec.c
... ... @@ -1297,14 +1297,19 @@ int cpu_signal_handler(int host_signum, void *pinfo,
1297 1297 void *puc)
1298 1298 {
1299 1299 siginfo_t *info = pinfo;
1300   - uint32_t *regs = (uint32_t *)(info + 1);
1301   - void *sigmask = (regs + 20);
1302   - unsigned long pc;
1303 1300 int is_write;
1304 1301 uint32_t insn;
1305   -
  1302 +#if !defined(__sparc_v9__) || defined(HOST_SOLARIS)
  1303 + uint32_t *regs = (uint32_t *)(info + 1);
  1304 + void *sigmask = (regs + 20);
1306 1305 /* XXX: is there a standard glibc define ? */
1307   - pc = regs[1];
  1306 + unsigned long pc = regs[1];
  1307 +#else
  1308 + struct sigcontext *sc = puc;
  1309 + unsigned long pc = sc->sigc_regs.tpc;
  1310 + void *sigmask = (void *)sc->sigc_mask;
  1311 +#endif
  1312 +
1308 1313 /* XXX: need kernel patch to get write flag faster */
1309 1314 is_write = 0;
1310 1315 insn = *(uint32_t *)pc;
... ...