aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2015-01-27 10:13:52 -0800
committerDoug Evans <dje@google.com>2015-01-27 10:13:52 -0800
commit3a8b707add581af37804947536025dd3e7fc1a33 (patch)
tree20c64055757dbd442dd4188b7d00d204fd719685
parent1b5493961ab1f65a3336b2178ba3d035a130f9f6 (diff)
downloadgdb-3a8b707add581af37804947536025dd3e7fc1a33.zip
gdb-3a8b707add581af37804947536025dd3e7fc1a33.tar.gz
gdb-3a8b707add581af37804947536025dd3e7fc1a33.tar.bz2
Add gdb.Objfile.username.
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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/NEWS6
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/python.texi7
-rw-r--r--gdb/python/py-objfile.c21
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.python/py-objfile.exp18
7 files changed, 68 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 19e231f..03b8712 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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 _.
diff --git a/gdb/NEWS b/gdb/NEWS
index c0cf706..bd85967 100644
--- 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'
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index c5340a8..be563f5 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,5 +1,9 @@
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.
* guile.texi (Objfiles In Guile) <objfile-filename>: Improve docs.
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index ba03841..7c04af7 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -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.
diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index 378db58..0aecaf6 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -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 },
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 1eb72db..e8c80da 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp
index cddbd3d..b53f5e3 100644
--- a/gdb/testsuite/gdb.python/py-objfile.exp
+++ b/gdb/testsuite/gdb.python/py-objfile.exp
@@ -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"