* corelow.c (core_open): Assume there was no upper layer left

behind from a previous inferior.
	* target.c (pop_all_targets): Rename to ...
	(pop_all_targets_above): ... this.  Add a target stratum
	parameter.  Use it instead of hardcoding the dummy_stratum.
	(pop_all_targets): New, defer to pop_all_targets_above.
	(target_preopen): Use pop_all_targets_above.
	* target.h (pop_all_targets_above): Declare.
This commit is contained in:
Pedro Alves 2008-08-18 23:12:40 +00:00
parent 5231c1fd73
commit 87ab71f0a0
4 changed files with 32 additions and 21 deletions

View file

@ -1,3 +1,14 @@
2008-08-18 Pedro Alves <pedro@codesourcery.com>
* corelow.c (core_open): Assume there was no upper layer left
behind from a previous inferior.
* target.c (pop_all_targets): Rename to ...
(pop_all_targets_above): ... this. Add a target stratum
parameter. Use it instead of hardcoding the dummy_stratum.
(pop_all_targets): New, defer to pop_all_targets_above.
(target_preopen): Use pop_all_targets_above.
* target.h (pop_all_targets_above): Declare.
2008-08-18 Pedro Alves <pedro@codesourcery.com> 2008-08-18 Pedro Alves <pedro@codesourcery.com>
* gdbthread.h (thread_change_ptid): Declare. * gdbthread.h (thread_change_ptid): Declare.

View file

@ -258,7 +258,6 @@ core_open (char *filename, int from_tty)
struct cleanup *old_chain; struct cleanup *old_chain;
char *temp; char *temp;
bfd *temp_bfd; bfd *temp_bfd;
int ontop;
int scratch_chan; int scratch_chan;
int flags; int flags;
@ -341,7 +340,7 @@ core_open (char *filename, int from_tty)
if (!exec_bfd) if (!exec_bfd)
set_gdbarch_from_file (core_bfd); set_gdbarch_from_file (core_bfd);
ontop = !push_target (&core_ops); push_target (&core_ops);
discard_cleanups (old_chain); discard_cleanups (old_chain);
/* This is done first, before anything has a chance to query the /* This is done first, before anything has a chance to query the
@ -368,21 +367,12 @@ core_open (char *filename, int from_tty)
bfd_map_over_sections (core_bfd, add_to_thread_list, bfd_map_over_sections (core_bfd, add_to_thread_list,
bfd_get_section_by_name (core_bfd, ".reg")); bfd_get_section_by_name (core_bfd, ".reg"));
if (ontop) /* Fetch all registers from core file. */
{ target_fetch_registers (get_current_regcache (), -1);
/* Fetch all registers from core file. */
target_fetch_registers (get_current_regcache (), -1);
/* Now, set up the frame cache, and print the top of stack. */ /* Now, set up the frame cache, and print the top of stack. */
reinit_frame_cache (); reinit_frame_cache ();
print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC); print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
else
{
warning (
"you won't be able to access this core file until you terminate\n\
your %s; do ``info files''", target_longname);
}
} }
static void static void

View file

@ -822,9 +822,9 @@ pop_target (void)
} }
void void
pop_all_targets (int quitting) pop_all_targets_above (enum strata above_stratum, int quitting)
{ {
while ((int) (current_target.to_stratum) > (int) dummy_stratum) while ((int) (current_target.to_stratum) > (int) above_stratum)
{ {
target_close (&current_target, quitting); target_close (&current_target, quitting);
if (!unpush_target (target_stack)) if (!unpush_target (target_stack))
@ -839,6 +839,12 @@ pop_all_targets (int quitting)
} }
} }
void
pop_all_targets (int quitting)
{
pop_all_targets_above (dummy_stratum, quitting);
}
/* 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
@ -1778,9 +1784,9 @@ target_preopen (int from_tty)
/* Calling target_kill may remove the target from the stack. But if /* Calling target_kill may remove the target from the stack. But if
it doesn't (which seems like a win for UDI), remove it now. */ it doesn't (which seems like a win for UDI), remove it now. */
/* Leave the exec target, though. The user may be switching from a
if (target_has_execution) live process to a core of the same program. */
pop_target (); pop_all_targets_above (file_stratum, 0);
target_pre_inferior (from_tty); target_pre_inferior (from_tty);
} }

View file

@ -1179,6 +1179,10 @@ extern void pop_target (void);
while). */ while). */
extern void pop_all_targets (int quitting); extern void pop_all_targets (int quitting);
/* Like pop_all_targets, but pops only targets whose stratum is
strictly above ABOVE_STRATUM. */
extern void pop_all_targets_above (enum strata above_stratum, 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);