* frame-unwind.h (frame_dealloc_cache_ftype): Define.

(struct frame_unwind): Add dealloc_cache.
	* frame.c (reinit_frame_cache): Call dealloc_cache on all caches.

	* libunwind-frame.h (libunwind_frame_dealloc_cache): Declare.
	* libunwind-frame.c (libunwind_frame_dealloc_cache): Define.
	(libunwind_frame_unwind): Set dealloc_cache.
	* ia64-tdep.c (ia64_libunwind_frame_unwind): Set dealloc_cache.
This commit is contained in:
Andreas Schwab 2007-06-12 15:21:27 +00:00
parent 4339e69e64
commit 272dfcfd78
6 changed files with 48 additions and 2 deletions

View file

@ -1077,6 +1077,17 @@ frame_observer_target_changed (struct target_ops *target)
void
reinit_frame_cache (void)
{
struct frame_info *fi;
/* Tear down all frame caches. */
for (fi = current_frame; fi != NULL; fi = fi->prev)
{
if (fi->prologue_cache && fi->unwind->dealloc_cache)
fi->unwind->dealloc_cache (fi, fi->prologue_cache);
if (fi->base_cache && fi->base->unwind->dealloc_cache)
fi->base->unwind->dealloc_cache (fi, fi->base_cache);
}
/* Since we can't really be sure what the first object allocated was */
obstack_free (&frame_cache_obstack, 0);
obstack_init (&frame_cache_obstack);