[2/2] Add objfile.username
Commit Message
Hi.
I have a need to expose objfile->original_name to python,
this patch implements the feature.
2015-01-20 Doug Evans <dje@google.com>
* NEWS: Mention gdb.Objfile.username.
* python/py-objfile.c (objfpy_get_username): New function.
(objfile_getset): Add "username".
doc/
* python.texi (Objfiles In Python): Document Objfile.username.
testsuite/
* gdb.python/py-objfile.exp: Add tests for objfile.username.
Comments
> From: Doug Evans <dje@google.com>
> Date: Tue, 20 Jan 2015 15:19:34 -0800
>
> I have a need to expose objfile->original_name to python,
> this patch implements the feature.
>
> 2015-01-20 Doug Evans <dje@google.com>
>
> * NEWS: Mention gdb.Objfile.username.
> * python/py-objfile.c (objfpy_get_username): New function.
> (objfile_getset): Add "username".
>
> doc/
> * python.texi (Objfiles In Python): Document Objfile.username.
>
> testsuite/
> * gdb.python/py-objfile.exp: Add tests for objfile.username.
OK for the documentation parts.
Thanks.
@@ -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.
+
*** Changes in GDB 7.9
* GDB now supports hardware watchpoints on x86 GNU Hurd.
@@ -3516,6 +3516,13 @@ class.
The file name of the objfile as a string.
@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.
@@ -81,6 +81,21 @@ 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;
+ const char *username = obj->objfile->original_name;
+
+ if (obj->objfile)
+ 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 +628,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 },
@@ -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\"))" \
@@ -107,6 +110,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"