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.
+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
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.
+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>
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
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
"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." },
+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.
main (int argc, char *argv[])
{
func1 ();
- func2 ();
+ func2 (); /* Break at func2 call site. */
return 0; /* Break to end. */
}
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"