From a72289f4cc52ffa86afcca2b31e8daac34c9de90 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Thu, 10 Dec 2015 12:00:31 -0800 Subject: [PATCH] patch ../102429401.patch --- README.google | 14 +++++++++++++ gdb/NEWS | 2 ++ gdb/doc/python.texi | 9 ++++++++ gdb/python/py-objfile.c | 28 +++++++++++++++++++++++++ gdb/testsuite/gdb.python/py-objfile.exp | 6 ++++++ 5 files changed, 59 insertions(+) diff --git a/README.google b/README.google index c4cbbb236a3..04be03c3175 100644 --- a/README.google +++ b/README.google @@ -208,3 +208,17 @@ they are an ongoing maintenance burden. + + Upstream PR libc/13097, local ref# 17474967 + * solib-svr4.c (svr4_read_so_list): Ignore linux-vdso64.so.1, for ppc. +--- README.google 2015-09-05 18:02:29.000000000 -0700 ++++ README.google 2015-09-05 18:13:45.000000000 -0700 ++ ++2015-09-05 Doug Evans ++ ++ * NEWS: Mention gdb.Objfile.have_debug_info. ++ * python/py-objfile.c (objfpy_get_have_debug_info): New function. ++ (objfile_getset): Add "have_debug_info". ++ ++ doc/ ++ * python.texi (Objfiles In Python): Document Objfile.have_debug_info. ++ ++ testsuite/ ++ * gdb.python/py-objfile.exp: Add tests for objfile.have_debug_info. diff --git a/gdb/NEWS b/gdb/NEWS index 26f328d2b9a..83cba9e5390 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -76,6 +76,8 @@ * Python Scripting + ** 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 attribute "username", which is the name of the objfile as specified by the user, without, for example, resolving symlinks. diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index a2df254db03..45de2bf8a30 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3720,6 +3720,15 @@ command-line option in @ref{Options, , Command Line Options, ld.info, The GNU Linker}. @end defvar +@defvar Objfile.have_debug_info +A boolean indicating if debug information for the objfile is present. +Note that a program compiled without @samp{-g} may still have some debug +information, e.g., from the @code{C} runtime. Thus a value of @code{True} +for this attribute does not mean that debug information is present for +every source file in the program. It only means that debug information +is present for at least one source file. +@end defvar + @defvar Objfile.progspace The containing program space of the objfile as a @code{gdb.Progspace} object. @xref{Progspaces In Python}. diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 5dc9ae65ed9..3cc510cd52a 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -161,6 +161,32 @@ objfpy_get_build_id (PyObject *self, void *closure) Py_RETURN_NONE; } +/* An Objfile method which returns whether there debug information + has been stripped. */ + +static PyObject * +objfpy_get_have_debug_info (PyObject *self, void *closure) +{ + objfile_object *obj = (objfile_object *) self; + struct objfile *objfile = obj->objfile; + + if (objfile != NULL) + { + /* This uses the same test that the file readers use, e.g., + elf_symfile_read, because its main purpose is to decide whether + separate debug info files should be fetched. + See elf_symfile_read. */ + if (!objfile_has_partial_symbols (objfile) + && !objfile_has_full_symbols (objfile) + && objfile->separate_debug_objfile == NULL + && objfile->separate_debug_objfile_backlink == NULL) + Py_RETURN_FALSE; + Py_RETURN_TRUE; + } + + Py_RETURN_FALSE; +} + /* An Objfile method which returns the objfile's progspace, or None. */ static PyObject * @@ -695,6 +721,8 @@ static PyGetSetDef objfile_getset[] = NULL }, { "build_id", objfpy_get_build_id, NULL, "The objfile's build id, or None.", NULL }, + { "have_debug_info", objfpy_get_have_debug_info, NULL, + "True if there is debug information for the objfile.", NULL }, { "progspace", objfpy_get_progspace, NULL, "The objfile's progspace, or None.", NULL }, { "pretty_printers", objfpy_get_printers, objfpy_set_printers, diff --git a/gdb/testsuite/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp index 4de20c50132..982346a5220 100644 --- a/gdb/testsuite/gdb.python/py-objfile.exp +++ b/gdb/testsuite/gdb.python/py-objfile.exp @@ -61,6 +61,9 @@ if [string compare $binfile_build_id ""] { unsupported "build-id is not supported by the compiler" } +gdb_test "python print (objfile.have_debug_info)" "True" \ + "Get objfile have_debug_info" + # Other lookup_objfile_by_build_id tests we can do, even if compiler doesn't # support them. gdb_test "python print (gdb.lookup_objfile (\"foo\", by_build_id=True))" \ @@ -107,6 +110,9 @@ if ![runto_main] { gdb_py_test_silent_cmd "python objfile = gdb.objfiles()\[0\]" \ "Get no-debug objfile file" 1 +gdb_test "python print (objfile.have_debug_info)" "False" \ + "Get no-debug objfile have_debug_info" + gdb_test "python print (objfile.owner)" "None" \ "Test owner of real objfile." -- 2.47.2