2012-05-13 Siva Chandra Reddy <sivachandra@google.com>
authorSiva Chandra Reddy <sivachandra@sourceware.org>
Sun, 13 May 2012 11:33:44 +0000 (11:33 +0000)
committerSiva Chandra Reddy <sivachandra@sourceware.org>
Sun, 13 May 2012 11:33:44 +0000 (11:33 +0000)
Add a new function gdb.find_pc_line to the Python API.
* NEWS (Python Scripting): Add entry about the new function.
* python/python.c (gdbpy_find_pc_line): New function which
implements gdb.find_pc_line.
(GdbMethods): Add entry for the new function.

doc/
* gdb.texinfo (Basic Python): Add description about the function
gdb.find_pc_line

testsuite/
* gdb.python/python.c: Add a new breakpoint comment.
* gdb.python/python.exp: Add tests to test gdb.find_pc_line.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/python/python.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/python.c
gdb/testsuite/gdb.python/python.exp

index 3746f92..46e3b9c 100644 (file)
@@ -1,3 +1,11 @@
+2012-05-13  Siva Chandra Reddy  <sivachandra@google.com>
+
+       Add a new function gdb.find_pc_line to the Python API.
+       * NEWS (Python Scripting): Add entry about the new function.
+       * python/python.c (gdbpy_find_pc_line): New function which
+       implements gdb.find_pc_line.
+       (GdbMethods): Add entry for the new function.
+
 2012-05-12  Pedro Alves  <palves@redhat.com>
 
        * amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Call
index f893593..dd1ab24 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -53,6 +53,9 @@
      which return the global and static blocks (as gdb.Block objects),
      of the underlying symbol table, respectively.
 
+  ** New function gdb.find_pc_line which returns the gdb.Symtab_and_line
+     object associated with a PC value.
+
 * Go language support.
   GDB now supports debugging programs written in the Go programming
   language.
index 4d23eb0..8eef588 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-13  Siva Chandra Reddy  <sivachandra@google.com>
+
+       * gdb.texinfo (Basic Python): Add description about the function
+       gdb.find_pc_line
+
 2012-05-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Eli Zaretskii  <eliz@gnu.org>
 
index 86f1dd3..a5c6879 100644 (file)
@@ -22508,6 +22508,15 @@ compute values, for example, it is the only way to get the value of a
 convenience variable (@pxref{Convenience Vars}) as a @code{gdb.Value}.
 @end defun
 
+@findex gdb.find_pc_line
+@defun gdb.find_pc_line (pc)
+Return the @code{gdb.Symtab_and_line} object corresponding to the
+@var{pc} value.  @xref{Symbol Tables In Python}.  If an invalid
+value of @var{pc} is passed as an argument, then the @code{symtab} and
+@code{line} attributes of the returned @code{gdb.Symtab_and_line} object
+will be @code{None} and 0 respectively.
+@end defun
+
 @findex gdb.post_event
 @defun gdb.post_event (event)
 Put @var{event}, a callable object taking no arguments, into
index 938275a..5e5f980 100644 (file)
@@ -631,6 +631,24 @@ gdbpy_parse_and_eval (PyObject *self, PyObject *args)
   return value_to_value_object (result);
 }
 
+/* Implementation of gdb.find_pc_line function.
+   Returns the gdb.Symtab_and_line object corresponding to a PC value.  */
+
+static PyObject *
+gdbpy_find_pc_line (PyObject *self, PyObject *args)
+{
+  struct symtab_and_line sal;
+  CORE_ADDR pc;
+  unsigned long long pc_llu;
+
+  if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc_llu))
+    return NULL;
+
+  pc = (CORE_ADDR) pc_llu;
+  sal = find_pc_line (pc, 0);
+  return symtab_and_line_to_sal_object (sal);
+}
+
 /* Read a file as Python code.
    FILE is the file to run.  FILENAME is name of the file FILE.
    This does not throw any errors.  If an exception occurs python will print
@@ -1458,6 +1476,9 @@ gdb.Symtab_and_line objects (or None)."},
     "parse_and_eval (String) -> Value.\n\
 Parse String as an expression, evaluate it, and return the result as a Value."
   },
+  { "find_pc_line", gdbpy_find_pc_line, METH_VARARGS,
+    "find_pc_line (pc) -> Symtab_and_line.\n\
+Return the gdb.Symtab_and_line object corresponding to the pc value." },
 
   { "post_event", gdbpy_post_event, METH_VARARGS,
     "Post an event into gdb's event loop." },
index b66ef43..b6a2092 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-13  Siva Chandra Reddy  <sivachandra@google.com>
+
+       * gdb.python/python.c: Add a new breakpoint comment.
+       * gdb.python/python.exp: Add tests to test gdb.find_pc_line.
+
 2011-12-26  Kwok Cheung Yeung  <kcy@codesourcery.com>
 
        * gdb.base/info-os.exp: New file.
index d9f02cd..50bee21 100644 (file)
@@ -23,6 +23,6 @@ int
 main (int argc, char *argv[])
 {
   func1 ();
-  func2 ();
+  func2 ();      /* Break at func2 call site.  */
   return 0;      /* Break to end.  */
 }
index 7333e26..ef0cdcf 100644 (file)
@@ -367,3 +367,23 @@ gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
 
 gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
     "set the hook to default" 1
+
+# Start with a fresh gdb.
+clean_restart ${testfile}
+
+# The following tests require execution.
+
+if ![runto_main] then {
+    fail "Can't run to main"
+    return 0
+}
+
+runto [gdb_get_line_number "Break at func2 call site."]
+
+gdb_py_test_silent_cmd "python line = gdb.selected_frame().find_sal().line" "Get line number of func2 call site" 1
+gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line == line" "True" "Test find_pc_line at func2 call site"
+
+gdb_py_test_silent_cmd "step" "Step into func2" 1
+gdb_py_test_silent_cmd "up" "Step out of func2" 1
+
+gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line > line" "True" "Test find_pc_line with resume address"