public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 3/4] python support for fetching separate debug files: add_separate_debug_file
@ 2014-11-20 21:24 Doug Evans
  2014-11-21  7:59 ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: Doug Evans @ 2014-11-20 21:24 UTC (permalink / raw)
  To: gdb-patches, eliz, palves, sergiodj

This patch provides an API call to add a separate debug file to an
objfile.

2014-11-20  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".

	doc/
	* python.texi (Objfiles In Python): Document
	Objfile.add_separate_debug_file.

	testsuite/
	* gdb.python/py-objfile.exp: Add tests for
	objfile.add_separate_debug_file.

diff --git a/gdb/NEWS b/gdb/NEWS
index 3a36fa8..6f2271e 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -15,6 +15,7 @@
      which is the build ID generated when the file was built.
   ** gdb.Objfile objects have a new attribute "have_debug_info", which is
      a boolean indicating if debug information for the objfile is present.
+  ** 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/python.texi b/gdb/doc/python.texi
index 1c9dbb87..b6beec7 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -3522,6 +3522,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 5d0933f..7a35652f 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -360,6 +360,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;
+}
+
 \f
 
 /* Clear the OBJFILE pointer in an Objfile object and remove the
@@ -427,6 +454,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/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp
index f09c64c..b3de807 100644
--- a/gdb/testsuite/gdb.python/py-objfile.exp
+++ b/gdb/testsuite/gdb.python/py-objfile.exp
@@ -81,3 +81,18 @@ gdb_py_test_silent_cmd "python objfile = gdb.objfiles()\[0\]" \
 
 gdb_test "python print (objfile.have_debug_info)" "False" \
     "Get objfile have_debug_info"
+
+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 "python print (objfile.have_debug_info)" "True" \
+    "Get have_debug_info on separate debug file"
+
+gdb_test "p main" "= {int \\(\\)} $hex <main>" \
+    "print main with debug info"

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 3/4] python support for fetching separate debug files: add_separate_debug_file
  2014-11-20 21:24 [PATCH 3/4] python support for fetching separate debug files: add_separate_debug_file Doug Evans
@ 2014-11-21  7:59 ` Eli Zaretskii
  2014-12-05 18:37   ` Doug Evans
  0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2014-11-21  7:59 UTC (permalink / raw)
  To: Doug Evans; +Cc: gdb-patches, palves, sergiodj

> From: Doug Evans <dje@google.com>
> Date: Thu, 20 Nov 2014 13:24:23 -0800
> 
> This patch provides an API call to add a separate debug file to an
> objfile.
> 
> 2014-11-20  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".
> 
> 	doc/
> 	* python.texi (Objfiles In Python): Document
> 	Objfile.add_separate_debug_file.
> 
> 	testsuite/
> 	* gdb.python/py-objfile.exp: Add tests for
> 	objfile.add_separate_debug_file.

OK for the documentation parts.

Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 3/4] python support for fetching separate debug files: add_separate_debug_file
  2014-11-21  7:59 ` Eli Zaretskii
@ 2014-12-05 18:37   ` Doug Evans
  0 siblings, 0 replies; 3+ messages in thread
From: Doug Evans @ 2014-12-05 18:37 UTC (permalink / raw)
  To: Eli Zaretskii, gdb-patches

Eli Zaretskii writes:
 > > From: Doug Evans <dje@google.com>
 > > Date: Thu, 20 Nov 2014 13:24:23 -0800
 > > 
 > > This patch provides an API call to add a separate debug file to an
 > > objfile.
 > > 
 > > 2014-11-20  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".
 > > 
 > > 	doc/
 > > 	* python.texi (Objfiles In Python): Document
 > > 	Objfile.add_separate_debug_file.
 > > 
 > > 	testsuite/
 > > 	* gdb.python/py-objfile.exp: Add tests for
 > > 	objfile.add_separate_debug_file.
 > 
 > OK for the documentation parts.
 > 
 > Thanks.

Thanks.
Here is what I committed.
[minor changes from original to account for patch 2/4 not committed yet]

commit 86e4ed39595933e04a9dcbc7dec18c1056c9cbe1
Author: Doug Evans <dje@google.com>
Date:   Thu Dec 4 12:01:22 2014 -0800

    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.

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.
diff --git a/gdb/NEWS b/gdb/NEWS
index 16ed91e..c30cda2 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -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;
+}
+
 \f
 
 /* 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"

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-12-05 18:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-20 21:24 [PATCH 3/4] python support for fetching separate debug files: add_separate_debug_file Doug Evans
2014-11-21  7:59 ` Eli Zaretskii
2014-12-05 18:37   ` Doug Evans

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).