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,14 +1297,19 @@ int cpu_signal_handler(int host_signum, void *pinfo,
1297 void *puc) 1297 void *puc)
1298 { 1298 {
1299 siginfo_t *info = pinfo; 1299 siginfo_t *info = pinfo;
1300 - uint32_t *regs = (uint32_t *)(info + 1);  
1301 - void *sigmask = (regs + 20);  
1302 - unsigned long pc;  
1303 int is_write; 1300 int is_write;
1304 uint32_t insn; 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 /* XXX: is there a standard glibc define ? */ 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 /* XXX: need kernel patch to get write flag faster */ 1313 /* XXX: need kernel patch to get write flag faster */
1309 is_write = 0; 1314 is_write = 0;
1310 insn = *(uint32_t *)pc; 1315 insn = *(uint32_t *)pc;