From abed6bc2e16f4253cfe464db18a2aefcda871a80 Mon Sep 17 00:00:00 2001 From: Kung Hsu Date: Wed, 1 Mar 1995 01:39:12 +0000 Subject: [PATCH] * arc-tdep.c (_initialize_arc_tdep): set tm_print_insn according to processor. * remote-arc.c (arc_wait): when a processor stops, stop other two processors too. * remote-arc.c (switch_command): switch tm_print_insn. --- gdb/ChangeLog | 6 +++++ gdb/arc-tdep.c | 2 +- gdb/remote-arc.c | 66 +++++++++++++++++++++++++++++++----------------- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a1a44a61545..33bcbe3aa08 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ Tue Feb 28 14:38:39 1995 Kung Hsu + * arc-tdep.c (_initialize_arc_tdep): set tm_print_insn according to + processor. + * remote-arc.c (arc_wait): when a processor stops, stop other two + processors too. + * remote-arc.c (switch_command): switch tm_print_insn. + * vx-share/ptrace.h: merge in WRS new ptrace requests. * defs.h: fix a syntax error. diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c index 385a4ca7510..14b9fcbfa60 100644 --- a/gdb/arc-tdep.c +++ b/gdb/arc-tdep.c @@ -358,5 +358,5 @@ get_longjmp_target(pc) void _initialize_arc_tdep () { - tm_print_insn = print_insn_arc; + tm_print_insn = arc_get_disassembler (bfd_mach_arc_host); } diff --git a/gdb/remote-arc.c b/gdb/remote-arc.c index 98e7a57dbed..90ddf3c96ed 100644 --- a/gdb/remote-arc.c +++ b/gdb/remote-arc.c @@ -101,7 +101,7 @@ interrupt_query PARAMS ((void)); extern struct target_ops arc_ops; /* Forward decl */ -static int aux_reg_map[3][30] = AUX_REG_MAP; +static int aux_reg_map[3][31] = AUX_REG_MAP; /* This was 5 seconds, which is a long time to sit and wait. Unless this is going though some terminal server or multiplexer or @@ -450,6 +450,8 @@ arc_wait (pid, status) { unsigned char buf[PBUFSIZ]; int thread_num = -1; + unsigned char cmd; + int proc; status->kind = TARGET_WAITKIND_EXITED; status->value.integer = 0; @@ -465,8 +467,33 @@ arc_wait (pid, status) break; status->kind = TARGET_WAITKIND_STOPPED; } - arc_xfer_reg (curr_processor, 1, 1, 0, &status_reg); + if ((curr_processor != HOST_PROCESSOR) && + !(cntl_reg & cntl_reg_halt_bit[HOST_PROCESSOR])) + { + cmd = cntl_reg | cntl_reg_halt_bit[HOST_PROCESSOR]; + arc_xfer_cntlreg (0, &cmd); + while (1) + { + unsigned char *p; + + ofunc = (void (*)()) signal (SIGINT, arc_interrupt); + arc_xfer_cntlreg (1, &cntl_reg); + signal (SIGINT, ofunc); + if (cntl_reg & cntl_reg_halt_bit[HOST_PROCESSOR]) + break; + } + } + + for (proc = AUDIO_PROCESSOR ; proc <= GRAPHIC_PROCESSOR; proc++) + { + if ((cntl_reg & cntl_reg_halt_bit[proc])) + continue; + cmd = cntl_reg | cntl_reg_halt_bit[proc]; + arc_xfer_cntlreg (0, &cmd); + } + + arc_xfer_reg (curr_processor, 1, 1, 0, &status_reg); return inferior_pid; } @@ -919,9 +946,8 @@ switch_command (args, fromtty) char *args; int fromtty; { - unsigned char cmd; - int proc; struct target_waitstatus status; + int proc; if (strncmp (args, "audio", 3) == 0) proc = 0; @@ -930,28 +956,22 @@ switch_command (args, fromtty) else if (strncmp (args, "host", 4) == 0) proc = 2; - if (cntl_reg & cntl_reg_halt_bit[proc]) + curr_processor = proc; + + switch (proc) { - curr_processor = proc; - return; + case 0: + tm_print_insn = arc_get_disassembler (bfd_mach_arc_audio); + break; + case 1: + tm_print_insn = arc_get_disassembler (bfd_mach_arc_graphics); + break; + case 2: + tm_print_insn = arc_get_disassembler (bfd_mach_arc_host); + break; } - if ((proc != HOST_PROCESSOR) && - !(cntl_reg & cntl_reg_halt_bit[HOST_PROCESSOR])) - { - cmd = cntl_reg | cntl_reg_halt_bit[HOST_PROCESSOR]; - arc_xfer_cntlreg (0, &cmd); - curr_processor = HOST_PROCESSOR; - arc_wait (inferior_pid, &status); - } - if (!(cntl_reg & cntl_reg_halt_bit[proc])) - { - cmd = cntl_reg | cntl_reg_halt_bit[proc]; - arc_xfer_cntlreg (0, &cmd); - curr_processor = proc; - arc_wait (inferior_pid, &status); - arc_fetch_registers (-1); - } + return; } -- 2.30.2