diff options
author | Doug Evans <dje@google.com> | 2014-12-04 12:01:22 -0800 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2014-12-04 12:01:22 -0800 |
commit | 86e4ed39595933e04a9dcbc7dec18c1056c9cbe1 (patch) | |
tree | 35be0a27159e91369849f0f9a31aa2212b60b948 /gdb | |
parent | 7c50a93137df660f7b2d9d68c0db748a9cb7868f (diff) | |
download | gdb-86e4ed39595933e04a9dcbc7dec18c1056c9cbe1.zip gdb-86e4ed39595933e04a9dcbc7dec18c1056c9cbe1.tar.gz gdb-86e4ed39595933e04a9dcbc7dec18c1056c9cbe1.tar.bz2 |
New python method gdb.Objfile.add_separate_debug_file.
gdb/ChangeLog:
* NEWS: Mention gdb.Objfile.add_separate_debug_file.
* python/py-objfile.c (objfpy_add_separate_debug_file): New function.
(objfile_getset): Add "add_separate_debug_file".
gdb/doc/ChangeLog:
* python.texi (Objfiles In Python): Document
Objfile.add_separate_debug_file.
gdb/testsuite/ChangeLog:
* gdb.python/py-objfile.exp: Add tests for
objfile.add_separate_debug_file.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/NEWS | 1 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/python.texi | 11 | ||||
-rw-r--r-- | gdb/python/py-objfile.c | 32 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-objfile.exp | 26 |
7 files changed, 86 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6da0b5..8023f03 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2014-12-04 Doug Evans <dje@google.com> + * NEWS: Mention gdb.Objfile.add_separate_debug_file. + * python/py-objfile.c (objfpy_add_separate_debug_file): New function. + (objfile_getset): Add "add_separate_debug_file". + +2014-12-04 Doug Evans <dje@google.com> + * NEWS: Mention gdb.Objfile.build_id. * build-id.c (build_id_bfd_get): Make non-static. * build-id.h (build_id_bfd_get): Add declaration. @@ -23,6 +23,7 @@ which is the gdb.Progspace object of the containing program space. ** gdb.Objfile objects have a new attribute "build_id", which is the build ID generated when the file was built. + ** gdb.Objfile objects have a new method "add_separate_debug_file". ** A new event "gdb.clear_objfiles" has been added, triggered when selecting a new file to debug. ** You can now add attributes to gdb.Objfile and gdb.Progspace objects. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 7f36a31..09318aa 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,5 +1,10 @@ 2014-12-04 Doug Evans <dje@google.com> + * python.texi (Objfiles In Python): Document + Objfile.add_separate_debug_file. + +2014-12-04 Doug Evans <dje@google.com> + * python.texi (Objfiles In Python): Document Objfile.build_id. 2014-12-02 Nick Bull <nicholaspbull@gmail.com> diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index a951410..f2e4a6e 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3562,6 +3562,17 @@ longer. All other @code{gdb.Objfile} methods will throw an exception if it is invalid at the time the method is called. @end defun +@defun Objfile.add_separate_debug_file (file) +Add @var{file} to the list of files that @value{GDBN} will search for +debug information for the objfile. +This is useful when the debug info has been removed from the program +and stored in a separate file. @value{GDBN} has built-in support for +finding separate debug info files (@pxref{Separate Debug Files}), but if +the file doesn't live in one of the standard places that @value{GDBN} +searches then this function can be used to add a debug info file +from a different place. +@end defun + @node Frames In Python @subsubsection Accessing inferior stack frames from Python. diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 05a7c21..292d310 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -334,6 +334,33 @@ objfpy_is_valid (PyObject *self, PyObject *args) Py_RETURN_TRUE; } +/* Implementation of gdb.Objfile.add_separate_debug_file (self) -> Boolean. */ + +static PyObject * +objfpy_add_separate_debug_file (PyObject *self, PyObject *args, PyObject *kw) +{ + static char *keywords[] = { "file_name", NULL }; + objfile_object *obj = (objfile_object *) self; + const char *file_name; + int symfile_flags = 0; + volatile struct gdb_exception except; + + OBJFPY_REQUIRE_VALID (obj); + + if (!PyArg_ParseTupleAndKeywords (args, kw, "s", keywords, &file_name)) + return NULL; + + TRY_CATCH (except, RETURN_MASK_ALL) + { + bfd *abfd = symfile_bfd_open (file_name); + + symbol_file_add_separate (abfd, file_name, symfile_flags, obj->objfile); + } + GDB_PY_HANDLE_EXCEPTION (except); + + Py_RETURN_NONE; +} + /* Clear the OBJFILE pointer in an Objfile object and remove the @@ -401,6 +428,11 @@ static PyMethodDef objfile_object_methods[] = "is_valid () -> Boolean.\n\ Return true if this object file is valid, false if not." }, + { "add_separate_debug_file", (PyCFunction) objfpy_add_separate_debug_file, + METH_VARARGS | METH_KEYWORDS, + "add_separate_debug_file (file_name).\n\ +Add FILE_NAME to the list of files containing debug info for the objfile." }, + { NULL } }; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b19a5c0..dbbcfa2 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2014-12-04 Doug Evans <dje@google.com> + * gdb.python/py-objfile.exp: Add tests for + objfile.add_separate_debug_file. + +2014-12-04 Doug Evans <dje@google.com> + * lib/gdb.exp (get_build_id): New function. (build_id_debug_filename_get): Rewrite to use it. * gdb.python/py-objfile.exp: Add test for objfile.build_id. diff --git a/gdb/testsuite/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp index 74384ed..6c36f8e 100644 --- a/gdb/testsuite/gdb.python/py-objfile.exp +++ b/gdb/testsuite/gdb.python/py-objfile.exp @@ -61,3 +61,29 @@ gdb_py_test_silent_cmd "python objfile.random_attribute = 42" \ "Set random attribute in objfile" 1 gdb_test "python print (objfile.random_attribute)" "42" \ "Verify set of random attribute in objfile" + +# Now build another copy of the testcase, this time without debug info. + +if { [prepare_for_testing ${testfile}.exp ${testfile}2 ${srcfile} {nodebug ldflags=-Wl,--strip-debug}] } { + return -1 +} + +if ![runto_main] { + fail "Can't run to main" + return 0 +} + +gdb_py_test_silent_cmd "python objfile = gdb.objfiles()\[0\]" \ + "Get no-debug objfile file" 1 + +gdb_test "p main" "= {<text variable, no debug info>} $hex <main>" \ + "print main without debug info" + +gdb_py_test_silent_cmd "python objfile.add_separate_debug_file(\"${binfile}\")" \ + "Add separate debug file file" 1 + +gdb_py_test_silent_cmd "python sep_objfile = gdb.objfiles()\[0\]" \ + "Get separate debug info objfile" 1 + +gdb_test "p main" "= {int \\(\\)} $hex <main>" \ + "print main with debug info" |