Add gdb.Objfile.username.
authorDoug Evans <dje@google.com>
Tue, 27 Jan 2015 18:13:52 +0000 (10:13 -0800)
committerDoug Evans <dje@google.com>
Tue, 27 Jan 2015 18:13:52 +0000 (10:13 -0800)
gdb/ChangeLog:

* NEWS: Mention gdb.Objfile.username.
* python/py-objfile.c (objfpy_get_username): New function.
(objfile_getset): Add "username".

gdb/doc/ChangeLog:

* python.texi (Objfiles In Python): Document Objfile.username.

gdb/testsuite/ChangeLog:

* gdb.python/py-objfile.exp: Add tests for objfile.username.
Add test for objfile.filename, objfile.username after objfile
has been unloaded.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/python.texi
gdb/python/py-objfile.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-objfile.exp

index 19e231fde157b08995b8ba8aa673ea79e5478ff7..03b871239b61f50301c814ef99af6065352af774 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-27  Doug Evans  <dje@google.com>
+
+       * NEWS: Mention gdb.Objfile.username.
+       * python/py-objfile.c (objfpy_get_username): New function.
+       (objfile_getset): Add "username".
+
 2015-01-24  Mark Wielaard  <mjw@redhat.com>
 
        * stack.c (return_command): Markup warning message with _.
index c0cf706d9bf59e163f02cad9288235c52d33e889..bd85967aa5623643a90ca950aa4881559dfa4a54 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,12 @@
 
 *** Changes since GDB 7.9
 
+* Python Scripting
+
+  ** gdb.Objfile objects have a new attribute "username",
+     which is the name of the objfile as specified by the user,
+     without, for example, resolving symlinks.
+
 * New options
 
 * The command 'thread apply all' can now support new option '-ascending'
index c5340a8e336f50b5d0af72847e28f5ab66766e94..be563f5ce2cd88001154a0339426b8023bc055d2 100644 (file)
@@ -1,3 +1,7 @@
+2015-01-27  Doug Evans  <dje@google.com>
+
+       * python.texi (Objfiles In Python): Document Objfile.username.
+
 2015-01-27  Doug Evans  <dje@google.com>
 
        * python.texi (Objfiles In Python) <Objfile.filename>: Improve docs.
index ba0384114b23b55204c04bc053fe234508d08110..7c04af793e7ad927df6056c36ce95a79d5b6e859 100644 (file)
@@ -3519,6 +3519,13 @@ The value is @code{None} if the objfile is no longer valid.
 See the @code{gdb.Objfile.is_valid} method, described below.
 @end defvar
 
+@defvar Objfile.username
+The file name of the objfile as specified by the user as a string.
+
+The value is @code{None} if the objfile is no longer valid.
+See the @code{gdb.Objfile.is_valid} method, described below.
+@end defvar
+
 @defvar Objfile.owner
 For separate debug info objfiles this is the corresponding @code{gdb.Objfile}
 object that debug info is being provided for.
index 378db58fea7021467feaba785eae7fb0537a06c6..0aecaf64953eae9d04f380eb0b3e067115f28f45 100644 (file)
@@ -81,6 +81,25 @@ objfpy_get_filename (PyObject *self, void *closure)
   Py_RETURN_NONE;
 }
 
+/* An Objfile method which returns the objfile's file name, as specified
+   by the user, or None.  */
+
+static PyObject *
+objfpy_get_username (PyObject *self, void *closure)
+{
+  objfile_object *obj = (objfile_object *) self;
+
+  if (obj->objfile)
+    {
+      const char *username = obj->objfile->original_name;
+
+      return PyString_Decode (username, strlen (username),
+                             host_charset (), NULL);
+    }
+
+  Py_RETURN_NONE;
+}
+
 /* If SELF is a separate debug-info file, return the "backlink" field.
    Otherwise return None.  */
 
@@ -613,6 +632,8 @@ static PyGetSetDef objfile_getset[] =
     "The __dict__ for this objfile.", &objfile_object_type },
   { "filename", objfpy_get_filename, NULL,
     "The objfile's filename, or None.", NULL },
+  { "username", objfpy_get_username, NULL,
+    "The name of the objfile as provided by the user, or None.", NULL },
   { "owner", objfpy_get_owner, NULL,
     "The objfile owner of separate debug info objfiles, or None.",
     NULL },
index 1eb72dbed4d1c29a3b60a11783ea329af5e6cf9a..e8c80da64fd2b523f5b5104878a4aa14197b9ced 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-27  Doug Evans  <dje@google.com>
+
+       * gdb.python/py-objfile.exp: Add tests for objfile.username.
+       Add test for objfile.filename, objfile.username after objfile
+       has been unloaded.
+
 2015-01-26  Joel Brobecker  <brobecker@adacore.com>
 
        * gdb.python/py-lookup-type.exp (test_lookup_type): Change
index cddbd3de89e52af8070894c6073310b09913edc6..b53f5e3bae66a32b121d45559e266e5bf2a6b3df 100644 (file)
@@ -42,6 +42,9 @@ gdb_py_test_silent_cmd "python objfile = sym\[0\].symtab.objfile" \
 gdb_test "python print (objfile.filename)" "${testfile}" \
   "Get objfile file name"
 
+gdb_test "python print (objfile.username)" "${testfile}" \
+  "Get objfile user name"
+
 gdb_test "python print (gdb.lookup_objfile (\"${testfile}\").filename)" \
     "${testfile}"
 gdb_test "python print (gdb.lookup_objfile (\"junk\"))" \
@@ -78,6 +81,18 @@ gdb_py_test_silent_cmd "python objfile.random_attribute = 42" \
 gdb_test "python print (objfile.random_attribute)" "42" \
     "Verify set of random attribute in objfile"
 
+# Verify invalid objfile handling.
+
+if { [gdb_unload] < 0 } {
+    fail "unload all files"
+    return -1
+}
+
+gdb_test "python print objfile.filename" "None" \
+    "objfile.filename after objfile is unloaded"
+gdb_test "python print objfile.username" "None" \
+    "objfile.username after objfile is unloaded"
+
 # 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}] } {
@@ -107,6 +122,9 @@ gdb_py_test_silent_cmd "python sep_objfile = gdb.objfiles()\[0\]" \
 gdb_test "python print (sep_objfile.owner.filename)" "${testfile}2" \
     "Test owner of separate debug file"
 
+gdb_test "python print (sep_objfile.owner.username)" "${testfile}2" \
+    "Test user-name of owner of separate debug file"
+
 gdb_test "p main" "= {int \\(\\)} $hex <main>" \
     "print main with debug info"