From 3a8b707add581af37804947536025dd3e7fc1a33 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 27 Jan 2015 10:13:52 -0800 Subject: [PATCH] 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. --- gdb/ChangeLog | 6 ++++++ gdb/NEWS | 6 ++++++ gdb/doc/ChangeLog | 4 ++++ gdb/doc/python.texi | 7 +++++++ gdb/python/py-objfile.c | 21 +++++++++++++++++++++ gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.python/py-objfile.exp | 18 ++++++++++++++++++ 7 files changed, 68 insertions(+) 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 + + * NEWS: Mention gdb.Objfile.username. + * python/py-objfile.c (objfpy_get_username): New function. + (objfile_getset): Add "username". + 2015-01-24 Mark Wielaard * 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 + * python.texi (Objfiles In Python): Document Objfile.username. + +2015-01-27 Doug Evans + * python.texi (Objfiles In Python) : Improve docs. * guile.texi (Objfiles In Guile) : 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 + + * 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 * 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
" \ "print main with debug info" -- 2.7.4