From patchwork Mon Sep 1 00:57:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 2610 Received: (qmail 29576 invoked by alias); 1 Sep 2014 01:04:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 29565 invoked by uid 89); 1 Sep 2014 01:04:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 01 Sep 2014 01:04:01 +0000 Received: from svr-orw-fem-05.mgc.mentorg.com ([147.34.97.43]) by relay1.mentorg.com with esmtp id 1XOG2H-0006NP-Js from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Sun, 31 Aug 2014 18:03:57 -0700 Received: from qiyao.dyndns.org.com (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.2.247.3; Sun, 31 Aug 2014 18:03:33 -0700 From: Yao Qi To: Subject: [PATCH 3/3] Fix fail in mi-var-child.exp and mi-var-display.exp Date: Mon, 1 Sep 2014 08:57:52 +0800 Message-ID: <1409533072-6152-4-git-send-email-yao@codesourcery.com> In-Reply-To: <1409533072-6152-1-git-send-email-yao@codesourcery.com> References: <1409533072-6152-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 X-IsSubscribed: yes Hi, I see the following fails on arm-none-eabi target, -var-list-children --simple-values struct_declarations ^M ^done,numchild="11",children=[...,child={name="struct_declarations.func_ptr_struct",exp="func_ptr_struct",numchild="0",value="0x0 <_ftext>",type="struct _struct_decl (*)(int, char *, long)",thread-id="1"},child={name="struct_declarations.func_ptr_ptr",exp="func_ptr_ptr",numchild="0",value="0x0 <_ftext>",type="struct _struct_decl *(*)(int, char *, long)",thread-id="1"},... (gdb) ^M FAIL: gdb.mi/mi-var-child.exp: listing of children, simple types: names, type and values, complex types: names and types -var-set-format weird.func_ptr_ptr natural^M ^done,format="natural",value="0x0 <_ftext>"^M (gdb) ^M FAIL: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr in natural In the test, "0x0" is expected, but "0x0 <_ftext>" is in the output. Function pointers point to address zero, and tests assume there is no symbol on address zero. However, on my arm-none-eabi target, there is a code symbol _ftext on address zero, and test fails. Note that "set print symbol off" doesn't take effect for function pointer. int (*f) (void); f = main; (gdb) p f $1 = (int (*)(void)) 0x8048400
(gdb) set print symbol off (gdb) p f $2 = (int (*)(void)) 0x8048400
In order to erase the difference, we can assign some function address explicitly to function pointer, so the test behaves in a unique way. In this patch, we assign nothing1 and nothing2 to function pointers func_ptr_struct and func_ptr_ptr respectively, and update test as the source file is changed. gdb/testsuite: 2014-09-01 Yao Qi * gdb.mi/mi-var-child.c (nothing1): New function. (nothing2): New function. (do_children_tests): Set function pointers by nothing1 and nothing2. * gdb.mi/mi-var-child.exp: Step over new added statements. Update test to match the new output. * gdb.mi/var-cmd.c (nothing1): New function. (nothing2): New function. (do_children_tests): Set function pointers by nothing1 and nothing2. * gdb.mi/mi-var-display.exp: Update test to match output. Step to the line specified by $line_dct_nothing. Increase the number of lines to step. --- gdb/testsuite/gdb.mi/mi-var-child.c | 16 ++++++++++++++++ gdb/testsuite/gdb.mi/mi-var-child.exp | 22 +++++++++++++++++----- gdb/testsuite/gdb.mi/mi-var-display.exp | 2 +- gdb/testsuite/gdb.mi/mi2-var-child.exp | 7 +++---- gdb/testsuite/gdb.mi/var-cmd.c | 16 ++++++++++++++++ 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/gdb/testsuite/gdb.mi/mi-var-child.c b/gdb/testsuite/gdb.mi/mi-var-child.c index bde668e..689fe55 100644 --- a/gdb/testsuite/gdb.mi/mi-var-child.c +++ b/gdb/testsuite/gdb.mi/mi-var-child.c @@ -160,6 +160,20 @@ nothing () { } +struct _struct_decl +nothing1 (int a, char *b, long c) +{ + struct _struct_decl foo; + + return foo; +} + +struct _struct_decl * +nothing2 (int a, char *b, long c) +{ + return (struct _struct_decl *) 0; +} + void subroutine1 (int i, long *l) { @@ -231,6 +245,8 @@ do_children_tests (void) struct_declarations.long_array[9] = 1234; weird->func_ptr = nothing; + weird->func_ptr_struct = nothing1; + weird->func_ptr_ptr = nothing2; struct_declarations.long_array[10] = 3456; struct_declarations.long_array[11] = 5678; diff --git a/gdb/testsuite/gdb.mi/mi-var-child.exp b/gdb/testsuite/gdb.mi/mi-var-child.exp index 1f547ba..88be094 100644 --- a/gdb/testsuite/gdb.mi/mi-var-child.exp +++ b/gdb/testsuite/gdb.mi/mi-var-child.exp @@ -766,9 +766,21 @@ mi_step_to do_children_tests {} ".*${srcfile}" \ mi_varobj_update * {struct_declarations.func_ptr} \ "update all vars struct_declarations.func_ptr changed" -# Step over "struct_declarations.long_array[10] = 3456"; +# Step over "weird->func_ptr_struct = nothing1" mi_step_to do_children_tests {} ".*${srcfile}" \ [expr $line_dct_nothing + 2] "step \$line_dct_nothing + 2" +mi_varobj_update * {struct_declarations.func_ptr_struct} \ + "update all vars struct_declarations.func_ptr_struct changed" + +# Step over "weird->func_ptr_ptr = nothing2" +mi_step_to do_children_tests {} ".*${srcfile}" \ + [expr $line_dct_nothing + 3] "step \$line_dct_nothing + 3" +mi_varobj_update * {struct_declarations.func_ptr_ptr} \ + "update all vars struct_declarations.func_ptr_ptr changed" + +# Step over "struct_declarations.long_array[10] = 3456"; +mi_step_to do_children_tests {} ".*${srcfile}" \ + [expr $line_dct_nothing + 4] "step \$line_dct_nothing + 4" mi_gdb_test "-var-update --no-values *" \ "\\^done,changelist=\\\[\{name=\"struct_declarations.long_array.10\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\\\]" \ @@ -807,10 +819,10 @@ mi_list_varobj_children {struct_declarations --simple-values} \ [list struct_declarations.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*" "$hex"] \ {struct_declarations.long_array long_array 12 "long \\[12\\]"} \ [list struct_declarations.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)" "(@$hex: |)$hex "] \ - {struct_declarations.func_ptr_struct func_ptr_struct 0 \ - "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?" 0x0} \ - {struct_declarations.func_ptr_ptr func_ptr_ptr 0 \ - "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)" 0x0} \ + [list struct_declarations.func_ptr_struct func_ptr_struct 0 \ + "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?" "$hex "] \ + [list struct_declarations.func_ptr_ptr func_ptr_ptr 0 \ + "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)" "$hex "] \ {struct_declarations.u1 u1 4 "union \\{\\.\\.\\.\\}"} \ {struct_declarations.s2 s2 4 "struct \\{\\.\\.\\.\\}"} \ ] "listing of children, simple types: names, type and values, complex types: names and types" diff --git a/gdb/testsuite/gdb.mi/mi-var-display.exp b/gdb/testsuite/gdb.mi/mi-var-display.exp index 02c2212..9f0ade5 100644 --- a/gdb/testsuite/gdb.mi/mi-var-display.exp +++ b/gdb/testsuite/gdb.mi/mi-var-display.exp @@ -290,7 +290,7 @@ mi_gdb_test "-var-set-format weird.func_ptr_struct hexadecimal" \ "set format variable weird.func_ptr_struct" mi_gdb_test "-var-set-format weird.func_ptr_ptr natural" \ - "\\^done,format=\"natural\",value=\"0x0\"" \ + "\\^done,format=\"natural\",value=\"$hex \"" \ "set format variable weird.func_ptr_ptr in natural" mi_gdb_test "-var-set-format weird.u1 natural" \ diff --git a/gdb/testsuite/gdb.mi/mi2-var-child.exp b/gdb/testsuite/gdb.mi/mi2-var-child.exp index 6ae3e0c..fffc1f1 100644 --- a/gdb/testsuite/gdb.mi/mi2-var-child.exp +++ b/gdb/testsuite/gdb.mi/mi2-var-child.exp @@ -759,9 +759,8 @@ mi_varobj_update * {struct_declarations.long_array.3 # Step over "weird->func_ptr = nothing;" -set line_dct_a0_0 [gdb_get_line_number "a0\[0\] = '0';"] -mi_step_to do_children_tests {} {.*var-cmd.c} \ - $line_dct_a0_0 "step \$line_dct_a0_0" +mi_step_to do_children_tests {} ".*${srcfile}" \ + [expr $line_dct_nothing + 1] "step \$line_dct_nothing + 1" # Test: c_variable-5.9 # Desc: check that func_ptr changed @@ -782,7 +781,7 @@ mi_gdb_test "-var-delete weird->int_ptr_ptr" \ # psnp = &snp0; set line_dct_snp0 [gdb_get_line_number "psnp = &snp0;"] -mi_execute_to "exec-step 43" "end-stepping-range" do_children_tests {} {.*var-cmd.c} \ +mi_execute_to "exec-step 45" "end-stepping-range" do_children_tests {} {.*var-cmd.c} \ [expr $line_dct_snp0 + 1] {} "step \$line_dct_snp0 + 1" # Test: c_variable-5.10 diff --git a/gdb/testsuite/gdb.mi/var-cmd.c b/gdb/testsuite/gdb.mi/var-cmd.c index 4bb2746..bbfbc34 100644 --- a/gdb/testsuite/gdb.mi/var-cmd.c +++ b/gdb/testsuite/gdb.mi/var-cmd.c @@ -182,6 +182,20 @@ nothing () { } +struct _struct_decl +nothing1 (int a, char *b, long c) +{ + struct _struct_decl foo; + + return foo; +} + +struct _struct_decl * +nothing2 (int a, char *b, long c) +{ + return (struct _struct_decl *) 0; +} + void subroutine1 (int i, long *l) { @@ -253,6 +267,8 @@ do_children_tests (void) struct_declarations.long_array[9] = 1234; weird->func_ptr = nothing; + weird->func_ptr_struct = nothing1; + weird->func_ptr_ptr = nothing2; /* Struct/pointer/array tests */ a0[0] = '0';