diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2007-06-12 15:21:27 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2007-06-12 15:21:27 +0000 |
commit | 272dfcfd78cd900157ff2e4c8c8ed95645dae4f6 (patch) | |
tree | 13d19819273e00972d49fd4e14f1bf10157b82b2 /gdb/frame.c | |
parent | 4339e69e64f47a31e706ba9c1e7c00945c1620ff (diff) | |
download | gdb-272dfcfd78cd900157ff2e4c8c8ed95645dae4f6.zip gdb-272dfcfd78cd900157ff2e4c8c8ed95645dae4f6.tar.gz gdb-272dfcfd78cd900157ff2e4c8c8ed95645dae4f6.tar.bz2 |
* 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 6365462..42a44d4 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); |