/[qemu]/qemu/linux-user/signal.c
ViewVC logotype

Diff of /qemu/linux-user/signal.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.25 by bellard, Sun Dec 19 23:18:01 2004 UTC revision 1.26 by bellard, Mon Jan 3 23:31:27 2005 UTC
# Line 1272  badframe: Line 1272  badframe:
1272  }  }
1273    
1274  #elif defined(TARGET_SPARC)  #elif defined(TARGET_SPARC)
1275    
1276  #define __SUNOS_MAXWIN   31  #define __SUNOS_MAXWIN   31
1277    
1278  /* This is what SunOS does, so shall I. */  /* This is what SunOS does, so shall I. */
# Line 1400  setup___siginfo(__siginfo_t *si, CPUStat Line 1401  setup___siginfo(__siginfo_t *si, CPUStat
1401          return err;          return err;
1402  }  }
1403    
1404    #if 0
1405  static int  static int
1406  setup_sigcontext(struct target_sigcontext *sc, /*struct _fpstate *fpstate,*/  setup_sigcontext(struct target_sigcontext *sc, /*struct _fpstate *fpstate,*/
1407                   CPUState *env, unsigned long mask)                   CPUState *env, unsigned long mask)
# Line 1416  setup_sigcontext(struct target_sigcontex Line 1418  setup_sigcontext(struct target_sigcontex
1418    
1419          return err;          return err;
1420  }  }
1421    #endif
1422  #define NF_ALIGNEDSZ  (((sizeof(struct target_signal_frame) + 7) & (~7)))  #define NF_ALIGNEDSZ  (((sizeof(struct target_signal_frame) + 7) & (~7)))
1423    
1424  static void setup_frame(int sig, struct emulated_sigaction *ka,  static void setup_frame(int sig, struct emulated_sigaction *ka,
# Line 1483  static void setup_frame(int sig, struct Line 1486  static void setup_frame(int sig, struct
1486    
1487                  /* Flush instruction space. */                  /* Flush instruction space. */
1488                  //flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0]));                  //flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0]));
1489                  tb_flush(env);                  //              tb_flush(env);
1490          }          }
1491          //cpu_dump_state(env, stderr, fprintf, 0);          //cpu_dump_state(env, stderr, fprintf, 0);
1492          return;          return;
1493    
1494  sigill_and_return:          //sigill_and_return:
1495          force_sig(TARGET_SIGILL);          force_sig(TARGET_SIGILL);
1496  sigsegv:  sigsegv:
1497          //fprintf(stderr, "force_sig\n");          //fprintf(stderr, "force_sig\n");
# Line 1544  long do_sigreturn(CPUState *env) Line 1547  long do_sigreturn(CPUState *env)
1547          uint32_t up_psr, pc, npc;          uint32_t up_psr, pc, npc;
1548          target_sigset_t set;          target_sigset_t set;
1549          sigset_t host_set;          sigset_t host_set;
1550          __siginfo_fpu_t *fpu_save;          target_ulong fpu_save;
1551          int err, i;          int err, i;
1552    
1553          sf = (struct target_signal_frame *) env->regwptr[UREG_FP];          sf = (struct target_signal_frame *) env->regwptr[UREG_FP];
1554    #if 0
1555          fprintf(stderr, "sigreturn\n");          fprintf(stderr, "sigreturn\n");
1556          fprintf(stderr, "sf: %x pc %x fp %x sp %x\n", sf, env->pc, env->regwptr[UREG_FP], env->regwptr[UREG_SP]);          fprintf(stderr, "sf: %x pc %x fp %x sp %x\n", sf, env->pc, env->regwptr[UREG_FP], env->regwptr[UREG_SP]);
1557    #endif
1558          //cpu_dump_state(env, stderr, fprintf, 0);          //cpu_dump_state(env, stderr, fprintf, 0);
1559    
1560          /* 1. Make sure we are not getting garbage from the user */          /* 1. Make sure we are not getting garbage from the user */
# Line 1564  long do_sigreturn(CPUState *env) Line 1569  long do_sigreturn(CPUState *env)
1569          err = __get_user(pc,  &sf->info.si_regs.pc);          err = __get_user(pc,  &sf->info.si_regs.pc);
1570          err |= __get_user(npc, &sf->info.si_regs.npc);          err |= __get_user(npc, &sf->info.si_regs.npc);
1571    
1572          fprintf(stderr, "pc: %lx npc %lx\n", pc, npc);          //      fprintf(stderr, "pc: %lx npc %lx\n", pc, npc);
1573          if ((pc | npc) & 3)          if ((pc | npc) & 3)
1574                  goto segv_and_exit;                  goto segv_and_exit;
1575    
# Line 1585  long do_sigreturn(CPUState *env) Line 1590  long do_sigreturn(CPUState *env)
1590                  err |= __get_user(env->regwptr[i + UREG_I0], &sf->info.si_regs.u_regs[i+8]);                  err |= __get_user(env->regwptr[i + UREG_I0], &sf->info.si_regs.u_regs[i+8]);
1591          }          }
1592    
1593          err |= __get_user(fpu_save, &sf->fpu_save);          err |= __get_user(fpu_save, (target_ulong *)&sf->fpu_save);
1594    
1595          //if (fpu_save)          //if (fpu_save)
1596          //        err |= restore_fpu_state(env, fpu_save);          //        err |= restore_fpu_state(env, fpu_save);
# Line 1604  long do_sigreturn(CPUState *env) Line 1609  long do_sigreturn(CPUState *env)
1609          if (err)          if (err)
1610                  goto segv_and_exit;                  goto segv_and_exit;
1611    
1612          fprintf(stderr, "returning %lx\n", env->regwptr[0]);          //      fprintf(stderr, "returning %lx\n", env->regwptr[0]);
1613          return env->regwptr[0];          return env->regwptr[0];
1614    
1615  segv_and_exit:  segv_and_exit:

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.26

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26