From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gateway24.websitewelcome.com (gateway24.websitewelcome.com [192.185.51.35]) by sourceware.org (Postfix) with ESMTPS id 5C94A395BC57 for ; Tue, 23 Jun 2020 13:20:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5C94A395BC57 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=tom@tromey.com Received: from cm11.websitewelcome.com (cm11.websitewelcome.com [100.42.49.5]) by gateway24.websitewelcome.com (Postfix) with ESMTP id 0D76CC872E for ; Tue, 23 Jun 2020 08:20:10 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id niqPjcuPRhmVTniqPjUI7Z; Tue, 23 Jun 2020 08:20:10 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=2QHUrBpVW4doEyc4JYaWuanv7iAnkTcq3joZjSN6FOE=; b=XzDXvKBgi+kX9DbC8CaFMSglGT HMR2G0+RUDJCPA7PLNijnyOHiF61H7IkvRHOoWvM59vygqaAp40+B2HHuMBmucvqKdPGQE6As6kn6 4w4rVkQ9YeAxkrp8IyTCG9dj4; Received: from 174-16-104-48.hlrn.qwest.net ([174.16.104.48]:45100 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1jniqP-002fzZ-OS; Tue, 23 Jun 2020 07:20:09 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v2 5/7] Add early startup command file Date: Tue, 23 Jun 2020 07:20:04 -0600 Message-Id: <20200623132006.15863-6-tom@tromey.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200623132006.15863-1-tom@tromey.com> References: <20200623132006.15863-1-tom@tromey.com> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 174.16.104.48 X-Source-L: No X-Exim-ID: 1jniqP-002fzZ-OS X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 174-16-104-48.hlrn.qwest.net (bapiya.Home) [174.16.104.48]:45100 X-Source-Auth: tom+tromey.com X-Email-Count: 6 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3037.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_ABUSEAT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jun 2020 13:20:12 -0000 This adds support for a gdb command file to be read early in startup. Code that wants to save an early setting can register a callback to be called to write to this file. This code is not yet used, but will be in subsequent patches. 2020-06-22 Tom Tromey * main.c (captured_main_1): Call read_startup_file. * cli/cli-setshow.h (write_startup_functions, add_startup_writer) (read_startup_file): Declare. (write_startup_setting_ftype): New typedef. * cli/cli-setshow.c (STARTUP_FILE): New define. (write_startup_functions, startup_file_read): New globals. (write_startup_file, add_startup_writer, read_startup_file): New functions. --- gdb/ChangeLog | 11 +++++++ gdb/cli/cli-setshow.c | 76 +++++++++++++++++++++++++++++++++++++++++++ gdb/cli/cli-setshow.h | 21 ++++++++++++ gdb/main.c | 5 +++ 4 files changed, 113 insertions(+) diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 19a5565bfe0..32e867160cb 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -21,6 +21,8 @@ #include #include "arch-utils.h" #include "observable.h" +#include "gdbsupport/pathstuff.h" +#include #include "ui-out.h" @@ -29,6 +31,80 @@ #include "cli/cli-setshow.h" #include "cli/cli-utils.h" +/* File name for startup style. */ + +#define STARTUP_FILE "startup-commands" + +/* Callbacks that will be called to write out startup settings. */ +static std::vector write_startup_functions; + +/* True after gdb has read the startup file. */ +static bool startup_file_read; + +/* See cli-setshow.h. */ + +void +write_startup_file () +{ + std::string config_dir = get_standard_config_dir (); + + if (config_dir.empty ()) + { + warning (_("Couldn't determine a path for the startup settings.")); + return; + } + + if (!mkdir_recursive (config_dir.c_str ())) + { + warning (_("Could not make config directory: %s"), + safe_strerror (errno)); + return; + } + + std::string fullname = config_dir + "/" + STARTUP_FILE; + stdio_file outfile; + + if (!outfile.open (fullname.c_str (), FOPEN_WT)) + perror_with_name (fullname.c_str ()); + + for (auto &callback : write_startup_functions) + callback (&outfile); +} + +/* See cli-setshow.h. */ + +void +add_startup_writer (write_startup_setting_ftype *callback) +{ + write_startup_functions.push_back (callback); +} + +/* See cli-setshow.h. */ + +void +read_startup_file () +{ + std::string config_dir = get_standard_config_dir (); + + if (!config_dir.empty ()) + { + std::string filename = config_dir + "/" + STARTUP_FILE; + try + { + source_script (filename.c_str (), 1); + /* If reading fails, we don't want to write the file -- it + might overwrite something. So, we set this flag after + reading. */ + startup_file_read = true; + } + catch (const gdb_exception &) + { + /* Ignore errors. */ + } + } +} + + /* Return true if the change of command parameter should be notified. */ static int diff --git a/gdb/cli/cli-setshow.h b/gdb/cli/cli-setshow.h index 83e4984ed6c..35e229022ff 100644 --- a/gdb/cli/cli-setshow.h +++ b/gdb/cli/cli-setshow.h @@ -62,4 +62,25 @@ extern std::string get_setshow_command_value_string (const cmd_list_element *c); extern void cmd_show_list (struct cmd_list_element *list, int from_tty); +/* Write the file of gdb "set" commands that is read early in the + startup sequence. */ + +extern void write_startup_file (); + +/* The type of a callback function that is used when writing the + startup file. */ + +class ui_file; +typedef void write_startup_setting_ftype (ui_file *); + +/* Add a callback function that will be called when writing the + startup sequence. */ + +extern void add_startup_writer (write_startup_setting_ftype *callback); + +/* Read the startup file. This should only be called by the gdb + startup sequence. */ + +extern void read_startup_file (); + #endif /* CLI_CLI_SETSHOW_H */ diff --git a/gdb/main.c b/gdb/main.c index 3649e4a2201..bd1f6d6b2c5 100644 --- a/gdb/main.c +++ b/gdb/main.c @@ -35,6 +35,7 @@ #include "main.h" #include "source.h" #include "cli/cli-cmds.h" +#include "cli/cli-setshow.h" #include "objfiles.h" #include "auto-load.h" #include "maint.h" @@ -933,6 +934,10 @@ captured_main_1 (struct captured_main_args *context) /* Initialize all files. */ gdb_init (gdb_program_name); + /* Set the startup style. */ + if (!inhibit_gdbinit && !inhibit_home_gdbinit) + read_startup_file (); + /* Now that gdb_init has created the initial inferior, we're in position to set args for that inferior. */ if (set_args) -- 2.17.2