From e0f3fd7c44cebec7d787893b9c800e7de509cb32 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 9 Jun 2016 15:20:09 -0600 Subject: PR python/19293 - invalidate frame cache when unwinders change PR python/19293 notes that when a Python unwinder is disabled, the frame cache is not invalidated. This means that disabling an unwinder doesn't have any immediate effect -- but in my experience it's often the case that I want to enable or disable an unwinder in order to see what happens. This patch adds a new gdb.invalidate_cached_frames function and arranges for the relevant bits of library code to call it. I've only partially documented this function, considering a warning sufficient without going into all the reasons ordinary code should not call it. The name of the new function was taken from a comment in frame.h next to reinit_frame_cache. No new test as I think the updates to the existing test are sufficient to show that the code is working as intended. Built and regtested on x86-64 Fedora 23. 2016-07-12 Tom Tromey PR python/19293: * python/lib/gdb/command/unwinders.py (do_enable_unwinder): Call gdb.invalidate_cached_frames. * python/lib/gdb/unwinder.py (register_unwinder): Call gdb.invalidate_cached_frames. * python/python.c (gdbpy_invalidate_cached_frames): New function. (python_GdbMethods): Add entry for invalidate_cached_frames. 2016-07-12 Tom Tromey PR python/19293: * python.texi (Frames In Python): Document gdb.invalidate_cached_frames. 2016-07-12 Tom Tromey PR python/19293: * gdb.python/py-unwind-maint.exp: Update tests. --- gdb/python/python.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gdb/python/python.c') diff --git a/gdb/python/python.c b/gdb/python/python.c index 3a272a9..621e201 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -885,6 +885,15 @@ gdbpy_find_pc_line (PyObject *self, PyObject *args) return result; } +/* Implementation of gdb.invalidate_cached_frames. */ + +static PyObject * +gdbpy_invalidate_cached_frames (PyObject *self, PyObject *args) +{ + reinit_frame_cache (); + Py_RETURN_NONE; +} + /* Read a file as Python code. This is the extension_language_script_ops.script_sourcer "method". FILE is the file to load. FILENAME is name of the file FILE. @@ -2071,6 +2080,12 @@ Return the selected inferior object." }, { "inferiors", gdbpy_inferiors, METH_NOARGS, "inferiors () -> (gdb.Inferior, ...).\n\ Return a tuple containing all inferiors." }, + + { "invalidate_cached_frames", gdbpy_invalidate_cached_frames, METH_NOARGS, + "invalidate_cached_frames () -> None.\n\ +Invalidate any cached frame objects in gdb.\n\ +Intended for internal use only." }, + {NULL, NULL, 0, NULL} }; -- cgit v1.1