Expose type alignment on gdb.Type
This adds an "alignof" attribute to gdb.Type in the Python API. 2018-04-30 Tom Tromey <tom@tromey.com> * NEWS: Mention Type.align. * python/py-type.c (typy_get_alignof): New function. (type_object_getset): Add "alignof". 2018-04-30 Tom Tromey <tom@tromey.com> * python.texi (Types In Python): Document Type.align. 2018-04-30 Tom Tromey <tom@tromey.com> * gdb.python/py-type.exp: Check align attribute. * gdb.python/py-type.c: New "aligncheck" global.
This commit is contained in:
parent
007e153034
commit
6d7bb8246b
gdb
@ -1,3 +1,9 @@
|
|||||||
|
2018-04-30 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* NEWS: Mention Type.align.
|
||||||
|
* python/py-type.c (typy_get_alignof): New function.
|
||||||
|
(type_object_getset): Add "alignof".
|
||||||
|
|
||||||
2018-04-30 Tom Tromey <tom@tromey.com>
|
2018-04-30 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
PR exp/17095:
|
PR exp/17095:
|
||||||
|
4
gdb/NEWS
4
gdb/NEWS
@ -27,6 +27,10 @@ set|show record btrace cpu
|
|||||||
Controls the processor to be used for enabling errata workarounds for
|
Controls the processor to be used for enabling errata workarounds for
|
||||||
branch trace decode.
|
branch trace decode.
|
||||||
|
|
||||||
|
* Python API
|
||||||
|
|
||||||
|
** Type alignment is now exposed via the "align" attribute of a gdb.Type.
|
||||||
|
|
||||||
* New targets
|
* New targets
|
||||||
|
|
||||||
RiscV ELF riscv*-*-elf
|
RiscV ELF riscv*-*-elf
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2018-04-30 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* python.texi (Types In Python): Document Type.align.
|
||||||
|
|
||||||
2018-04-13 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
2018-04-13 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* gdb.texinfo (Symbols): Mention the fact that "info
|
* gdb.texinfo (Symbols): Mention the fact that "info
|
||||||
|
@ -930,6 +930,13 @@ description of the @code{Type.fields} method for a description of the
|
|||||||
|
|
||||||
An instance of @code{Type} has the following attributes:
|
An instance of @code{Type} has the following attributes:
|
||||||
|
|
||||||
|
@defvar Type.alignof
|
||||||
|
The alignment of this type, in bytes. Type alignment comes from the
|
||||||
|
debugging information; if it was not specified, then @value{GDBN} will
|
||||||
|
use the relevant ABI to try to determine the alignment. In some
|
||||||
|
cases, even this is not possible, and zero will be returned.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@defvar Type.code
|
@defvar Type.code
|
||||||
The type code for this type. The type code will be one of the
|
The type code for this type. The type code will be one of the
|
||||||
@code{TYPE_CODE_} constants defined below.
|
@code{TYPE_CODE_} constants defined below.
|
||||||
|
@ -730,6 +730,28 @@ typy_get_sizeof (PyObject *self, void *closure)
|
|||||||
return gdb_py_long_from_longest (TYPE_LENGTH (type));
|
return gdb_py_long_from_longest (TYPE_LENGTH (type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the alignment of the type represented by SELF, in bytes. */
|
||||||
|
static PyObject *
|
||||||
|
typy_get_alignof (PyObject *self, void *closure)
|
||||||
|
{
|
||||||
|
struct type *type = ((type_object *) self)->type;
|
||||||
|
|
||||||
|
ULONGEST align = 0;
|
||||||
|
TRY
|
||||||
|
{
|
||||||
|
align = type_align (type);
|
||||||
|
}
|
||||||
|
CATCH (except, RETURN_MASK_ALL)
|
||||||
|
{
|
||||||
|
align = 0;
|
||||||
|
}
|
||||||
|
END_CATCH
|
||||||
|
|
||||||
|
/* Ignore exceptions. */
|
||||||
|
|
||||||
|
return gdb_py_object_from_ulongest (align);
|
||||||
|
}
|
||||||
|
|
||||||
static struct type *
|
static struct type *
|
||||||
typy_lookup_typename (const char *type_name, const struct block *block)
|
typy_lookup_typename (const char *type_name, const struct block *block)
|
||||||
{
|
{
|
||||||
@ -1410,6 +1432,8 @@ gdbpy_initialize_types (void)
|
|||||||
|
|
||||||
static gdb_PyGetSetDef type_object_getset[] =
|
static gdb_PyGetSetDef type_object_getset[] =
|
||||||
{
|
{
|
||||||
|
{ "alignof", typy_get_alignof, NULL,
|
||||||
|
"The alignment of this type, in bytes.", NULL },
|
||||||
{ "code", typy_get_code, NULL,
|
{ "code", typy_get_code, NULL,
|
||||||
"The code for this type.", NULL },
|
"The code for this type.", NULL },
|
||||||
{ "name", typy_get_name, NULL,
|
{ "name", typy_get_name, NULL,
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2018-04-30 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* gdb.python/py-type.exp: Check align attribute.
|
||||||
|
* gdb.python/py-type.c: New "aligncheck" global.
|
||||||
|
|
||||||
2018-04-30 Tom Tromey <tom@tromey.com>
|
2018-04-30 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
PR exp/17095:
|
PR exp/17095:
|
||||||
|
@ -30,6 +30,8 @@ struct SS
|
|||||||
typedef struct s TS;
|
typedef struct s TS;
|
||||||
TS ts;
|
TS ts;
|
||||||
|
|
||||||
|
int aligncheck;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
struct C
|
struct C
|
||||||
{
|
{
|
||||||
|
@ -278,6 +278,10 @@ if { [build_inferior "${binfile}" "c"] == 0 } {
|
|||||||
gdb_test "python print(gdb.lookup_type('int').optimized_out())" \
|
gdb_test "python print(gdb.lookup_type('int').optimized_out())" \
|
||||||
"<optimized out>"
|
"<optimized out>"
|
||||||
|
|
||||||
|
set sint [get_sizeof int 0]
|
||||||
|
gdb_test "python print(gdb.parse_and_eval('aligncheck').type.alignof)" \
|
||||||
|
$sint
|
||||||
|
|
||||||
with_test_prefix "lang_c" {
|
with_test_prefix "lang_c" {
|
||||||
runto_bp "break to inspect struct and array."
|
runto_bp "break to inspect struct and array."
|
||||||
test_fields "c"
|
test_fields "c"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user