X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/d747e0af3d41f19815ab972f6fc9527fbf52804a..28f851f93a24640360f41dc544d346d33428336c:/gdb/remote-adapt.c diff --git a/gdb/remote-adapt.c b/gdb/remote-adapt.c index 1a75b1b21d..575bb6f66d 100644 --- a/gdb/remote-adapt.c +++ b/gdb/remote-adapt.c @@ -50,37 +50,17 @@ extern struct target_ops adapt_ops; /* Forward declaration */ /* Forward function declarations */ static void adapt_fetch_registers (); -static int adapt_store_registers (); +static void adapt_store_registers (); static void adapt_close (); static int adapt_clear_breakpoints(); -/* - * Processor types. It is assumed that the adapt has the correct - * ROM for the given processor. - */ -#define TYPE_UNKNOWN 0 -#define TYPE_A29000 1 -#define TYPE_A29030 2 -#define TYPE_A29050 3 -static char *processor_name[] = { "Unknown", "A29000", "A29030", "A29050" }; -static int processor_type=TYPE_UNKNOWN; - #define FREEZE_MODE (read_register(CPS_REGNUM) && 0x400) -#define USE_SHADOW_PC ((processor_type == TYPE_A29050) && FREEZE_MODE) - - -/* #define DEBUG /* */ -#ifdef DEBUG -# define DENTER(NAME) (printf_filtered("Entering %s\n",NAME), fflush(stdout)) -# define DEXIT(NAME) (printf_filtered("Exiting %s\n",NAME), fflush(stdout)) -#else -# define DENTER(NAME) -# define DEXIT(NAME) -#endif +#define USE_SHADOW_PC ((processor_type == a29k_freeze_mode) && FREEZE_MODE) /* Can't seem to get binary coff working */ #define ASCII_COFF /* Adapt will be downloaded with ascii coff */ +/* FIXME: Replace with `set remotedebug'. */ #define LOG_FILE "adapt.log" #if defined (LOG_FILE) FILE *log_file=NULL; @@ -287,7 +267,7 @@ get_hex_regs (n, regno) long val; while (n--) { val = get_hex_word(); - supply_register(regno++,&val); + supply_register(regno++,(char *) &val); } } /* Called when SIGALRM signal sent due to alarm() timeout. */ @@ -325,11 +305,9 @@ adapt_kill(arg,from_tty) char *arg; int from_tty; { - DENTER("adapt_kill()"); fprintf (adapt_stream, "K"); fprintf (adapt_stream, "\r"); expect_prompt (); - DEXIT("adapt_kill()"); } /* * Download a file specified in 'args', to the adapt. @@ -344,7 +322,6 @@ int fromtty; int n; char buffer[1024]; - DENTER("adapt_load()"); if (!adapt_stream) { printf_filtered("Adapt not open. Use 'target' command to open adapt\n"); return; @@ -384,7 +361,6 @@ int fromtty; expect_prompt (); /* Skip garbage that comes out */ fprintf (adapt_stream, "\r"); expect_prompt (); - DEXIT("adapt_load()"); } /* This is called not only when we first attach, but also when the @@ -397,8 +373,6 @@ adapt_create_inferior (execfile, args, env) { int entry_pt; - DENTER("adapt_create_inferior()"); - if (args && *args) error ("Can't pass arguments to remote adapt process."); @@ -439,7 +413,6 @@ adapt_create_inferior (execfile, args, env) } else { printf_filtered("Adapt not open yet.\n"); } - DEXIT("adapt_create_inferior()"); } /* Translate baud rates from integers to damn B_codes. Unix should @@ -498,7 +471,6 @@ adapt_open (name, from_tty) unsigned int prl; char *p; - DENTER("adapt_open()"); /* Find the first whitespace character, it separates dev_name from prog_name. */ if (name == 0) @@ -555,8 +527,6 @@ the baud rate, and the name of the program to run on the remote system."); adapt_stream = fdopen (adapt_desc, "r+"); push_target (&adapt_ops); - /* start_remote (); /* Initialize gdb process mechanisms */ - #ifndef HAVE_TERMIO #ifndef NO_SIGINTERRUPT @@ -590,32 +560,15 @@ the baud rate, and the name of the program to run on the remote system."); /* Clear any break points */ adapt_clear_breakpoints(); - /* Determine the processor revision level */ - prl = (unsigned int)read_register(CFG_REGNUM) >> 24; - if (prl == 0x03) { - processor_type = TYPE_A29000; - } else if ((prl&0xf0) == 0x40) { /* 29030 = 0x4* */ - processor_type = TYPE_A29030; - fprintf_filtered(stderr,"WARNING: debugging of A29030 not tested.\n"); - } else if ((prl&0xf0) == 0x20) { /* 29050 = 0x2* */ - processor_type = TYPE_A29050; - fprintf_filtered(stderr,"WARNING: debugging of A29050 not tested.\n"); - } else { - processor_type = TYPE_UNKNOWN; - fprintf_filtered(stderr,"WARNING: processor type unknown.\n"); - } - /* Print out some stuff, letting the user now what's going on */ - printf_filtered("Remote debugging on an %s connect to an Adapt via %s.\n", - processor_name[processor_type],dev_name); + printf_filtered("Connected to an Adapt via %s.\n", dev_name); /* FIXME: can this restriction be removed? */ printf_filtered("Remote debugging using virtual addresses works only\n"); printf_filtered("\twhen virtual addresses map 1:1 to physical addresses.\n"); - if (processor_type != TYPE_A29050) { + if (processor_type != a29k_freeze_mode) { fprintf_filtered(stderr, "Freeze-mode debugging not available, and can only be done on an A29050.\n"); } - DEXIT("adapt_open()"); } /* Close out all files and local state before this target loses control. */ @@ -625,8 +578,6 @@ adapt_close (quitting) int quitting; { - DENTER("adapt_close()"); - /* Clear any break points */ adapt_clear_breakpoints(); @@ -658,7 +609,6 @@ adapt_close (quitting) log_file = NULL; } #endif - DEXIT("adapt_close()"); } /* Attach to the target that is already loaded and possibly running */ @@ -668,26 +618,12 @@ adapt_attach (args, from_tty) int from_tty; { - DENTER("adapt_attach()"); if (from_tty) printf_filtered ("Attaching to remote program %s.\n", prog_name); - /* push_target(&adapt_ops); /* This done in adapt_open() */ - - mark_breakpoints_out (); - /* Send the adapt a kill. It is ok if it is not already running */ fprintf(adapt_stream, "K\r"); fflush(adapt_stream); expect_prompt(); /* Slurp the echo */ - - /* We will get a task spawn event immediately. */ - init_wait_for_inferior (); - clear_proceed_status (); - stop_soon_quietly = 1; - wait_for_inferior (); - stop_soon_quietly = 0; - normal_stop (); - DEXIT("adapt_attach()"); } @@ -699,7 +635,7 @@ adapt_detach (args,from_tty) char *args; int from_tty; { - DENTER("adapt_detach()"); + if (adapt_stream) { /* Send it on its way (tell it to continue) */ adapt_clear_breakpoints(); fprintf(adapt_stream,"G\r"); @@ -708,16 +644,14 @@ adapt_detach (args,from_tty) pop_target(); /* calls adapt_close to do the real work */ if (from_tty) printf_filtered ("Ending remote %s debugging\n", target_shortname); - DEXIT("adapt_detach()"); } /* Tell the remote machine to resume. */ void -adapt_resume (step, sig) - int step, sig; +adapt_resume (pid, step, sig) + int pid, step, sig; { - DENTER("adapt_resume()"); if (step) { write (adapt_desc, "t 1,s\r", 6); @@ -739,7 +673,6 @@ adapt_resume (step, sig) /* Swallow the echo. */ expect_prompt(); } - DEXIT("adapt_resume()"); } /* Wait until the remote machine stops, then return, @@ -772,8 +705,6 @@ adapt_wait (status) int old_timeout = timeout; int old_immediate_quit = immediate_quit; - DENTER("adapt_wait()"); - WSETEXIT ((*status), 0); if (need_artificial_trap != 0) @@ -824,7 +755,6 @@ adapt_wait (status) WSETEXIT ((*status), 0); timeout = old_timeout; immediate_quit = old_immediate_quit; - DEXIT("adapt_wait()"); return 0; } @@ -876,8 +806,6 @@ adapt_fetch_registers () int sreg_buf[16]; int i,j; - DENTER("adapt_fetch_registers()"); - /* * Global registers */ @@ -947,7 +875,7 @@ adapt_fetch_registers () sreg_buf[12] = read_register(PC2_REGNUM); /* pc2 */ } for (i=0 ; i<14 ; i++) /* Supply vab -> lru */ - supply_register(VAB_REGNUM+i,&sreg_buf[i]); + supply_register(VAB_REGNUM+i, (char *) &sreg_buf[i]); sprintf (tempbuf, "dw sr128\r"); write (adapt_desc, tempbuf, strlen (tempbuf)); for (i=0 ; i<2 ; i++) { /* SR128 - SR135 */ @@ -957,30 +885,28 @@ adapt_fetch_registers () sreg_buf[i*4 + j] = get_hex_word(); } expect_prompt(); - supply_register(IPC_REGNUM,&sreg_buf[0]); - supply_register(IPA_REGNUM,&sreg_buf[1]); - supply_register(IPB_REGNUM,&sreg_buf[2]); - supply_register(Q_REGNUM, &sreg_buf[3]); + supply_register(IPC_REGNUM,(char *) &sreg_buf[0]); + supply_register(IPA_REGNUM,(char *) &sreg_buf[1]); + supply_register(IPB_REGNUM,(char *) &sreg_buf[2]); + supply_register(Q_REGNUM, (char *) &sreg_buf[3]); /* Skip ALU */ - supply_register(BP_REGNUM, &sreg_buf[5]); - supply_register(FC_REGNUM, &sreg_buf[6]); - supply_register(CR_REGNUM, &sreg_buf[7]); + supply_register(BP_REGNUM, (char *) &sreg_buf[5]); + supply_register(FC_REGNUM, (char *) &sreg_buf[6]); + supply_register(CR_REGNUM, (char *) &sreg_buf[7]); /* There doesn't seem to be any way to get these. */ { int val = -1; - supply_register (FPE_REGNUM, &val); - supply_register (INT_REGNUM, &val); - supply_register (FPS_REGNUM, &val); - supply_register (EXO_REGNUM, &val); + supply_register (FPE_REGNUM, (char *) &val); + supply_register (INTE_REGNUM, (char *) &val); + supply_register (FPS_REGNUM, (char *) &val); + supply_register (EXO_REGNUM, (char *) &val); } write (adapt_desc, "dw gr1,gr1\r", 11); expect ("GR001 "); get_hex_regs (1, GR1_REGNUM); expect_prompt (); - - DEXIT("adapt_fetch_registers()"); } /* Fetch register REGNO, or all registers if REGNO is -1. @@ -989,7 +915,6 @@ static void adapt_fetch_register (regno) int regno; { - DENTER("adapt_fetch_register()"); if (regno == -1) adapt_fetch_registers (); else @@ -1001,17 +926,15 @@ adapt_fetch_register (regno) get_hex_regs (1, regno); expect_prompt (); } - DEXIT("adapt_fetch_register()"); } /* Store the remote registers from the contents of the block REGS. */ -static int +static void adapt_store_registers () { int i, j; - DENTER("adapt_store_registers()"); fprintf (adapt_stream, "s gr1,%x\r", read_register (GR1_REGNUM)); expect_prompt (); @@ -1063,7 +986,7 @@ adapt_store_registers () /* Store register REGNO, or all if REGNO == -1. Return errno value. */ -int +void adapt_store_register (regno) int regno; { @@ -1084,8 +1007,6 @@ adapt_store_register (regno) registers_changed (); expect_prompt (); } - DEXIT("adapt_store_registers()"); - return 0; } /* Get ready to modify the registers array. On machines which store @@ -1158,9 +1079,7 @@ adapt_write_inferior_memory (memaddr, myaddr, len) int i; unsigned int cps; - /* DENTER("adapt_write_inferior_memory()"); */ - -/* Turn TU bit off so we can do 'sb' commands */ + /* Turn TU bit off so we can do 'sb' commands */ cps = read_register(CPS_REGNUM); if (cps & 0x00000800) write_register(CPS_REGNUM,cps&~(0x00000800)); @@ -1180,7 +1099,6 @@ adapt_write_inferior_memory (memaddr, myaddr, len) /* Restore the old value of cps if the TU bit was on */ if (cps & 0x00000800) write_register(CPS_REGNUM,cps); - /* DEXIT("adapt_write_inferior_memory()"); */ return len; } @@ -1212,7 +1130,6 @@ adapt_read_inferior_memory(memaddr, myaddr, len) adapt_read_bytes (CORE_ADDR_MAX - 3, foo, 4) doesn't need to work. Detect it and give up if there's an attempt to do that. */ - /* DENTER("adapt_read_inferior_memory()"); */ if (((memaddr - 1) + len) < memaddr) return EIO; @@ -1257,8 +1174,6 @@ adapt_read_inferior_memory(memaddr, myaddr, len) startaddr += len_this_pass; } - - /* DEXIT("adapt_read_inferior_memory()"); */ return count; } @@ -1269,18 +1184,15 @@ adapt_insert_breakpoint(addr, save) CORE_ADDR addr; char *save; /* Throw away, let adapt save instructions */ { - DENTER("adapt_insert_breakpoint()"); if (num_brkpts < MAX_BREAKS) { num_brkpts++; fprintf (adapt_stream, "B %x", addr); fprintf (adapt_stream, "\r"); expect_prompt (); - DEXIT("adapt_insert_breakpoint() success"); return(0); /* Success */ } else { fprintf_filtered(stderr, "Too many break points, break point not installed\n"); - DEXIT("adapt_insert_breakpoint() failure"); return(1); /* Failure */ } @@ -1290,7 +1202,6 @@ adapt_remove_breakpoint(addr, save) CORE_ADDR addr; char *save; /* Throw away, let adapt save instructions */ { - DENTER("adapt_remove_breakpoint()"); if (num_brkpts > 0) { num_brkpts--; fprintf (adapt_stream, "BR %x", addr); @@ -1298,7 +1209,6 @@ char *save; /* Throw away, let adapt save instructions */ fflush (adapt_stream); expect_prompt (); } - DEXIT("adapt_remove_breakpoint()"); return(0); } @@ -1306,7 +1216,6 @@ char *save; /* Throw away, let adapt save instructions */ static int adapt_clear_breakpoints() { - DENTER("adapt_clear_breakpoint()"); if (adapt_stream) { fprintf (adapt_stream, "BR"); /* Clear all break points */ fprintf (adapt_stream, "\r"); @@ -1314,16 +1223,13 @@ adapt_clear_breakpoints() expect_prompt (); } num_brkpts = 0; - DEXIT("adapt_clear_breakpoint()"); } static void adapt_mourn() { - DENTER("adapt_mourn()"); adapt_clear_breakpoints(); pop_target (); /* Pop back to no-child state */ generic_mourn_inferior (); - DEXIT("adapt_mourn()"); } /* Display everthing we read in from the adapt until we match/see the @@ -1399,7 +1305,7 @@ adapt_com (args, fromtty) break; /* Begin commands that take input in the form 'c x,y[,z...]' */ case 'S': /* Set memory or register */ - if (index(args,',')) { /* Assume it is properly formatted */ + if (strchr(args,',')) { /* Assume it is properly formatted */ write(adapt_desc,args,strlen(args)); write(adapt_desc,"\r",1); expect_prompt(); @@ -1416,7 +1322,7 @@ struct target_ops adapt_ops = { adapt_open, adapt_close, adapt_attach, adapt_detach, adapt_resume, adapt_wait, adapt_fetch_register, adapt_store_register, - adapt_prepare_to_store, 0, 0, /* conv_to, conv_from */ + adapt_prepare_to_store, adapt_xfer_inferior_memory, adapt_files_info, adapt_insert_breakpoint, adapt_remove_breakpoint, /* Breakpoints */ @@ -1426,6 +1332,8 @@ struct target_ops adapt_ops = { 0, /* lookup_symbol */ adapt_create_inferior, /* create_inferior */ adapt_mourn, /* mourn_inferior FIXME */ + 0, /* can_run */ + 0, /* notice_signals */ process_stratum, 0, /* next */ 1, 1, 1, 1, 1, /* all mem, mem, stack, regs, exec */ 0,0, /* Section pointers */