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

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

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

revision 1.72 by bellard, Mon Nov 21 23:30:26 2005 UTC revision 1.73 by bellard, Sat Nov 26 10:38:38 2005 UTC
# Line 331  void cpu_loop(CPUARMState *env) Line 331  void cpu_loop(CPUARMState *env)
331      int trapnr;      int trapnr;
332      unsigned int n, insn;      unsigned int n, insn;
333      target_siginfo_t info;      target_siginfo_t info;
334        uint32_t addr;
335            
336      for(;;) {      for(;;) {
337          trapnr = cpu_arm_exec(env);          trapnr = cpu_arm_exec(env);
# Line 397  void cpu_loop(CPUARMState *env) Line 398  void cpu_loop(CPUARMState *env)
398              /* just indicate that signals should be handled asap */              /* just indicate that signals should be handled asap */
399              break;              break;
400          case EXCP_PREFETCH_ABORT:          case EXCP_PREFETCH_ABORT:
401                addr = env->cp15.c6_data;
402                goto do_segv;
403          case EXCP_DATA_ABORT:          case EXCP_DATA_ABORT:
404                addr = env->cp15.c6_insn;
405                goto do_segv;
406            do_segv:
407              {              {
408                  info.si_signo = SIGSEGV;                  info.si_signo = SIGSEGV;
409                  info.si_errno = 0;                  info.si_errno = 0;
410                  /* XXX: check env->error_code */                  /* XXX: check env->error_code */
411                  info.si_code = TARGET_SEGV_MAPERR;                  info.si_code = TARGET_SEGV_MAPERR;
412                  info._sifields._sigfault._addr = env->cp15_6;                  info._sifields._sigfault._addr = addr;
413                  queue_signal(info.si_signo, &info);                  queue_signal(info.si_signo, &info);
414              }              }
415              break;              break;
# Line 1190  int main(int argc, char **argv) Line 1196  int main(int argc, char **argv)
1196  #elif defined(TARGET_ARM)  #elif defined(TARGET_ARM)
1197      {      {
1198          int i;          int i;
1199            cpsr_write(env, regs->uregs[16], 0xffffffff);
1200          for(i = 0; i < 16; i++) {          for(i = 0; i < 16; i++) {
1201              env->regs[i] = regs->uregs[i];              env->regs[i] = regs->uregs[i];
1202          }          }
         env->cpsr = regs->uregs[16];  
1203          ts->stack_base = info->start_stack;          ts->stack_base = info->start_stack;
1204          ts->heap_base = info->brk;          ts->heap_base = info->brk;
1205          /* This will be filled in on the first SYS_HEAPINFO call.  */          /* This will be filled in on the first SYS_HEAPINFO call.  */

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.73

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