bitfield-parent-optimized-out: Fix struct definition

Message ID m3bmxlx0ya.fsf@oc1027705133.ibm.com
State New, archived
Headers

Commit Message

Andreas Arnez Nov. 11, 2016, 7:37 p.m. UTC
  The "struct S" type in bitfield-parent-optimized-out.exp is declared to
have a size of 4 bytes but to hold two 4-byte members: an int-based
bitfield and a 4-byte int.  Also, both members have the same
data_member_location 2, causing them to overlap and to reach 2 bytes
beyond the structure's boundary.

This is fixed by increasing the structure size to 8 and setting the
first and second member's data_member_location to 0 and 4, respectively.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/bitfield-parent-optimized-out.exp: Fix DWARF code for
	the definition of struct S.
---
 gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
  

Comments

Luis Machado Nov. 11, 2016, 11:26 p.m. UTC | #1
On 11/11/2016 01:37 PM, Andreas Arnez wrote:
> The "struct S" type in bitfield-parent-optimized-out.exp is declared to
> have a size of 4 bytes but to hold two 4-byte members: an int-based
> bitfield and a 4-byte int.  Also, both members have the same
> data_member_location 2, causing them to overlap and to reach 2 bytes
> beyond the structure's boundary.
>
> This is fixed by increasing the structure size to 8 and setting the
> first and second member's data_member_location to 0 and 4, respectively.
>
> gdb/testsuite/ChangeLog:
>
> 	* gdb.dwarf2/bitfield-parent-optimized-out.exp: Fix DWARF code for
> 	the definition of struct S.
> ---
>  gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
> index 27d8044..b789970 100644
> --- a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
> +++ b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
> @@ -43,19 +43,18 @@ Dwarf::assemble $asm_file {
>
>  	    struct_label: structure_type {
>  		{name S}
> -		{byte_size 4 DW_FORM_sdata}
> +		{byte_size 8 DW_FORM_sdata}
>  	    } {
>  		member {
>  		    {name bitfield}
>  		    {type :$int_label}
>  		    {bit_size 12 DW_FORM_sdata}
>  		    {bit_offset 20 DW_FORM_sdata}
> -		    {data_member_location 2 DW_FORM_sdata}
>  		}
>  		member {
>  		    {name intfield}
>  		    {type :$int_label}
> -		    {data_member_location 2 DW_FORM_sdata}
> +		    {data_member_location 4 DW_FORM_sdata}
>  		}
>  	    }
>
>

The patch looks good to me, but i'm wondering if Pedro meant for both 
members to overlap (a union) instead of being two separate members?
  
Pedro Alves Nov. 15, 2016, 6:12 p.m. UTC | #2
On 11/11/2016 11:26 PM, Luis Machado wrote:
> On 11/11/2016 01:37 PM, Andreas Arnez wrote:
>> The "struct S" type in bitfield-parent-optimized-out.exp is declared to
>> have a size of 4 bytes but to hold two 4-byte members: an int-based
>> bitfield and a 4-byte int.  Also, both members have the same
>> data_member_location 2, causing them to overlap and to reach 2 bytes
>> beyond the structure's boundary.
>>
>> This is fixed by increasing the structure size to 8 and setting the
>> first and second member's data_member_location to 0 and 4, respectively.
>>
>> gdb/testsuite/ChangeLog:
>>
>>     * gdb.dwarf2/bitfield-parent-optimized-out.exp: Fix DWARF code for
>>     the definition of struct S.
>> ---
>>  gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp | 5 ++---
>>  1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git
>> a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
>> b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
>> index 27d8044..b789970 100644
>> --- a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
>> +++ b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
>> @@ -43,19 +43,18 @@ Dwarf::assemble $asm_file {
>>
>>          struct_label: structure_type {
>>          {name S}
>> -        {byte_size 4 DW_FORM_sdata}
>> +        {byte_size 8 DW_FORM_sdata}
>>          } {
>>          member {
>>              {name bitfield}
>>              {type :$int_label}
>>              {bit_size 12 DW_FORM_sdata}
>>              {bit_offset 20 DW_FORM_sdata}
>> -            {data_member_location 2 DW_FORM_sdata}
>>          }
>>          member {
>>              {name intfield}
>>              {type :$int_label}
>> -            {data_member_location 2 DW_FORM_sdata}
>> +            {data_member_location 4 DW_FORM_sdata}
>>          }
>>          }
>>
>>
> 
> The patch looks good to me, but i'm wondering if Pedro meant for both
> members to overlap (a union) instead of being two separate members?

Possibly; I don't remember.  If the changed test would still trigger
the old GDB bug, then I'm fine with the change.

Thanks,
Pedro Alves
  
Andreas Arnez Nov. 15, 2016, 7:52 p.m. UTC | #3
On Tue, Nov 15 2016, Pedro Alves wrote:

> On 11/11/2016 11:26 PM, Luis Machado wrote:

>> The patch looks good to me, but i'm wondering if Pedro meant for both
>> members to overlap (a union) instead of being two separate members?
>
> Possibly; I don't remember.  If the changed test would still trigger
> the old GDB bug, then I'm fine with the change.

Yes, the bug is triggered both with the old and new version of
bitfield-parent-optimized-out.exp:

  p var.bitfield
  ERROR: Process no longer exists
  UNRESOLVED: gdb.dwarf2/bitfield-parent-optimized-out.exp: p var.bitfield
  ERROR: Couldn't send p var.intfield to GDB.
  UNRESOLVED: gdb.dwarf2/bitfield-parent-optimized-out.exp: p var.intfield

Thanks, pushed.

--
Andreas
  

Patch

diff --git a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
index 27d8044..b789970 100644
--- a/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
+++ b/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp
@@ -43,19 +43,18 @@  Dwarf::assemble $asm_file {
 
 	    struct_label: structure_type {
 		{name S}
-		{byte_size 4 DW_FORM_sdata}
+		{byte_size 8 DW_FORM_sdata}
 	    } {
 		member {
 		    {name bitfield}
 		    {type :$int_label}
 		    {bit_size 12 DW_FORM_sdata}
 		    {bit_offset 20 DW_FORM_sdata}
-		    {data_member_location 2 DW_FORM_sdata}
 		}
 		member {
 		    {name intfield}
 		    {type :$int_label}
-		    {data_member_location 2 DW_FORM_sdata}
+		    {data_member_location 4 DW_FORM_sdata}
 		}
 	    }