aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/lib
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2013-12-26 19:50:05 -0700
committerTom Tromey <tom@tromey.com>2018-09-16 06:52:37 -0600
commit8743a9cdd20055e02a20c24c37b5312e3e626691 (patch)
tree982605dd428a62aff01ce080fbd68221e3f425e1 /gdb/python/lib
parent752312ba4e53fea8e77ae240a35a7b508c6ca619 (diff)
downloadgdb-8743a9cdd20055e02a20c24c37b5312e3e626691.zip
gdb-8743a9cdd20055e02a20c24c37b5312e3e626691.tar.gz
gdb-8743a9cdd20055e02a20c24c37b5312e3e626691.tar.bz2
Add more methods to gdb.Progspace
There are a number of global functions in the gdb Python module which really should be methods on Progspace. This patch adds new methods to Progspace and then redefines these globals in terms of these new methods. This version has been rebased on the related changes that Simon recently put in. Built and regtested on x86-64 Fedora 28. gdb/ChangeLog 2018-09-16 Tom Tromey <tom@tromey.com> * python/lib/gdb/__init__.py (current_progspace, objfiles) (solib_name, block_for_pc, find_pc_line): New functions. (execute_unwinders): Update. * python/py-block.c (gdbpy_block_for_pc): Remove. * python/py-inferior.c (infpy_get_progspace): New function. (inferior_object_getset) <progspace>: Add. * python/py-progspace.c (pspy_objfiles): Rewrite. (pspy_solib_name, pspy_block_for_pc) (pspy_find_pc_line, pspy_is_valid): New functions. (progspace_object_methods): Add entries for solib_name, block_for_pc, find_pc_line, is_valid. * python/python-internal.h (gdbpy_block_for_pc) (build_objfiles_list): Don't declare. * python/python.c: Don't include solib.h. (gdbpy_solib_name, gdbpy_find_pc_line) (gdbpy_get_current_progspace, build_objfiles_list) (gdbpy_objfiles): Remove. (GdbMethods) <current_progspace, objfiles, block_for_pc, solib_name, find_pc_line>: Remove entries. gdb/doc/ChangeLog 2018-09-16 Tom Tromey <tom@tromey.com> * python.texi (Basic Python): Update docs for find_pc_line, solib_name. (Progspaces In Python): Update docs for current_progspace. Document block_for_pc, find_pc_line, is_valid, nsolib_name. Move method documentation before example.
Diffstat (limited to 'gdb/python/lib')
-rw-r--r--gdb/python/lib/gdb/__init__.py27
1 files changed, 24 insertions, 3 deletions
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py
index 7e7c299..c223f2b 100644
--- a/gdb/python/lib/gdb/__init__.py
+++ b/gdb/python/lib/gdb/__init__.py
@@ -85,15 +85,14 @@ def execute_unwinders(pending_frame):
Returns:
gdb.UnwindInfo instance or None.
"""
- for objfile in _gdb.objfiles():
+ for objfile in objfiles():
for unwinder in objfile.frame_unwinders:
if unwinder.enabled:
unwind_info = unwinder(pending_frame)
if unwind_info is not None:
return unwind_info
- current_progspace = _gdb.current_progspace()
- for unwinder in current_progspace.frame_unwinders:
+ for unwinder in current_progspace().frame_unwinders:
if unwinder.enabled:
unwind_info = unwinder(pending_frame)
if unwind_info is not None:
@@ -163,3 +162,25 @@ def GdbSetPythonDirectory(dir):
# attributes
reload(__import__(__name__))
auto_load_packages()
+
+def current_progspace():
+ "Return the current Progspace."
+ return selected_inferior().progspace
+
+def objfiles():
+ "Return a sequence of the current program space's objfiles."
+ return current_progspace().objfiles()
+
+def solib_name (addr):
+ """solib_name (Long) -> String.\n\
+Return the name of the shared library holding a given address, or None."""
+ return current_progspace().solib_name(addr)
+
+def block_for_pc(pc):
+ "Return the block containing the given pc value, or None."
+ return current_progspace().block_for_pc(pc)
+
+def find_pc_line(pc):
+ """find_pc_line (pc) -> Symtab_and_line.
+Return the gdb.Symtab_and_line object corresponding to the pc value."""
+ return current_progspace().find_pc_line(pc)