New "producer" attribute of python gdb.Symtab.

gdb/ChangeLog:

	* NEWS: Mention new "producer" attribute of gdb.Symtab.
	* python/py-symtab.c (stpy_get_producer): New function.
	(symtab_object_getset): Add "producer" attribute.

gdb/doc/ChangeLog:

	* python.texi (Symbol Tables In Python): Document "producer"
	attribute of gdb.Symtab objects.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/symtab-producer.exp: New file.
This commit is contained in:
Doug Evans 2014-09-18 10:09:12 -07:00
parent 92c9bcd479
commit 2b4fd423cf
7 changed files with 150 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2014-09-18 Doug Evans <dje@google.com>
* NEWS: Mention new "producer" attribute of gdb.Symtab.
* python/py-symtab.c (stpy_get_producer): New function.
(symtab_object_getset): Add "producer" attribute.
2014-09-17 Ulrich Weigand  <uweigand@de.ibm.com>
PR gdb/17384

View File

@ -6,7 +6,9 @@
* GDB now supports hardware watchpoints on x86 GNU Hurd.
* Python Scripting
You can now access frame registers from Python scripts.
** You can now access frame registers from Python scripts.
** New attribute 'producer' for gdb.Symtab objects.
* New Python-based convenience functions:

View File

@ -1,3 +1,8 @@
2014-09-18 Doug Evans <dje@google.com>
* python.texi (Symbol Tables In Python): Document "producer"
attribute of gdb.Symtab objects.
2014-09-16 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Starting) <run command>: Don't mention VxWorks.

View File

@ -4043,6 +4043,14 @@ The symbol table's backing object file. @xref{Objfiles In Python}.
This attribute is not writable.
@end defvar
@defvar Symtab.producer
The name and possibly version number of the program that
compiled the code in the symbol table.
The contents of this string is up to the compiler.
If no producer information is available then @code{None} is returned.
This attribute is not writable.
@end defvar
A @code{gdb.Symtab} object has the following methods:
@defun Symtab.is_valid ()

View File

@ -126,6 +126,25 @@ stpy_get_objfile (PyObject *self, void *closure)
return result;
}
/* Getter function for symtab.producer. */
static PyObject *
stpy_get_producer (PyObject *self, void *closure)
{
struct symtab *symtab = NULL;
STPY_REQUIRE_VALID (self, symtab);
if (symtab->producer != NULL)
{
const char *producer = symtab->producer;
return PyString_Decode (producer, strlen (producer),
host_charset (), NULL);
}
Py_RETURN_NONE;
}
static PyObject *
stpy_fullname (PyObject *self, PyObject *args)
{
@ -530,6 +549,8 @@ static PyGetSetDef symtab_object_getset[] = {
"The symbol table's source filename.", NULL },
{ "objfile", stpy_get_objfile, NULL, "The symtab's objfile.",
NULL },
{ "producer", stpy_get_producer, NULL,
"The name/version of the program that compiled this symtab.", NULL },
{NULL} /* Sentinel */
};

View File

@ -1,3 +1,7 @@
2014-09-18 Doug Evans <dje@google.com>
* gdb.dwarf2/symtab-producer.exp: New file.
2014-09-16 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.base/global-var-nested-by-dso-solib1.c: New file.

View File

@ -0,0 +1,103 @@
# Copyright 2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib dwarf.exp
load_lib gdb-python.exp
# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
return 0
}
# This test can also only be run when we have python support in gdb,
# but that test can only be done after gdb has started, below.
standard_testfile main.c symtab-producer-dw.S
# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
cu {} {
DW_TAG_compile_unit {
{DW_AT_producer "ACME Compiler Company"}
{DW_AT_language @DW_LANG_C}
{DW_AT_name symtab-producer-dw.c}
{DW_AT_comp_dir /tmp}
} {
declare_labels integer_label
integer_label: DW_TAG_base_type {
{DW_AT_byte_size 4 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed}
{DW_AT_name integer}
}
DW_TAG_variable {
{DW_AT_name with_producer}
{DW_AT_type :$integer_label}
{DW_AT_external 1 flag}
{DW_AT_const_value 42 DW_FORM_sdata}
}
}
}
cu {} {
DW_TAG_compile_unit {
{DW_AT_language @DW_LANG_C}
{DW_AT_name symtab-producer2-dw.c}
{DW_AT_comp_dir /tmp}
} {
declare_labels integer_label
integer_label: DW_TAG_base_type {
{DW_AT_byte_size 4 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed}
{DW_AT_name integer}
}
DW_TAG_variable {
{DW_AT_name without_producer}
{DW_AT_type :$integer_label}
{DW_AT_external 1 flag}
{DW_AT_const_value 43 DW_FORM_sdata}
}
}
}
}
# We need --readnow because otherwise we never read in the CUs we
# created above.
set saved_gdbflags $GDBFLAGS
set GDBFLAGS "$GDBFLAGS -readnow"
if { [prepare_for_testing ${testfile}.exp ${testfile} \
[list $srcfile $asm_file] {nodebug}] } {
set GDBFLAGS $saved_gdbflags
return -1
}
set GDBFLAGS $saved_gdbflags
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
gdb_py_test_silent_cmd "python with_producer = gdb.lookup_global_symbol(\"with_producer\")" \
"get with_producer symbol" 0
gdb_test "python print with_producer.symtab.producer" "ACME Compiler Company"
gdb_py_test_silent_cmd "python without_producer = gdb.lookup_global_symbol(\"without_producer\")" \
"get without_producer symbol" 0
gdb_test "python print without_producer.symtab.producer" "None"