Browse Source

2003-10-22 Andrew Cagney <cagney@redhat.com>

* target.c (target_close): New function.
	(debug_to_close): Use "target_close".
	(push_target): Use "target_close".
	(unpush_target): Use "target_close".
	(pop_target): Use "target_close".
	* target.h (struct target_ops): Add "to_xclose".
	(target_open): Delete macro.  Move comment to "to_open".
	(target_close): Replace macro with function that takes a target.
	* top.c (quit_target): Pass "current_target" to "target_close".
cagney_bigcore-20040122-branch
Andrew Cagney 23 years ago
parent
commit
f1c07ab0ca
  1. 12
      gdb/ChangeLog
  2. 20
      gdb/target.c
  3. 36
      gdb/target.h
  4. 2
      gdb/top.c

12
gdb/ChangeLog

@ -1,3 +1,15 @@
2003-10-22 Andrew Cagney <cagney@redhat.com>
* target.c (target_close): New function.
(debug_to_close): Use "target_close".
(push_target): Use "target_close".
(unpush_target): Use "target_close".
(pop_target): Use "target_close".
* target.h (struct target_ops): Add "to_xclose".
(target_open): Delete macro. Move comment to "to_open".
(target_close): Replace macro with function that takes a target.
* top.c (quit_target): Pass "current_target" to "target_close".
2003-10-21 Elena Zannoni <ezannoni@redhat.com>
* minsyms.c (lookup_minimal_symbol_text): Remove unused parameter.

20
gdb/target.c

@ -672,8 +672,7 @@ push_target (struct target_ops *t)
struct target_ops *tmp = (*cur);
(*cur) = (*cur)->beneath;
tmp->beneath = NULL;
if (tmp->to_close)
(tmp->to_close) (0);
target_close (tmp, 0);
}
/* We have removed all targets in our stratum, now add the new one. */
@ -698,8 +697,7 @@ unpush_target (struct target_ops *t)
struct target_ops **cur;
struct target_ops *tmp;
if (t->to_close)
t->to_close (0); /* Let it clean up */
target_close (t, 0);
/* Look for the specified target. Note that we assume that a target
can only occur once in the target stack. */
@ -726,7 +724,7 @@ unpush_target (struct target_ops *t)
void
pop_target (void)
{
(current_target.to_close) (0); /* Let it clean up */
target_close (&current_target, 0); /* Let it clean up */
if (unpush_target (target_stack) == 1)
return;
@ -1600,11 +1598,19 @@ debug_to_open (char *args, int from_tty)
static void
debug_to_close (int quitting)
{
debug_target.to_close (quitting);
target_close (&debug_target, quitting);
fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
}
void
target_close (struct target_ops *targ, int quitting)
{
if (targ->to_xclose != NULL)
targ->to_xclose (targ, quitting);
else if (targ->to_close != NULL)
targ->to_close (quitting);
}
static void
debug_to_attach (char *args, int from_tty)
{

36
gdb/target.h

@ -266,7 +266,15 @@ struct target_ops
char *to_doc; /* Documentation. Does not include trailing
newline, and starts with a one-line descrip-
tion (probably similar to to_longname). */
/* The open routine takes the rest of the parameters from the
command, and (if successful) pushes a new target onto the
stack. Targets should supply this routine, if only to provide
an error message. */
void (*to_open) (char *, int);
/* Old targets with a static target vector provide "to_close".
New re-entrant targets provide "to_xclose" and that is expected
to xfree everything (including the "struct target_ops"). */
void (*to_xclose) (struct target_ops *targ, int quitting);
void (*to_close) (int);
void (*to_attach) (char *, int);
void (*to_post_attach) (int);
@ -413,26 +421,16 @@ extern struct target_ops current_target;
#define target_shortname (current_target.to_shortname)
#define target_longname (current_target.to_longname)
/* The open routine takes the rest of the parameters from the command,
and (if successful) pushes a new target onto the stack.
Targets should supply this routine, if only to provide an error message. */
/* Does whatever cleanup is required for a target that we are no
longer going to be calling. QUITTING indicates that GDB is exiting
and should not get hung on an error (otherwise it is important to
perform clean termination, even if it takes a while). This routine
is automatically always called when popping the target off the
target stack (to_beneath is undefined). Closing file descriptors
and freeing all memory allocated memory are typical things it
should do. */
#define target_open(name, from_tty) \
do { \
dcache_invalidate (target_dcache); \
(*current_target.to_open) (name, from_tty); \
} while (0)
/* Does whatever cleanup is required for a target that we are no longer
going to be calling. Argument says whether we are quitting gdb and
should not get hung in case of errors, or whether we want a clean
termination even if it takes a while. This routine is automatically
always called just before a routine is popped off the target stack.
Closing file descriptors and freeing memory are typical things it should
do. */
#define target_close(quitting) \
(*current_target.to_close) (quitting)
void target_close (struct target_ops *targ, int quitting);
/* Attaches to a process on the target side. Arguments are as passed
to the `attach' command by the user. This routine can be called

2
gdb/top.c

@ -1461,7 +1461,7 @@ quit_target (void *arg)
}
/* UDI wants this, to kill the TIP. */
target_close (1);
target_close (&current_target, 1);
/* Save the history information if it is appropriate to do so. */
if (write_history_p && history_filename)

Loading…
Cancel
Save