From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25600 invoked by alias); 9 Sep 2012 17:55:06 -0000 Received: (qmail 25430 invoked by uid 22791); 9 Sep 2012 17:55:02 -0000 X-SWARE-Spam-Status: No, hits=-6.4 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_BJ X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 09 Sep 2012 17:54:40 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q89Hsc0U031497 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 9 Sep 2012 13:54:38 -0400 Received: from host2.jankratochvil.net (ovpn-116-25.ams2.redhat.com [10.36.116.25]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q89HsWlb007721 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sun, 9 Sep 2012 13:54:34 -0400 Date: Sun, 09 Sep 2012 17:55:00 -0000 From: Jan Kratochvil To: Eli Zaretskii Cc: gdb-patches@sourceware.org, dje@google.com Subject: Re: [patch+7.5] auto-load: User conveniences suggested by Doug Evans Message-ID: <20120909175431.GA31895@host2.jankratochvil.net> References: <20120821144355.GA28426@host2.jankratochvil.net> <83k3wsb0da.fsf@gnu.org> <20120824161059.GC7200@host2.jankratochvil.net> <838vd4gns3.fsf@gnu.org> <20120909085312.GA4994@host2.jankratochvil.net> <83zk4zksz0.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <83zk4zksz0.fsf@gnu.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-09/txt/msg00097.txt.bz2 On Sun, 09 Sep 2012 19:26:43 +0200, Eli Zaretskii wrote: > > --without-python form: > > (gdb) help set auto-load scripts-directory > > Set the list of directories from which to load auto-loaded scripts. > > Automatically loaded GDB scripts > > (named OBJFILE-gdb.gdb) are located in one of the directories listed by this > > option. > > Can we make these two lines more evenly sized? --with-python form: (gdb) help set auto-load scripts-directory Set the list of directories from which to load auto-loaded scripts. Automatically loaded Python scripts (named OBJFILE-gdb.py) and GDB scripts (named OBJFILE-gdb.gdb) are located in one of the directories listed by this option. This option is ignored for the kinds of scripts having 'set auto-load ... off'. Directories listed here need to be present also in the 'set auto-load safe-path' option. --without-python form: (gdb) help set auto-load scripts-directory Set the list of directories from which to load auto-loaded scripts. Automatically loaded GDB scripts (named OBJFILE-gdb.gdb) are located in one of the directories listed by this option. This option is ignored for the kinds of scripts having 'set auto-load ... off'. Directories listed here need to be present also in the 'set auto-load safe-path' option. Thanks, Jan gdb/ 2012-09-09 Jan Kratochvil Implement auto-load user conveniences suggested by Doug Evans. * auto-load.c: Include top.h. (file_is_auto_load_safe): New variable advice_printed. Print advice. (_initialize_auto_load): New variable scripts_directory_help. Mention GDBPY_AUTO_FILE_NAME and GDB_AUTO_FILE_NAME for set auto-load scripts-directory. Document in online help one can use also files for set auto-load safe-path. * python/py-auto-load.c: (GDBPY_AUTO_FILE_NAME): Move it from here ... * python/python.h (GDBPY_AUTO_FILE_NAME): ... to here. diff --git a/gdb/auto-load.c b/gdb/auto-load.c index b314ad6..a0f8266 100644 --- a/gdb/auto-load.c +++ b/gdb/auto-load.c @@ -37,6 +37,7 @@ #include "completer.h" #include "observer.h" #include "fnmatch.h" +#include "top.h" /* The suffix of per-objfile scripts to auto-load as non-Python command files. E.g. When the program loads libfoo.so, look for libfoo-gdb.gdb. */ @@ -441,6 +442,7 @@ file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...) { char *filename_real = NULL; struct cleanup *back_to; + static int advice_printed = 0; if (debug_auto_load) { @@ -470,6 +472,30 @@ file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...) "`auto-load safe-path' set to \"%s\"."), filename_real, auto_load_safe_path); + if (!advice_printed) + { + const char *homedir = getenv ("HOME"); + char *homeinit; + + if (homedir == NULL) + homedir = "$HOME"; + homeinit = xstrprintf ("%s/%s", homedir, gdbinit); + make_cleanup (xfree, homeinit); + + printf_filtered (_("\ +To enable execution of this file add\n\ +\tadd-auto-load-safe-path %s\n\ +line to your configuration file \"%s\".\n\ +To completely disable this security protection add\n\ +\tset auto-load safe-path /\n\ +line to your configuration file \"%s\".\n\ +For more information about this security protection see\n\ +the \"Auto-loading safe path\" section in the GDB manual or run from the shell:\n\ +\tinfo \"(gdb)Auto-loading safe path\"\n"), + filename_real, homeinit, homeinit); + advice_printed = 1; + } + do_cleanups (back_to); return 0; } @@ -1164,6 +1190,7 @@ void _initialize_auto_load (void) { struct cmd_list_element *cmd; + char *scripts_directory_help; auto_load_pspace_data = register_program_space_data_with_cleanup (NULL, @@ -1207,30 +1234,50 @@ Usage: info auto-load local-gdbinit"), auto_load_info_cmdlist_get ()); auto_load_dir = xstrdup (AUTO_LOAD_DIR); + scripts_directory_help = xstrprintf ( +#ifdef HAVE_PYTHON + _("\ +Automatically loaded Python scripts (named OBJFILE%s) and GDB scripts\n\ +(named OBJFILE%s) are located in one of the directories listed by this\n\ +option.\n\ +%s"), + GDBPY_AUTO_FILE_NAME, +#else + _("\ +Automatically loaded GDB scripts (named OBJFILE%s) are located in one\n\ +of the directories listed by this option.\n\ +%s"), +#endif + GDB_AUTO_FILE_NAME, + _("\ +This option is ignored for the kinds of scripts \ +having 'set auto-load ... off'.\n\ +Directories listed here need to be present also \ +in the 'set auto-load safe-path'\n\ +option.")); add_setshow_optional_filename_cmd ("scripts-directory", class_support, &auto_load_dir, _("\ Set the list of directories from which to load auto-loaded scripts."), _("\ -Show the list of directories from which to load auto-loaded scripts."), _("\ -Automatically loaded Python scripts and GDB scripts are located in one of the\n\ -directories listed by this option. This option is ignored for the kinds of\n\ -scripts having 'set auto-load ... off'. Directories listed here need to be\n\ -present also in the 'set auto-load safe-path' option."), +Show the list of directories from which to load auto-loaded scripts."), + scripts_directory_help, set_auto_load_dir, show_auto_load_dir, auto_load_set_cmdlist_get (), auto_load_show_cmdlist_get ()); + xfree (scripts_directory_help); auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH); auto_load_safe_path_vec_update (); add_setshow_optional_filename_cmd ("safe-path", class_support, &auto_load_safe_path, _("\ -Set the list of directories from which it is safe to auto-load files."), _("\ -Show the list of directories from which it is safe to auto-load files."), _("\ +Set the list of files and directories that are safe for auto-loading."), _("\ +Show the list of files and directories that are safe for auto-loading."), _("\ Various files loaded automatically for the 'set auto-load ...' options must\n\ be located in one of the directories listed by this option. Warning will be\n\ printed and file will not be used otherwise.\n\ +You can mix both directory and filename entries.\n\ Setting this parameter to an empty list resets it to its default value.\n\ Setting this parameter to '/' (without the quotes) allows any file\n\ -for the 'set auto-load ...' options. Each directory can be also shell\n\ +for the 'set auto-load ...' options. Each path entry can be also shell\n\ wildcard pattern; '*' does not match directory separator.\n\ This option is ignored for the kinds of files having 'set auto-load ... off'.\n\ This options has security implications for untrusted inferiors."), diff --git a/gdb/python/py-auto-load.c b/gdb/python/py-auto-load.c index 8512129..a018f5f 100644 --- a/gdb/python/py-auto-load.c +++ b/gdb/python/py-auto-load.c @@ -31,10 +31,6 @@ #include "python-internal.h" -/* The suffix of per-objfile scripts to auto-load. - E.g. When the program loads libfoo.so, look for libfoo-gdb.py. */ -#define GDBPY_AUTO_FILE_NAME "-gdb.py" - /* The section to look for Python auto-loaded scripts (in file formats that support sections). Each entry in this section is a byte of value 1, and then the nul-terminated diff --git a/gdb/python/python.h b/gdb/python/python.h index dd7066f..0d07271 100644 --- a/gdb/python/python.h +++ b/gdb/python/python.h @@ -24,6 +24,10 @@ struct breakpoint_object; +/* The suffix of per-objfile scripts to auto-load. + E.g. When the program loads libfoo.so, look for libfoo-gdb.py. */ +#define GDBPY_AUTO_FILE_NAME "-gdb.py" + extern void finish_python_initialization (void); void eval_python_from_control_command (struct command_line *);