* target.h (pop_all_targets): Declare.
* target.c (pop_all_targets): New. * top.c (quit_target): Pop all targets instead of just closing the current.
This commit is contained in:
parent
311a4e6b7b
commit
aa76d38d1d
4 changed files with 35 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-08-16 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* target.h (pop_all_targets): Declare.
|
||||||
|
* target.c (pop_all_targets): New.
|
||||||
|
* top.c (quit_target): Pop all targets instead of just closing the
|
||||||
|
current.
|
||||||
|
|
||||||
2008-08-16 Vladimir Prus <vladimir@codesourcery.com>
|
2008-08-16 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
||||||
|
|
||||||
|
|
18
gdb/target.c
18
gdb/target.c
|
@ -821,6 +821,24 @@ pop_target (void)
|
||||||
internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
|
internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pop_all_targets (int quitting)
|
||||||
|
{
|
||||||
|
while ((int) (current_target.to_stratum) > (int) dummy_stratum)
|
||||||
|
{
|
||||||
|
target_close (¤t_target, quitting);
|
||||||
|
if (!unpush_target (target_stack))
|
||||||
|
{
|
||||||
|
fprintf_unfiltered (gdb_stderr,
|
||||||
|
"pop_all_targets couldn't find target %s\n",
|
||||||
|
current_target.to_shortname);
|
||||||
|
internal_error (__FILE__, __LINE__,
|
||||||
|
_("failed internal consistency check"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Using the objfile specified in OBJFILE, find the address for the
|
/* Using the objfile specified in OBJFILE, find the address for the
|
||||||
current thread's thread-local storage with offset OFFSET. */
|
current thread's thread-local storage with offset OFFSET. */
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
|
|
|
@ -1172,6 +1172,13 @@ extern void target_preopen (int);
|
||||||
|
|
||||||
extern void pop_target (void);
|
extern void pop_target (void);
|
||||||
|
|
||||||
|
/* Does whatever cleanup is required to get rid of all pushed targets.
|
||||||
|
QUITTING is propagated to target_close; it 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). */
|
||||||
|
extern void pop_all_targets (int quitting);
|
||||||
|
|
||||||
extern CORE_ADDR target_translate_tls_address (struct objfile *objfile,
|
extern CORE_ADDR target_translate_tls_address (struct objfile *objfile,
|
||||||
CORE_ADDR offset);
|
CORE_ADDR offset);
|
||||||
|
|
||||||
|
|
|
@ -1222,8 +1222,9 @@ quit_target (void *arg)
|
||||||
target_kill ();
|
target_kill ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* UDI wants this, to kill the TIP. */
|
/* Give all pushed targets a chance to do minimal cleanup, and pop
|
||||||
target_close (¤t_target, 1);
|
them all out. */
|
||||||
|
pop_all_targets (1);
|
||||||
|
|
||||||
/* Save the history information if it is appropriate to do so. */
|
/* Save the history information if it is appropriate to do so. */
|
||||||
if (write_history_p && history_filename)
|
if (write_history_p && history_filename)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue