From patchwork Fri Jul 12 11:37:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 33683 Received: (qmail 123697 invoked by alias); 12 Jul 2019 11:37:25 -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 123636 invoked by uid 89); 12 Jul 2019 11:37:24 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=sk:complet, 21110, sk:make_in X-HELO: mail-wr1-f49.google.com Received: from mail-wr1-f49.google.com (HELO mail-wr1-f49.google.com) (209.85.221.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 12 Jul 2019 11:37:14 +0000 Received: by mail-wr1-f49.google.com with SMTP id r1so9609235wrl.7 for ; Fri, 12 Jul 2019 04:37:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=zyI28AnMJ57UJ7UargFFs/EyMUEbe/m8fFuN4OIqN6k=; b=JXVT5mi5LWEppNXp5MdObCpbNRu41rYSS2maNMymIlnXSWjE4KyPK7Z0RKZZi5jiB1 Eco6e80JJmT8izpGSdqfZWIV+aF9SoHhLJ5sbu8pPYVnuYTg6qGgT/5klorTHIswT1Oo MlB+mPZ1NyPj1fOIUDqhZ7fzcpLw9eVIr0aRmK0LDc3lQ0HUA5kcomjwUi45FrUovhJg ko5vEyWzPHQIBbJnsGK4tBj/DRdpHmfyBBk3p7Bfu1GMgeLIAUwhem3le4Mmh48qZg+k u2lXKqm8cFKWogsgpfcbehbE2JdttI0aglrHsTTEPxzOlJn4f+eFwFNjORXQf+gtH7VK +X0Q== Return-Path: Received: from localhost (host86-128-12-99.range86-128.btcentralplus.com. [86.128.12.99]) by smtp.gmail.com with ESMTPSA id g19sm15936692wrb.52.2019.07.12.04.37.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Jul 2019 04:37:11 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 1/3] gdb: Switch "info types" over to use the gdb::options framework Date: Fri, 12 Jul 2019 12:37:04 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes Adds a new -q flag to "info types" using the gdb::option framework. This -q flag is similar to the -q flag already present for "info variables" and "info functions". gdb/ChangeLog: * NEWS: Mention adding -q option to "info types". * symtab.c (struct info_types_options): New struct. (info_types_options_defs): New variable. (make_info_types_options_def_group): New function. (info_types_command): Use gdb::option framework to parse options. (info_types_command_completer): New function. (_initialize_symtab): Extend the help text on "info types" and register command completer. gdb/doc/ChangeLog: * gdb.texinfo (Symbols): Add information about -q flag to "info types". --- gdb/ChangeLog | 11 +++++++++ gdb/NEWS | 4 ++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 6 +++-- gdb/symtab.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 84 insertions(+), 6 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 4e479bf738b..cc1d58520d4 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -211,6 +211,10 @@ maint show test-options-completion-result (gdb) print -raw -pretty -object off -- *myptr + ** The "info types" command now supports the '-q' flag to disable + printing of some header information in a similar fashion to "info + variables" and "info functions". + * Completion improvements ** GDB can now complete the options of the "thread apply all" and diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index eddd939869a..777a412df67 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -18428,8 +18428,7 @@ of such variables. @kindex info types -@item info types @var{regexp} -@itemx info types +@item info types [-q] [@var{regexp}] Print a brief description of all types whose names match the regular expression @var{regexp} (or all types in your program, if you supply no argument). Each complete typename is matched as though it were a @@ -18449,6 +18448,9 @@ @code{whatis}, it does not print a detailed description; second, it lists all source files and line numbers where a type is defined. +The optional flag @samp{-q}, which stands for @samp{quiet}, disables +printing header information. + @kindex info type-printers @item info type-printers Versions of @value{GDBN} that ship with Python scripting enabled may diff --git a/gdb/symtab.c b/gdb/symtab.c index 41898992c19..7b7f1298419 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -4769,11 +4769,62 @@ info_functions_command (const char *args, int from_tty) opts.type_regexp, from_tty); } +/* Holds the -q option for the 'info types' command. */ + +struct info_types_options +{ + int quiet = false; +}; + +/* The options used by the 'info types' command. */ + +static const gdb::option::option_def info_types_options_defs[] = { + gdb::option::boolean_option_def { + "q", + [] (info_types_options *opt) { return &opt->quiet; }, + nullptr, /* show_cmd_cb */ + nullptr /* set_doc */ + } +}; + +/* Returns the option group used by 'info types'. */ + +static gdb::option::option_def_group +make_info_types_options_def_group (info_types_options *opts) +{ + return {{info_types_options_defs}, opts}; +} + +/* Implement the 'info types' command. */ static void -info_types_command (const char *regexp, int from_tty) +info_types_command (const char *args, int from_tty) { - symtab_symbol_info (false, regexp, TYPES_DOMAIN, NULL, from_tty); + info_types_options opts; + + auto grp = make_info_types_options_def_group (&opts); + gdb::option::process_options + (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp); + if (args != nullptr && *args == '\0') + args = nullptr; + symtab_symbol_info (opts.quiet, args, TYPES_DOMAIN, NULL, from_tty); +} + +/* Command completer for 'info types' command. */ + +static void +info_types_command_completer (struct cmd_list_element *ignore, + completion_tracker &tracker, + const char *text, const char * /* word */) +{ + const auto group + = make_info_types_options_def_group (nullptr); + if (gdb::option::complete_options + (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group)) + return; + + const char *word = advance_to_expression_complete_word_point (tracker, text); + symbol_completer (ignore, tracker, text, word); } /* Breakpoint all functions matching regular expression. */ @@ -6035,8 +6086,13 @@ Prints the functions.\n"), print "struct foo *". I also think "ptype" or "whatis" is more likely to be useful (but if there is much disagreement "info types" can be fixed). */ - add_info ("types", info_types_command, - _("All type names, or those matching REGEXP.")); + c = add_info ("types", info_types_command, _("\ +All type names, or those matching REGEXP.\n\ +Usage: info types [-q] [REGEXP]\n\ +Print information about all types matching REGEXP, or all types if no\n\ +REGEXP is given. The optional flag -q disables printing of some headers\n\ +and messages.")); + set_cmd_completer_handle_brkchars (c, info_types_command_completer); add_info ("sources", info_sources_command, _("Source files in the program."));