Fix fails in gdb.dwarf2/dynarr-ptr.exp

Message ID 1428679142-8236-1-git-send-email-qiyaoltc@gmail.com
State New, archived
Headers

Commit Message

Yao Qi April 10, 2015, 3:19 p.m. UTC
  From: Yao Qi <yao.qi@linaro.org>

I see many fails in gdb.dwarf2/dynarr-ptr.exp on arm-linux target,
started from this

print foo.three_ptr.all^M
Cannot access memory at address 0x107c8^M
(gdb) FAIL: gdb.dwarf2/dynarr-ptr.exp: print foo.three_ptr.all
print foo.three_ptr.all(1)^M
Cannot access memory at address 0x107c8

It turns out that ":$ptr_size" is used incorrectly.

             array_ptr_label: DW_TAG_pointer_type {
                 {DW_AT_byte_size :$ptr_size }
                                  ^^^^^^^^^^
                 {DW_AT_type :$array_label}
             }

Since the FORM isn't given, and it starts with the ":", it is regarded
as a label reference by dwarf assembler.  The generated asm file on
x86_64 is

        .uleb128        6               /* Abbrev (DW_TAG_pointer_type) */
        .4byte        8 - .Lcu1_begin   <----- WRONG
        .4byte        .Llabel2 - .Lcu1_begin

Looks .Lcu1_begin is 0 on x86_64 and that is why this test passes on
x86_64.  On arm, .Lcu1_begin is an address somewhere, and the value
of DW_AT_byte_size is a very large number, so memory read request
of such large length failed.

This patch is to remove ":" and set the form explicitly.  The generated
asm file on x86_64 becomes

        .uleb128        6               /* Abbrev (DW_TAG_pointer_type) */
        .byte        8
        .4byte        .Llabel2 - .Lcu1_begin

gdb/testsuite:

2015-04-10  Yao Qi  <yao.qi@linaro.org>

	* gdb.dwarf2/dynarr-ptr.exp (assemble): Use $ptr_size instead
	of ":$ptr_size" and set its form explicitly.
---
 gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Yao Qi April 15, 2015, 1:05 p.m. UTC | #1
On 10/04/15 16:19, Yao Qi wrote:
> gdb/testsuite:
>
> 2015-04-10  Yao Qi<yao.qi@linaro.org>
>
> 	* gdb.dwarf2/dynarr-ptr.exp (assemble): Use $ptr_size instead
> 	of ":$ptr_size" and set its form explicitly.

I pushed it in.
  

Patch

diff --git a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
index 544509b..3dcb3d7 100644
--- a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
+++ b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp
@@ -74,7 +74,7 @@  Dwarf::assemble $asm_file {
 		}
 	    }
             array_ptr_label: DW_TAG_pointer_type {
-                {DW_AT_byte_size :$ptr_size }
+                {DW_AT_byte_size $ptr_size DW_FORM_data1}
                 {DW_AT_type :$array_label}
             }
             array_typedef_label: DW_TAG_typedef {