Revision 1fddef4b linux-user/main.c

b/linux-user/main.c
278 278
        case EXCP_INTERRUPT:
279 279
            /* just indicate that signals should be handled asap */
280 280
            break;
281
        case EXCP_DEBUG:
282
            {
283
                int sig;
284

  
285
                sig = gdb_handlesig (env, TARGET_SIGTRAP);
286
                if (sig)
287
                  {
288
                    info.si_signo = sig;
289
                    info.si_errno = 0;
290
                    info.si_code = TARGET_TRAP_BRKPT;
291
                    queue_signal(info.si_signo, &info);
292
                  }
293
            }
294
            break;
281 295
        default:
282 296
            pc = env->segs[R_CS].base + env->eip;
283 297
            fprintf(stderr, "qemu: 0x%08lx: unhandled CPU exception 0x%x - aborting\n", 
......
379 393
                queue_signal(info.si_signo, &info);
380 394
            }
381 395
            break;
396
        case EXCP_DEBUG:
397
            {
398
                int sig;
399

  
400
                sig = gdb_handlesig (env, TARGET_SIGTRAP);
401
                if (sig)
402
                  {
403
                    info.si_signo = sig;
404
                    info.si_errno = 0;
405
                    info.si_code = TARGET_TRAP_BRKPT;
406
                    queue_signal(info.si_signo, &info);
407
                  }
408
            }
409
            break;
382 410
        default:
383 411
        error:
384 412
            fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
......
529 557
            break;
530 558
	case 0x100: // XXX, why do we get these?
531 559
	    break;
560
        case EXCP_DEBUG:
561
            {
562
                int sig;
563

  
564
                sig = gdb_handlesig (env, TARGET_SIGTRAP);
565
                if (sig)
566
                  {
567
                    info.si_signo = sig;
568
                    info.si_errno = 0;
569
                    info.si_code = TARGET_TRAP_BRKPT;
570
                    queue_signal(info.si_signo, &info);
571
                  }
572
            }
573
            break;
532 574
        default:
533 575
            printf ("Unhandled trap: 0x%x\n", trapnr);
534 576
            cpu_dump_state(env, stderr, fprintf, 0);
......
911 953
        case EXCP_INTERRUPT:
912 954
            /* Don't know why this should ever happen... */
913 955
            break;
914
	case EXCP_DEBUG:
915
	    break;
956
        case EXCP_DEBUG:
957
            {
958
                int sig;
959

  
960
                sig = gdb_handlesig (env, TARGET_SIGTRAP);
961
                if (sig)
962
                  {
963
                    info.si_signo = sig;
964
                    info.si_errno = 0;
965
                    info.si_code = TARGET_TRAP_BRKPT;
966
                    queue_signal(info.si_signo, &info);
967
                  }
968
            }
969
            break;
916 970
        default:
917 971
            fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
918 972
                    trapnr);
......
930 984
void usage(void)
931 985
{
932 986
    printf("qemu-" TARGET_ARCH " version " QEMU_VERSION ", Copyright (c) 2003-2004 Fabrice Bellard\n"
933
           "usage: qemu-" TARGET_ARCH " [-h] [-d opts] [-L path] [-s size] program [arguments...]\n"
987
           "usage: qemu-" TARGET_ARCH " [-h] [-g] [-d opts] [-L path] [-s size] program [arguments...]\n"
934 988
           "Linux CPU emulator (compiled for %s emulation)\n"
935 989
           "\n"
936 990
           "-h           print this help\n"
991
           "-g           wait gdb connection to port %d\n"
937 992
           "-L path      set the elf interpreter prefix (default=%s)\n"
938 993
           "-s size      set the stack size in bytes (default=%ld)\n"
939 994
           "\n"
......
944 999
           "-d options   activate log (logfile=%s)\n"
945 1000
           "-p pagesize  set the host page size to 'pagesize'\n",
946 1001
           TARGET_ARCH,
1002
           DEFAULT_GDBSTUB_PORT,
947 1003
           interp_prefix, 
948 1004
           x86_stack_size,
949 1005
           DEBUG_LOGFILE);
......
967 1023
    CPUState *env;
968 1024
    int optind;
969 1025
    const char *r;
1026
    int use_gdbstub = 0;
970 1027
    
971 1028
    if (argc <= 1)
972 1029
        usage();
......
1020 1077
                fprintf(stderr, "page size must be a power of two\n");
1021 1078
                exit(1);
1022 1079
            }
1080
        } else if (!strcmp(r, "g")) {
1081
            use_gdbstub = 1;
1023 1082
        } else 
1024 1083
#ifdef USE_CODE_COPY
1025 1084
        if (!strcmp(r, "no-code-copy")) {
......
1176 1235
#error unsupported target CPU
1177 1236
#endif
1178 1237

  
1238
    if (use_gdbstub) {
1239
        gdbserver_start (DEFAULT_GDBSTUB_PORT);
1240
        gdb_handlesig(env, 0);
1241
    }
1179 1242
    cpu_loop(env);
1180 1243
    /* never exits */
1181 1244
    return 0;

Also available in: Unified diff