This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
gdb and binutils branch master updated. dc53a7adb516adbf2f646a078a1140b1044a39f5
- From: brobecke at sourceware dot org
- To: gdb-cvs at sourceware dot org
- Date: 26 Feb 2014 14:34:17 -0000
- Subject: gdb and binutils branch master updated. dc53a7adb516adbf2f646a078a1140b1044a39f5
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".
The branch, master has been updated
via dc53a7adb516adbf2f646a078a1140b1044a39f5 (commit)
from 12ab52e9772a9170018feb44de3ef217e051cc60 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=dc53a7adb516adbf2f646a078a1140b1044a39f5
commit dc53a7adb516adbf2f646a078a1140b1044a39f5
Author: Joel Brobecker <brobecker@adacore.com>
Date: Wed Jan 29 17:39:56 2014 +0400
DWARF: Add array DW_AT_bit_stride and DW_AT_byte_stride support
Consider the following declarations in Ada...
type Item is range -32 .. 31;
for Item'Size use 6;
type Table is array (Natural range 0 .. 4) of Item;
pragma Pack (Table);
... which declare a packed array whose elements are 6 bits long.
The debugger currently does not notice that the array is packed,
and thus prints values of this type incorrectly. This can be seen
in the "ptype" output:
(gdb) ptype table
type = array (0 .. 4) of foo.item
Normally, the debugger should print:
(gdb) ptype table
type = array (0 .. 4) of foo.item <packed: 6-bit elements>
The debugging information for this array looks like this:
.uleb128 0xf # (DIE (0x15c) DW_TAG_array_type)
.long .LASF9 # DW_AT_name: "pck__table"
.byte 0x6 # DW_AT_bit_stride
.long 0x1a9 # DW_AT_type
.uleb128 0x10 # (DIE (0x16a) DW_TAG_subrange_type)
.long 0x3b # DW_AT_type
.byte 0 # DW_AT_lower_bound
.byte 0x4 # DW_AT_upper_bound
.byte 0 # end of children of DIE 0x15c
The interesting part is the DW_AT_bit_stride attribute, which tells
the size of the array elements is 6 bits, rather than the normal
element type's size.
This patch adds support for this attribute by first creating
gdbtypes.c::create_array_type_with_stride, which is an enhanced
version of create_array_type taking an extra parameter as the stride.
The old create_array_type can then be re-implemented very simply
by calling the new create_array_type_with_stride.
We can then use this new function from dwarf2read, to create
arrays with or without stride.
gdb/ChangeLog:
* gdbtypes.h (create_array_type_with_stride): Add declaration.
* gdbtypes.c (create_array_type_with_stride): New function,
renaming create_array_type, but with an added parameter
called "bit_stride".
(create_array_type): Re-implement using
create_array_type_with_stride.
* dwarf2read.c (read_array_type): Add support for DW_AT_byte_stride
and DW_AT_bit_stride attributes.
gdb/testsuite/ChangeLog:
* gdb.dwarf2/arr-stride.c: New file.
* gdb.dwarf2/arr-stride.exp: New file.
The test, relying purely on generating an assembly file, only
verifies the type description of our array. But I was also
able to verify manually that the debugger print values of these
types correctly as well (which was not the case prior to this
patch).
-----------------------------------------------------------------------
Summary of changes:
gdb/ChangeLog | 11 +++
gdb/dwarf2read.c | 18 ++++-
gdb/gdbtypes.c | 27 +++++++-
gdb/gdbtypes.h | 4 +
gdb/testsuite/ChangeLog | 5 ++
gdb/testsuite/gdb.dwarf2/arr-stride.c | 20 ++++++
gdb/testsuite/gdb.dwarf2/arr-stride.exp | 108 +++++++++++++++++++++++++++++++
7 files changed, 187 insertions(+), 6 deletions(-)
create mode 100644 gdb/testsuite/gdb.dwarf2/arr-stride.c
create mode 100644 gdb/testsuite/gdb.dwarf2/arr-stride.exp
hooks/post-receive
--
gdb and binutils