Revision 07b6c13b linux-user/main.c

b/linux-user/main.c
2508 2508
            fprintf(stderr, "Machine check exception. Exit\n");
2509 2509
            exit(1);
2510 2510
            break;
2511
        case EXCP_ARITH:
2512
            env->lock_addr = -1;
2513
            info.si_signo = TARGET_SIGFPE;
2514
            info.si_errno = 0;
2515
            info.si_code = TARGET_FPE_FLTINV;
2516
            info._sifields._sigfault._addr = env->pc;
2517
            queue_signal(env, info.si_signo, &info);
2518
            break;
2519
        case EXCP_HW_INTERRUPT:
2511
        case EXCP_SMP_INTERRUPT:
2512
        case EXCP_CLK_INTERRUPT:
2513
        case EXCP_DEV_INTERRUPT:
2520 2514
            fprintf(stderr, "External interrupt. Exit\n");
2521 2515
            exit(1);
2522 2516
            break;
2523
        case EXCP_DFAULT:
2517
        case EXCP_MMFAULT:
2524 2518
            env->lock_addr = -1;
2525 2519
            info.si_signo = TARGET_SIGSEGV;
2526 2520
            info.si_errno = 0;
......
2529 2523
            info._sifields._sigfault._addr = env->trap_arg0;
2530 2524
            queue_signal(env, info.si_signo, &info);
2531 2525
            break;
2532
        case EXCP_DTB_MISS_PAL:
2533
            fprintf(stderr, "MMU data TLB miss in PALcode\n");
2534
            exit(1);
2535
            break;
2536
        case EXCP_ITB_MISS:
2537
            fprintf(stderr, "MMU instruction TLB miss\n");
2538
            exit(1);
2539
            break;
2540
        case EXCP_ITB_ACV:
2541
            fprintf(stderr, "MMU instruction access violation\n");
2542
            exit(1);
2543
            break;
2544
        case EXCP_DTB_MISS_NATIVE:
2545
            fprintf(stderr, "MMU data TLB miss\n");
2546
            exit(1);
2547
            break;
2548 2526
        case EXCP_UNALIGN:
2549 2527
            env->lock_addr = -1;
2550 2528
            info.si_signo = TARGET_SIGBUS;
......
2562 2540
            info._sifields._sigfault._addr = env->pc;
2563 2541
            queue_signal(env, info.si_signo, &info);
2564 2542
            break;
2543
        case EXCP_ARITH:
2544
            env->lock_addr = -1;
2545
            info.si_signo = TARGET_SIGFPE;
2546
            info.si_errno = 0;
2547
            info.si_code = TARGET_FPE_FLTINV;
2548
            info._sifields._sigfault._addr = env->pc;
2549
            queue_signal(env, info.si_signo, &info);
2550
            break;
2565 2551
        case EXCP_FEN:
2566 2552
            /* No-op.  Linux simply re-enables the FPU.  */
2567 2553
            break;
2568
        case EXCP_CALL_PAL ... (EXCP_CALL_PALP - 1):
2554
        case EXCP_CALL_PAL:
2569 2555
            env->lock_addr = -1;
2570
            switch ((trapnr >> 6) | 0x80) {
2556
            switch (env->error_code) {
2571 2557
            case 0x80:
2572 2558
                /* BPT */
2573 2559
                info.si_signo = TARGET_SIGTRAP;
......
2658 2644
                goto do_sigill;
2659 2645
            }
2660 2646
            break;
2661
        case EXCP_CALL_PALP ... (EXCP_CALL_PALE - 1):
2662
            goto do_sigill;
2663 2647
        case EXCP_DEBUG:
2664 2648
            info.si_signo = gdb_handlesig (env, TARGET_SIGTRAP);
2665 2649
            if (info.si_signo) {

Also available in: Unified diff