/[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.26 by bellard, Mon Jan 3 23:31:27 2005 UTC revision 1.27 by bellard, Sun Jan 30 22:59:18 2005 UTC
# Line 131  static void host_to_target_sigset_intern Line 131  static void host_to_target_sigset_intern
131      d->sig[0] = target_sigmask;      d->sig[0] = target_sigmask;
132      d->sig[1] = sigmask >> 32;      d->sig[1] = sigmask >> 32;
133  #else  #else
134  #error host_to_target_sigset  #warning host_to_target_sigset
135  #endif  #endif
136  }  }
137    
# Line 165  void target_to_host_sigset_internal(sigs Line 165  void target_to_host_sigset_internal(sigs
165  #elif TARGET_LONG_BITS == 32 && HOST_LONG_BITS == 64 && TARGET_NSIG_WORDS == 2  #elif TARGET_LONG_BITS == 32 && HOST_LONG_BITS == 64 && TARGET_NSIG_WORDS == 2
166      ((unsigned long *)d)[0] = sigmask | ((unsigned long)(s->sig[1]) << 32);      ((unsigned long *)d)[0] = sigmask | ((unsigned long)(s->sig[1]) << 32);
167  #else  #else
168  #error target_to_host_sigset  #warning target_to_host_sigset
169  #endif /* TARGET_LONG_BITS */  #endif /* TARGET_LONG_BITS */
170  }  }
171    
# Line 1391  setup___siginfo(__siginfo_t *si, CPUStat Line 1391  setup___siginfo(__siginfo_t *si, CPUStat
1391          err |= __put_user(env->pc, &si->si_regs.pc);          err |= __put_user(env->pc, &si->si_regs.pc);
1392          err |= __put_user(env->npc, &si->si_regs.npc);          err |= __put_user(env->npc, &si->si_regs.npc);
1393          err |= __put_user(env->y, &si->si_regs.y);          err |= __put_user(env->y, &si->si_regs.y);
1394          for (i=0; i < 7; i++) {          for (i=0; i < 8; i++) {
1395                  err |= __put_user(env->gregs[i], &si->si_regs.u_regs[i]);                  err |= __put_user(env->gregs[i], &si->si_regs.u_regs[i]);
1396          }          }
1397          for (i=0; i < 7; i++) {          for (i=0; i < 8; i++) {
1398                  err |= __put_user(env->regwptr[UREG_I0 + i], &si->si_regs.u_regs[i+8]);                  err |= __put_user(env->regwptr[UREG_I0 + i], &si->si_regs.u_regs[i+8]);
1399          }          }
1400          err |= __put_user(mask, &si->si_mask);          err |= __put_user(mask, &si->si_mask);
# Line 1452  static void setup_frame(int sig, struct Line 1452  static void setup_frame(int sig, struct
1452                  err |= __put_user(set->sig[i + 1], &sf->extramask[i]);                  err |= __put_user(set->sig[i + 1], &sf->extramask[i]);
1453          }          }
1454    
1455          for (i = 0; i < 7; i++) {          for (i = 0; i < 8; i++) {
1456                  err |= __put_user(env->regwptr[i + UREG_L0], &sf->ss.locals[i]);                  err |= __put_user(env->regwptr[i + UREG_L0], &sf->ss.locals[i]);
1457          }          }
1458          for (i = 0; i < 7; i++) {          for (i = 0; i < 8; i++) {
1459                  err |= __put_user(env->regwptr[i + UREG_I0], &sf->ss.ins[i]);                  err |= __put_user(env->regwptr[i + UREG_I0], &sf->ss.ins[i]);
1460          }          }
1461          if (err)          if (err)
# Line 1488  static void setup_frame(int sig, struct Line 1488  static void setup_frame(int sig, struct
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          }          }
         //cpu_dump_state(env, stderr, fprintf, 0);  
1491          return;          return;
1492    
1493          //sigill_and_return:          //sigill_and_return:
# Line 1569  long do_sigreturn(CPUState *env) Line 1568  long do_sigreturn(CPUState *env)
1568          err = __get_user(pc,  &sf->info.si_regs.pc);          err = __get_user(pc,  &sf->info.si_regs.pc);
1569          err |= __get_user(npc, &sf->info.si_regs.npc);          err |= __get_user(npc, &sf->info.si_regs.npc);
1570    
         //      fprintf(stderr, "pc: %lx npc %lx\n", pc, npc);  
1571          if ((pc | npc) & 3)          if ((pc | npc) & 3)
1572                  goto segv_and_exit;                  goto segv_and_exit;
1573    
# Line 1577  long do_sigreturn(CPUState *env) Line 1575  long do_sigreturn(CPUState *env)
1575          err |= __get_user(up_psr, &sf->info.si_regs.psr);          err |= __get_user(up_psr, &sf->info.si_regs.psr);
1576    
1577          /* User can only change condition codes and FPU enabling in %psr. */          /* User can only change condition codes and FPU enabling in %psr. */
1578          env->psr = (up_psr & ~(PSR_ICC /* | PSR_EF */))          env->psr = (up_psr & (PSR_ICC /* | PSR_EF */))
1579                    | (env->psr & (PSR_ICC /* | PSR_EF */));                    | (env->psr & ~(PSR_ICC /* | PSR_EF */));
1580          fprintf(stderr, "psr: %x\n", env->psr);  
1581          env->pc = pc-4;          env->pc = pc;
1582          env->npc = pc;          env->npc = npc;
1583          err |= __get_user(env->y, &sf->info.si_regs.y);          err |= __get_user(env->y, &sf->info.si_regs.y);
1584          for (i=0; i < 7; i++) {          for (i=0; i < 8; i++) {
1585                  err |= __get_user(env->gregs[i], &sf->info.si_regs.u_regs[i]);                  err |= __get_user(env->gregs[i], &sf->info.si_regs.u_regs[i]);
1586          }          }
1587          for (i=0; i < 7; i++) {          for (i=0; i < 8; i++) {
1588                  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]);
1589          }          }
1590    
# Line 1609  long do_sigreturn(CPUState *env) Line 1607  long do_sigreturn(CPUState *env)
1607          if (err)          if (err)
1608                  goto segv_and_exit;                  goto segv_and_exit;
1609    
         //      fprintf(stderr, "returning %lx\n", env->regwptr[0]);  
1610          return env->regwptr[0];          return env->regwptr[0];
1611    
1612  segv_and_exit:  segv_and_exit:

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

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