From patchwork Sun Oct 28 14:46:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 29932 Received: (qmail 102177 invoked by alias); 28 Oct 2018 14:46:37 -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 102052 invoked by uid 89); 28 Oct 2018 14:46:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=sk:delete_, respecting, sk:foreach X-HELO: mailsec110.isp.belgacom.be Received: from mailsec110.isp.belgacom.be (HELO mailsec110.isp.belgacom.be) (195.238.20.106) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 28 Oct 2018 14:46:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1540737993; x=1572273993; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4bg9DYIC5MI0nRRVQgRhj6TBOeao7Ks4dn+0HHgQrws=; b=CI8OwoHo9ePfW1Nw7JweH4dCSlqZN39wXDDIvQSRwWvmb9wF9uslocBR H94MlOyEdzv5HUTXgI/Cw8gdFHtQCw==; Received: from 110.212-243-81.adsl-dyn.isp.belgacom.be (HELO md.home) ([81.243.212.110]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 28 Oct 2018 15:46:23 +0100 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFA 3/5] Add a test to verify info [functions|variables|types]|rbreak respect language_mode. Date: Sun, 28 Oct 2018 15:46:12 +0100 Message-Id: <20181028144614.14149-4-philippe.waroquiers@skynet.be> In-Reply-To: <20181028144614.14149-1-philippe.waroquiers@skynet.be> References: <20181028144614.14149-1-philippe.waroquiers@skynet.be> MIME-Version: 1.0 X-IsSubscribed: yes 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. +# 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] +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/some_c.c] +runto "some_c.c:$bp_location" + +set number "\[0-9]\+" + +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, + # 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" + } + 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 @@ -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 @@ -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 @@ -0,0 +1,15 @@ +#include +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); +}