diff options
author | Andreas Schwab <schwab@suse.de> | 2007-06-12 15:21:27 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2007-06-12 15:21:27 +0000 |
commit | ae4e6e4eaa6d988db4e6ecb37a25bf8cf1e33306 (patch) | |
tree | 1f370e2ab46d44e9ae887b7dc64412edbdb6b31f /gdb/frame.c | |
parent | 4330356dffab209a837d8904d43f145b4ff4ffed (diff) | |
download | gdb-ae4e6e4eaa6d988db4e6ecb37a25bf8cf1e33306.tar.gz |
* 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.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r-- | gdb/frame.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gdb/frame.c b/gdb/frame.c index 63654625f25..42a44d42219 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -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); |