X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fpython%2Fpy-symtab.c;h=af70170c9e0508c2655d4bc5eefb58fcfd2612dd;hb=870f88f7551b0f2d6aaaa36fb684b5ff8f468107;hp=8f4208d533401d5cb83d84821ff57879f7e6786f;hpb=346d1dfebdbc5b7c8ce7d84f9250cbb8f4ec3e6c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index 8f4208d533..af70170c9e 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -1,6 +1,6 @@ /* Python interface to symbol tables. - Copyright (C) 2008-2014 Free Software Foundation, Inc. + Copyright (C) 2008-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -37,7 +37,7 @@ typedef struct stpy_symtab_object { struct stpy_symtab_object *next; } symtab_object; -static PyTypeObject symtab_object_type +extern PyTypeObject symtab_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symtab_object"); static const struct objfile_data *stpy_objfile_data_key; @@ -68,7 +68,7 @@ typedef struct salpy_sal_object { struct salpy_sal_object *next; } sal_object; -static PyTypeObject sal_object_type +extern PyTypeObject sal_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("sal_object"); static const struct objfile_data *salpy_objfile_data_key; @@ -108,8 +108,7 @@ stpy_get_filename (PyObject *self, void *closure) STPY_REQUIRE_VALID (self, symtab); filename = symtab_to_filename_for_display (symtab); - str_obj = PyString_Decode (filename, strlen (filename), - host_charset (), NULL); + str_obj = host_string_to_python_string (filename); return str_obj; } @@ -121,11 +120,31 @@ stpy_get_objfile (PyObject *self, void *closure) STPY_REQUIRE_VALID (self, symtab); - result = objfile_to_objfile_object (symtab->objfile); + result = objfile_to_objfile_object (SYMTAB_OBJFILE (symtab)); Py_XINCREF (result); return result; } +/* Getter function for symtab.producer. */ + +static PyObject * +stpy_get_producer (PyObject *self, void *closure) +{ + struct symtab *symtab = NULL; + struct compunit_symtab *cust; + + STPY_REQUIRE_VALID (self, symtab); + cust = SYMTAB_COMPUNIT (symtab); + if (COMPUNIT_PRODUCER (cust) != NULL) + { + const char *producer = COMPUNIT_PRODUCER (cust); + + return host_string_to_python_string (producer); + } + + Py_RETURN_NONE; +} + static PyObject * stpy_fullname (PyObject *self, PyObject *args) { @@ -136,7 +155,7 @@ stpy_fullname (PyObject *self, PyObject *args) fullname = symtab_to_fullname (symtab); - return PyString_Decode (fullname, strlen (fullname), host_charset (), NULL); + return host_string_to_python_string (fullname); } /* Implementation of gdb.Symtab.is_valid (self) -> Boolean. @@ -165,9 +184,9 @@ stpy_global_block (PyObject *self, PyObject *args) STPY_REQUIRE_VALID (self, symtab); - blockvector = BLOCKVECTOR (symtab); + blockvector = SYMTAB_BLOCKVECTOR (symtab); block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK); - return block_to_block_object (block, symtab->objfile); + return block_to_block_object (block, SYMTAB_OBJFILE (symtab)); } /* Return the STATIC_BLOCK of the underlying symtab. */ @@ -181,13 +200,13 @@ stpy_static_block (PyObject *self, PyObject *args) STPY_REQUIRE_VALID (self, symtab); - blockvector = BLOCKVECTOR (symtab); + blockvector = SYMTAB_BLOCKVECTOR (symtab); block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK); - return block_to_block_object (block, symtab->objfile); + return block_to_block_object (block, SYMTAB_OBJFILE (symtab)); } -/* Implementation of gdb.Symtab.linetable (self) -> gdb.Linetable. - Returns a gdb.Linetable object corresponding to this symbol +/* Implementation of gdb.Symtab.linetable (self) -> gdb.LineTable. + Returns a gdb.LineTable object corresponding to this symbol table. */ static PyObject * @@ -233,7 +252,7 @@ stpy_dealloc (PyObject *obj) symtab->prev->next = symtab->next; else if (symtab->symtab) { - set_objfile_data (symtab->symtab->objfile, + set_objfile_data (SYMTAB_OBJFILE (symtab->symtab), stpy_objfile_data_key, symtab->next); } if (symtab->next) @@ -314,7 +333,7 @@ salpy_dealloc (PyObject *self) if (self_sal->prev) self_sal->prev->next = self_sal->next; else if (self_sal->symtab != (symtab_object * ) Py_None) - set_objfile_data (self_sal->symtab->symtab->objfile, + set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab), salpy_objfile_data_key, self_sal->next); if (self_sal->next) @@ -349,8 +368,9 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) Py_INCREF (Py_None); } - sal_obj->sal = xmemdup (&sal, sizeof (struct symtab_and_line), - sizeof (struct symtab_and_line)); + sal_obj->sal = ((struct symtab_and_line *) + xmemdup (&sal, sizeof (struct symtab_and_line), + sizeof (struct symtab_and_line))); sal_obj->symtab = symtab_obj; sal_obj->prev = NULL; @@ -358,12 +378,14 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) objfile cleanup observer linked list. */ if (sal_obj->symtab != (symtab_object *)Py_None) { - sal_obj->next = objfile_data (sal_obj->symtab->symtab->objfile, - salpy_objfile_data_key); + sal_obj->next + = ((struct salpy_sal_object *) + objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), + salpy_objfile_data_key)); if (sal_obj->next) sal_obj->next->prev = sal_obj; - set_objfile_data (sal_obj->symtab->symtab->objfile, + set_objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), salpy_objfile_data_key, sal_obj); } else @@ -384,10 +406,12 @@ set_symtab (symtab_object *obj, struct symtab *symtab) obj->prev = NULL; if (symtab) { - obj->next = objfile_data (symtab->objfile, stpy_objfile_data_key); + obj->next + = ((struct stpy_symtab_object *) + objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key)); if (obj->next) obj->next->prev = obj; - set_objfile_data (symtab->objfile, stpy_objfile_data_key, obj); + set_objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key, obj); } else obj->next = NULL; @@ -413,7 +437,6 @@ PyObject * symtab_and_line_to_sal_object (struct symtab_and_line sal) { sal_object *sal_obj; - int success = 0; sal_obj = PyObject_New (sal_object, &sal_object_type); if (sal_obj) @@ -455,7 +478,7 @@ symtab_object_to_symtab (PyObject *obj) static void del_objfile_symtab (struct objfile *objfile, void *datum) { - symtab_object *obj = datum; + symtab_object *obj = (symtab_object *) datum; while (obj) { @@ -476,7 +499,7 @@ del_objfile_symtab (struct objfile *objfile, void *datum) static void del_objfile_sal (struct objfile *objfile, void *datum) { - sal_object *obj = datum; + sal_object *obj = (sal_object *) datum; while (obj) { @@ -530,6 +553,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 */ }; @@ -547,12 +572,12 @@ Return the global block of the symbol table." }, "static_block () -> gdb.Block.\n\ Return the static block of the symbol table." }, { "linetable", stpy_get_linetable, METH_NOARGS, - "linetable () -> gdb.Linetable.\n\ -Return the Linetable associated with this symbol table" }, + "linetable () -> gdb.LineTable.\n\ +Return the LineTable associated with this symbol table" }, {NULL} /* Sentinel */ }; -static PyTypeObject symtab_object_type = { +PyTypeObject symtab_object_type = { PyVarObject_HEAD_INIT (NULL, 0) "gdb.Symtab", /*tp_name*/ sizeof (symtab_object), /*tp_basicsize*/ @@ -602,7 +627,7 @@ Return true if this symbol table and line is valid, false if not." }, {NULL} /* Sentinel */ }; -static PyTypeObject sal_object_type = { +PyTypeObject sal_object_type = { PyVarObject_HEAD_INIT (NULL, 0) "gdb.Symtab_and_line", /*tp_name*/ sizeof (sal_object), /*tp_basicsize*/