From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30997 invoked by alias); 11 Dec 2010 00:47:48 -0000 Received: (qmail 30981 invoked by uid 22791); 11 Dec 2010 00:47:46 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 11 Dec 2010 00:47:39 +0000 Received: from wpaz5.hot.corp.google.com (wpaz5.hot.corp.google.com [172.24.198.69]) by smtp-out.google.com with ESMTP id oBB0laKQ021082 for ; Fri, 10 Dec 2010 16:47:36 -0800 Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.18.118.116]) by wpaz5.hot.corp.google.com with ESMTP id oBB0lZCR031828 for ; Fri, 10 Dec 2010 16:47:35 -0800 Received: by ruffy.mtv.corp.google.com (Postfix, from userid 67641) id E48242461AD; Fri, 10 Dec 2010 16:47:34 -0800 (PST) To: gdb-patches@sourceware.org Subject: [patch, doc RFA] New command-line option -na. Message-Id: <20101211004734.E48242461AD@ruffy.mtv.corp.google.com> Date: Sat, 11 Dec 2010 00:47:00 -0000 From: dje@google.com (Doug Evans) X-System-Of-Record: true 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: 2010-12/txt/msg00153.txt.bz2 Hi. It is useful to be able to disable the auto-loading of scripts provided by the program. E.g., because there's a bug in one, or because you don't trust them. The capability exists today with "maint set python auto-load on|off", but that can't be used to disable scripts from a program provided on the command line. In order to use that, one has to start gdb without a program, disable auto-loading, and *then* use the "file" command. Bleah. This patch adds a new command-line option, -na, to disable auto-loading. Since auto-loading is less of a maintenance issue, and since there's no reason why this has to be python-specific, I'm renaming "maint set python auto-load on|off" to "set auto-load-scripts on|off". I will check this in in two days if there are no objections. [and pending doc RFA] 2010-12-10 Doug Evans New command-line option -na, new command "set auto-load-scripts". * NEWS: Mention them. main.c (captured_main): Recognize -na. (print_gdb_help): Print -na. * top.c (auto_load_scripts): New global. (init_main): New command "set auto-load-scripts on|off". * top.h (auto_load_scripts): Declare. * python/py-auto-load.c (gdbpy_auto_load): Delete. (load_auto_scripts_for_objfile): Test auto_load_scripts instead of gdbpy_auto_load. (gdbpy_initialize_auto_load): Delete command "maint set python auto-load on|off". doc/ * gdb.texinfo (Mode Options): Document -na. (Startup): Document auto-loading of scripts during startup. (Auto-loading): Delete "maint set python auto-load on|off". Add "set auto-load-scripts on|off". Index: NEWS =================================================================== RCS file: /cvs/src/src/gdb/NEWS,v retrieving revision 1.414 diff -u -p -r1.414 NEWS --- NEWS 10 Dec 2010 20:33:44 -0000 1.414 +++ NEWS 11 Dec 2010 00:23:22 -0000 @@ -8,6 +8,11 @@ -data-directory DIR Specify DIR as the "data-directory". This is mostly for testing purposes. +-na Disable the loading of auto-loaded scripts. + +* The "maint set python auto-load on|off" command has been renamed to + "set auto-load-scripts on|off". + * GDB has a new command: "set directories". It is like the "dir" command except that it replaces the source path list instead of augmenting it. Index: main.c =================================================================== RCS file: /cvs/src/src/gdb/main.c,v retrieving revision 1.88 diff -u -p -r1.88 main.c --- main.c 7 Dec 2010 17:26:03 -0000 1.88 +++ main.c 11 Dec 2010 00:23:22 -0000 @@ -396,6 +396,7 @@ captured_main (void *data) {"silent", no_argument, &quiet, 1}, {"nx", no_argument, &inhibit_gdbinit, 1}, {"n", no_argument, &inhibit_gdbinit, 1}, + {"na", no_argument, &auto_load_scripts, 0}, {"batch-silent", no_argument, 0, 'B'}, {"batch", no_argument, &batch_flag, 1}, {"epoch", no_argument, &epoch_interface, 1}, @@ -985,6 +986,7 @@ Options:\n\n\ --nx Do not read "), stream); fputs_unfiltered (gdbinit, stream); fputs_unfiltered (_(" file.\n\ + --na Do not auto-load scripts provided by the program.\n\ --quiet Do not print version number on startup.\n\ --readnow Fully read symbol files on first access.\n\ "), stream); Index: top.c =================================================================== RCS file: /cvs/src/src/gdb/top.c,v retrieving revision 1.185 diff -u -p -r1.185 top.c --- top.c 2 Nov 2010 16:48:41 -0000 1.185 +++ top.c 11 Dec 2010 00:23:22 -0000 @@ -88,6 +88,13 @@ char gdbinit[PATH_MAX + 1] = GDBINIT_FIL int inhibit_gdbinit = 0; +/* User-settable option to enable/disable auto-loading of scripts + provided by the program: + set auto-load-scripts on|off + If zero, then "auto-load" scripts are not loaded, + otherwise they are loaded. */ +int auto_load_scripts = 1; + /* If nonzero, and GDB has been configured to be able to use windows, attempt to open them upon startup. */ @@ -1507,6 +1514,7 @@ show_exec_done_display_p (struct ui_file Notification of completion for asynchronous execution commands is %s.\n"), value); } + static void init_main (void) { @@ -1639,6 +1647,15 @@ When set, GDB uses the specified path to NULL, NULL, &setlist, &showlist); + + add_setshow_boolean_cmd ("auto-load-scripts", class_support, + &auto_load_scripts, _("\ +Enable or disable auto-loading of scripts when an object is opened."), _("\ +Show whether scripts will be auto-loaded when an object is opened."), _("\ +Enables or disables auto-loading of scripts when an object is opened."), + NULL, NULL, + &setlist, + &showlist); } void Index: top.h =================================================================== RCS file: /cvs/src/src/gdb/top.h,v retrieving revision 1.22 diff -u -p -r1.22 top.h --- top.h 7 Apr 2010 16:54:39 -0000 1.22 +++ top.h 11 Dec 2010 00:23:22 -0000 @@ -30,6 +30,7 @@ extern int in_user_command; extern int caution; extern char gdb_dirbuf[1024]; extern int inhibit_gdbinit; +extern int auto_load_scripts; extern int epoch_interface; extern char gdbinit[]; Index: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.779 diff -u -p -r1.779 gdb.texinfo --- doc/gdb.texinfo 7 Dec 2010 17:26:03 -0000 1.779 +++ doc/gdb.texinfo 11 Dec 2010 00:23:23 -0000 @@ -1025,6 +1025,11 @@ Do not execute commands found in any ini options and arguments have been processed. @xref{Command Files,,Command Files}. +@item -na +@cindex @code{--na} +Do not auto-load scripts provided by the program. +@xref{Auto-loading}. + @item -quiet @itemx -silent @itemx -q @@ -1263,6 +1268,12 @@ to the program you are debugging, in the @value{GDBN}. @item +Loads any auto-loaded scripts provided by the program being debugged. +@xref{Auto-loading}. +This can be disabled with the @samp{-na} option. +@xref{Mode Options, -na}. + +@item Reads command files specified by the @samp{-x} option. @xref{Command Files}, for more details about @value{GDBN} command files. @@ -23114,15 +23125,18 @@ debugging commands and scripts. Auto-loading can be enabled or disabled. @table @code -@kindex maint set python auto-load -@item maint set python auto-load [yes|no] -Enable or disable the Python auto-loading feature. - -@kindex maint show python auto-load -@item maint show python auto-load -Show whether Python auto-loading is enabled or disabled. +@kindex set auto-load +@item set auto-load [yes|no] +Enable or disable the auto-loading of scripts. + +@kindex show auto-load +@item show auto-load +Show whether auto-loading is enabled or disabled. @end table +Auto-loading can also be disabled with the @samp{-na} command-line option. +@xref{Mode Options, -na}. + When reading an auto-loaded file, @value{GDBN} sets the @dfn{current objfile}. This is available via the @code{gdb.current_objfile} function (@pxref{Objfiles In Python}). This can be useful for Index: python/py-auto-load.c =================================================================== RCS file: /cvs/src/src/gdb/python/py-auto-load.c,v retrieving revision 1.5 diff -u -p -r1.5 py-auto-load.c --- python/py-auto-load.c 22 Sep 2010 20:00:53 -0000 1.5 +++ python/py-auto-load.c 11 Dec 2010 00:23:23 -0000 @@ -34,7 +34,7 @@ This is true if we should auto-load python code when an objfile is opened, false otherwise. - Both gdbpy_auto_load && gdbpy_global_auto_load must be true to enable + Both auto_load_scripts && gdbpy_global_auto_load must be true to enable auto-loading. This flag exists to facilitate deferring auto-loading during start-up @@ -81,12 +81,6 @@ struct loaded_script_entry const char *full_path; }; -/* User-settable option to enable/disable auto-loading: - maint set python auto-load on|off - This is true if we should auto-load python code when an objfile is opened, - false otherwise. */ -static int gdbpy_auto_load = 1; - /* Per-program-space data key. */ static const struct program_space_data *auto_load_pspace_data; @@ -404,7 +398,7 @@ auto_load_new_objfile (struct objfile *o void load_auto_scripts_for_objfile (struct objfile *objfile) { - if (gdbpy_auto_load && gdbpy_global_auto_load) + if (auto_load_scripts && gdbpy_global_auto_load) { auto_load_objfile_script (objfile, GDBPY_AUTO_FILE_NAME); auto_load_section_scripts (objfile, GDBPY_AUTO_SECTION_NAME); @@ -471,15 +465,6 @@ gdbpy_initialize_auto_load (void) observer_attach_new_objfile (auto_load_new_objfile); - add_setshow_boolean_cmd ("auto-load", class_maintenance, - &gdbpy_auto_load, _("\ -Enable or disable auto-loading of Python code when an object is opened."), _("\ -Show whether Python code will be auto-loaded when an object is opened."), _("\ -Enables or disables auto-loading of Python code when an object is opened."), - NULL, NULL, - &set_python_list, - &show_python_list); - add_cmd ("section-scripts", class_maintenance, maintenance_print_section_scripts, _("Print dump of auto-loaded section scripts matching REGEXP."), &maintenanceprintlist);