1 /* Remote debugging interface for Zilog Z8000 simulator
2 Copyright 1992,1993 Free Software Foundation, Inc.
3 Contributed by Cygnus Support. Written by Steve Chamberlain
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
35 #include "../sim/z8k/sim.h"
37 /* External data declarations */
38 extern int stop_soon_quietly
; /* for wait_for_inferior */
40 /* Forward data declarations */
41 extern struct target_ops sim_ops
; /* Forward declaration */
43 void sim_store_register();
48 sim_write_inferior_memory (memaddr
, myaddr
, len
)
50 unsigned char *myaddr
;
53 sim_write(memaddr
, myaddr
, len
);
63 for (regno
= 0; regno
< 16; regno
++)
65 store_register(regno
);
70 sim_store_register(regno
,read_register(regno
));
77 sim_kill(arg
,from_tty
)
87 * Download a file specified in 'args', to the sim.
90 sim_load(args
,fromtty
)
98 abfd
= bfd_openr(args
,"coff-z8k");
102 printf_filtered("Unable to open file %s\n", args
);
106 if (bfd_check_format(abfd
, bfd_object
) ==0)
108 printf_filtered("File is not an object file\n");
113 while (s
!= (asection
*)NULL
)
115 if (s
->flags
& SEC_LOAD
)
119 char *buffer
= xmalloc(delta
);
120 printf_filtered("%s\t: 0x%4x .. 0x%4x ",
121 s
->name
, s
->vma
, s
->vma
+ s
->_raw_size
);
122 for (i
= 0; i
< s
->_raw_size
; i
+= delta
)
124 int sub_delta
= delta
;
125 if (sub_delta
> s
->_raw_size
- i
)
126 sub_delta
= s
->_raw_size
- i
;
128 bfd_get_section_contents(abfd
, s
, buffer
, i
, sub_delta
);
129 sim_write_inferior_memory(s
->vma
+ i
, buffer
, sub_delta
);
130 printf_filtered("*");
133 printf_filtered( "\n");
139 sim_set_pc(abfd
->start_address
);
142 /* This is called not only when we first attach, but also when the
143 user types "run" after having attached. */
145 sim_create_inferior (execfile
, args
, env
)
153 error ("Can't pass arguments to remote sim process.");
155 if (execfile
== 0 || exec_bfd
== 0)
156 error ("No exec file specified");
158 entry_pt
= (int) bfd_get_start_address (exec_bfd
);
161 sim_clear_breakpoints();
162 init_wait_for_inferior ();
163 insert_breakpoints ();
164 proceed(entry_pt
, -1, 0);
170 sim_open (name
, from_tty
)
179 /* Clear any break points */
180 sim_clear_breakpoints();
182 push_target (&sim_ops
);
183 target_fetch_registers(-1);
185 printf_filtered("Connected to the Z8000 Simulator.\n");
188 /* Close out all files and local state before this target loses control. */
194 sim_clear_breakpoints();
197 /* Terminate the open connection to the remote debugger.
198 Use this when you want to detach and do something else
201 sim_detach (args
,from_tty
)
205 sim_clear_breakpoints();
207 pop_target(); /* calls sim_close to do the real work */
209 printf_filtered ("Ending remote %s debugging\n", target_shortname
);
212 /* Tell the remote machine to resume. */
215 /* Wait until the remote machine stops, then return,
216 storing status in STATUS just as `wait' would. */
222 *status
= sim_stop_signal();
227 /* Get ready to modify the registers array. On machines which store
228 individual registers, this doesn't need to do anything. On machines
229 which store all the registers in one fell swoop, this makes sure
230 that registers contains all the registers from the program being
234 sim_prepare_to_store ()
236 /* Do nothing, since we can store individual regs */
241 fetch_register(regno
)
246 for (regno
= 0; regno
< 16; regno
++)
247 fetch_register(regno
);
250 char buf
[MAX_REGISTER_RAW_SIZE
];
251 sim_fetch_register(regno
, buf
);
252 supply_register(regno
, buf
);
256 /* Write a word WORD into remote address ADDR.
257 This goes through the data cache. */
260 sim_store_word (addr
, word
)
264 /* dcache_poke (addr, word);*/
268 sim_xfer_inferior_memory(memaddr
, myaddr
, len
, write
, target
)
273 struct target_ops
*target
; /* ignored */
277 sim_write(memaddr
, myaddr
, len
);
282 sim_read(memaddr
, myaddr
, len
);
290 char *file
= "nothing";
292 file
= bfd_get_filename(exec_bfd
);
294 printf_filtered("\tAttached to %s running on the z8k simulator\n",file
);
297 /* This routine is run as a hook, just before the main command loop is
298 entered. If gdb is configured for the H8, but has not had its
299 target specified yet, this will loop prompting the user to do so.
303 sim_before_main_loop ()
305 push_target (&sim_ops
);
309 /* Clear the sims notion of what the break points are */
313 sim_clear_breakpoints();
314 generic_mourn_inferior ();
317 static void rem_resume(a
,b
)
324 /* Define the target subroutine names */
326 struct target_ops sim_ops
=
328 "sim", "Remote SIM monitor",
329 "Use the Z8000 simulator",
331 0, sim_detach
, rem_resume
, sim_wait
, /* attach */
332 fetch_register
, store_register
,
333 sim_prepare_to_store
,
334 sim_xfer_inferior_memory
,
336 0, 0, /* Breakpoints */
337 0, 0, 0, 0, 0, /* Terminal handling */
338 sim_kill
, /* FIXME, kill */
340 0, /* lookup_symbol */
341 sim_create_inferior
, /* create_inferior */
342 sim_mourn
, /* mourn_inferior FIXME */
344 0, /* notice_signals */
345 process_stratum
, 0, /* next */
346 1, 1, 1, 1, 1, /* all mem, mem, stack, regs, exec */
347 0,0, /* Section pointers */
348 OPS_MAGIC
, /* Always the last thing */
356 /***********************************************************************/
359 _initialize_remote_sim ()
361 extern int sim_z8001_mode
;
362 sim_z8001_mode
= z8001_mode
;
363 add_target (&sim_ops
);
This page took 0.041717 seconds and 5 git commands to generate.