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