From patchwork Fri Nov 16 18:29:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 30172 Received: (qmail 87335 invoked by alias); 16 Nov 2018 18:30:54 -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 87108 invoked by uid 89); 16 Nov 2018 18:30:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_HELO_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=binfile, text_io, gdb_compile X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 16 Nov 2018 18:30:01 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9362758E50; Fri, 16 Nov 2018 18:30:00 +0000 (UTC) Received: from [127.0.0.1] (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id B0DD85C70A; Fri, 16 Nov 2018 18:29:59 +0000 (UTC) Subject: Re: [RFA 3/5] Add a test to verify info [functions|variables|types]|rbreak respect language_mode. To: Philippe Waroquiers , gdb-patches@sourceware.org References: <20181028144614.14149-1-philippe.waroquiers@skynet.be> <20181028144614.14149-4-philippe.waroquiers@skynet.be> From: Pedro Alves Message-ID: Date: Fri, 16 Nov 2018 18:29:58 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181028144614.14149-4-philippe.waroquiers@skynet.be> On 10/28/2018 02:46 PM, Philippe Waroquiers wrote: > 2018-10-27 Philippe Waroquiers > > * gdb.ada/info_auto_lang.exp: New testcase. > * gdb.ada/info_auto_lang/global_pack.ads: New file. > * gdb.ada/info_auto_lang/proc_in_ada.adb: New file. > * gdb.ada/info_auto_lang/some_c.c: New file. > --- > gdb/testsuite/gdb.ada/info_auto_lang.exp | 153 ++++++++++++++++++ > .../gdb.ada/info_auto_lang/global_pack.ads | 10 ++ > .../gdb.ada/info_auto_lang/proc_in_ada.adb | 11 ++ > gdb/testsuite/gdb.ada/info_auto_lang/some_c.c | 15 ++ > 4 files changed, 189 insertions(+) > create mode 100644 gdb/testsuite/gdb.ada/info_auto_lang.exp > create mode 100644 gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads > create mode 100644 gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb > create mode 100644 gdb/testsuite/gdb.ada/info_auto_lang/some_c.c > > diff --git a/gdb/testsuite/gdb.ada/info_auto_lang.exp b/gdb/testsuite/gdb.ada/info_auto_lang.exp > new file mode 100644 > index 0000000000..60a8b5a17c > --- /dev/null > +++ b/gdb/testsuite/gdb.ada/info_auto_lang.exp > @@ -0,0 +1,153 @@ > +# Copyright 2018 Free Software Foundation, Inc. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > +load_lib "ada.exp" > + > +# This test verifies that the commands > +# info [functions|variables|types] > +# are respecting the 'set language auto|ada|c' setup, whatever the language > +# of the current frame. s/are respecting/respect/ s/setup/setting/ (I guess?) > +# Similarly, checks that rbreak reports its results respecting > +# the language mode. > + > +standard_ada_testfile proc_in_ada > +set cfile "some_c" > +set csrcfile ${srcdir}/${subdir}/${testdir}/${cfile}.c > +set cobject [standard_output_file ${cfile}.o] > + > +gdb_compile "${csrcfile}" "${cobject}" object [list debug] Should check return of gdb_compile, and call untested. > +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { > + return -1 > +} "untested". > + > +clean_restart ${testfile} > + > +set bp_location [gdb_get_line_number "STOP" ${testdir}/some_c.c] > +runto "some_c.c:$bp_location" Check result of runto. > + > +set number "\[0-9]\+" You can use $decimal instead. > + > +set func_in_c(c_syntax) "${number}: void proc_in_c\\\(void\\\);" > +set func_in_c(ada_syntax) "${number}: procedure proc_in_c;" > +set func_in_ada(c_syntax) "${number}: void proc_in_ada\\\(void\\\);" > +set func_in_ada(ada_syntax) "${number}: procedure proc_in_ada;" > + > +set type_in_c(c_syntax) [multi_line \ > + "${number}: typedef struct {" \ > + " int some_component_in_c;" \ > + "} some_type_in_c;" ] > +set type_in_c(ada_syntax) [multi_line \ > + "${number}: record" \ > + " some_component_in_c: int;" \ > + "end record" ] > +set type_in_ada(c_syntax) "${number}: struct global_pack__some_type_in_ada;" > +set type_in_ada(ada_syntax) "${number}: global_pack.some_type_in_ada;" > + > +set var_in_c(c_syntax) "${number}: some_type_in_c some_struct_in_c;" > +set var_in_c(ada_syntax) "${number}: some_struct_in_c: some_type_in_c;" > +set var_in_ada(c_syntax) "${number}: struct global_pack__some_type_in_ada global_pack.some_struct_in_ada;" > +set var_in_ada(ada_syntax) "${number}: global_pack.some_struct_in_ada: global_pack.some_type_in_ada;" > + > +set rbreak_func_in_c(c_syntax) "void proc_in_c\\\(void\\\);" > +set rbreak_func_in_c(ada_syntax) "procedure proc_in_c;" > +set rbreak_func_in_ada(c_syntax) "void proc_in_ada\\\(void\\\);" > +set rbreak_func_in_ada(ada_syntax) "procedure proc_in_ada;" > + > + > +foreach_with_prefix language_choice { "auto" "ada" "c" } { > + > + # Switch to the desired language_choice in a frame giving no warning, I'm having trouble understanding what this means, but I think you meant: # Check that switching to the desired language_choice when the selected # frame has the same language (or the desired language is auto) gives no # warning. Also set the expected matches for the various commands # tested afterwards. Is that right? > + # and then, set the expected matches for the various commands tested > + # afterwards. > + if {$language_choice == "auto"} { > + gdb_test "frame 0" "#0 .*" "select frame with lang c" > + set c_match c_syntax > + set ada_match ada_syntax > + } elseif {$language_choice == "ada"} { > + gdb_test "frame 1" "#1 .*" "select frame with lang ada" > + set c_match ada_syntax > + set ada_match ada_syntax > + } elseif {$language_choice == "c"} { > + gdb_test "frame 0" "#0 .*" "select frame with lang c" > + set c_match c_syntax > + set ada_match c_syntax > + } else { > + fail "unexpected language choice" This would be a testcase bug, so should be an error instead of a fail. > + } > + gdb_test_no_output "set language $language_choice" "set language language_choice" > + > + foreach frame { > + "0" > + "1" } { > + if { $frame == 0 } { > + set frame_lang "c" > + } else { > + set frame_lang "ada" > + } > + gdb_test "frame $frame" "#$frame .*" "select frame $frame with lang $frame_lang" > + set selected_frame_msg [concat " in selected frame " $frame " with lang $frame_lang"] > + > + set cmd "info functions proc_in_" > + set check [concat $cmd $selected_frame_msg] > + gdb_test $cmd \ > + [multi_line \ > + "All functions matching regular expression \"proc_in_\":" \ > + "" \ > + "File .*some_c.c:" \ > + $func_in_c($c_match) \ > + "" \ > + "File .*proc_in_ada.adb:" \ > + $func_in_ada($ada_match) > + ] $check > + > + set cmd "info types some_type" > + set check [concat $cmd $selected_frame_msg] > + gdb_test $cmd \ > + [multi_line \ > + "All types matching regular expression \"some_type\":" \ > + "" \ > + "File .*some_c.c:" \ > + $type_in_c($c_match) \ > + "" \ > + "File .*global_pack.ads:" \ > + $type_in_ada($ada_match) > + ] $check > + > + set cmd "info variables some_struct" > + set check [concat $cmd $selected_frame_msg] > + gdb_test $cmd \ > + [multi_line \ > + "All variables matching regular expression \"some_struct\":" \ > + "" \ > + "File .*some_c.c:" \ > + $var_in_c($c_match) \ > + "" \ > + "File .*global_pack.ads:" \ > + $var_in_ada($ada_match) > + ] $check > + > + set cmd "rbreak proc_in_" > + set check [concat $cmd $selected_frame_msg] > + gdb_test $cmd \ > + [multi_line \ > + "Breakpoint.*file .*some_c.c,.*" \ > + $rbreak_func_in_c($c_match) \ > + "Breakpoint.*file .*proc_in_ada.adb,.*" \ > + $rbreak_func_in_ada($ada_match) > + ] $check > + delete_breakpoints > + } > +} > + > diff --git a/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads b/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads > new file mode 100644 > index 0000000000..5feeacd1fb > --- /dev/null > +++ b/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads Missing copyright header. > @@ -0,0 +1,10 @@ > +package Global_Pack is > + Some_Number_In_Ada : Integer := 0; > + > + type Some_Type_In_Ada is > + record > + Some_Component_In_Ada : Integer; > + end record; > + > + Some_Struct_In_Ada : Some_Type_In_Ada; > +end Global_Pack; > diff --git a/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb b/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb > new file mode 100644 > index 0000000000..d244db43e7 > --- /dev/null > +++ b/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb Missing copyright header. > @@ -0,0 +1,11 @@ > +with Text_Io; use Text_Io; > +with Global_Pack; use Global_Pack; > +procedure Proc_In_Ada is > + procedure Something_In_C > + with Import, Convention => C, External_Name => "proc_in_c"; > + pragma Linker_Options ("some_c.o"); > +begin > + Something_In_C; > + Some_Number_In_Ada := Some_Number_In_Ada + 1; > + Put_Line ("hello world from Ada"); > +end Proc_In_Ada; > diff --git a/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c b/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c > new file mode 100644 > index 0000000000..79ca1627e2 > --- /dev/null > +++ b/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c Missing copyright header. > @@ -0,0 +1,15 @@ > +#include If not important to the testcase, it's better to avoid stdio.h/printf etc., so that the testcase works against bare metal targets that don't support hosted I/O. > +int some_number_in_c; > +typedef struct { > + int some_component_in_c; > +} some_type_in_c; > + > +some_type_in_c some_struct_in_c; > +void proc_in_c (void) > +{ > + some_number_in_c++; > + some_struct_in_c.some_component_in_c++; > + printf ("Hello world from C %d %d\n", /* STOP */ > + some_number_in_c, > + some_struct_in_c.some_component_in_c); This (and Ada's equivalent) printf isn't used by the .exp file, right? BTW, I think that with the small change below, the gdb.sum output is more structured, and thus clearer. You'd need to indent the body of with_test_prefix, of course. WDYT? Otherwise OK. From d28c1a6473db03c4621b3592617afc805e847ad8 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 16 Nov 2018 16:59:38 +0000 Subject: [PATCH] gdb.sum --- gdb/testsuite/gdb.ada/info_auto_lang.exp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/gdb/testsuite/gdb.ada/info_auto_lang.exp b/gdb/testsuite/gdb.ada/info_auto_lang.exp index 60a8b5a17c..531e981f2a 100644 --- a/gdb/testsuite/gdb.ada/info_auto_lang.exp +++ b/gdb/testsuite/gdb.ada/info_auto_lang.exp @@ -96,11 +96,13 @@ foreach_with_prefix language_choice { "auto" "ada" "c" } { } else { set frame_lang "ada" } - gdb_test "frame $frame" "#$frame .*" "select frame $frame with lang $frame_lang" - set selected_frame_msg [concat " in selected frame " $frame " with lang $frame_lang"] + + with_test_prefix "frame=$frame, frame_lang=$frame_lang" { + + gdb_test "frame $frame" "#$frame .*" "select frame" + set selected_frame_msg [concat " in selected frame " $frame] set cmd "info functions proc_in_" - set check [concat $cmd $selected_frame_msg] gdb_test $cmd \ [multi_line \ "All functions matching regular expression \"proc_in_\":" \ @@ -110,10 +112,9 @@ foreach_with_prefix language_choice { "auto" "ada" "c" } { "" \ "File .*proc_in_ada.adb:" \ $func_in_ada($ada_match) - ] $check + ] set cmd "info types some_type" - set check [concat $cmd $selected_frame_msg] gdb_test $cmd \ [multi_line \ "All types matching regular expression \"some_type\":" \ @@ -123,10 +124,9 @@ foreach_with_prefix language_choice { "auto" "ada" "c" } { "" \ "File .*global_pack.ads:" \ $type_in_ada($ada_match) - ] $check + ] set cmd "info variables some_struct" - set check [concat $cmd $selected_frame_msg] gdb_test $cmd \ [multi_line \ "All variables matching regular expression \"some_struct\":" \ @@ -136,18 +136,18 @@ foreach_with_prefix language_choice { "auto" "ada" "c" } { "" \ "File .*global_pack.ads:" \ $var_in_ada($ada_match) - ] $check + ] set cmd "rbreak proc_in_" - set check [concat $cmd $selected_frame_msg] gdb_test $cmd \ [multi_line \ "Breakpoint.*file .*some_c.c,.*" \ $rbreak_func_in_c($c_match) \ "Breakpoint.*file .*proc_in_ada.adb,.*" \ $rbreak_func_in_ada($ada_match) - ] $check + ] delete_breakpoints + } } }