* configure.ac (CONFIG_SRCS): Add py-auto-load.o even if not using
authorDoug Evans <dje@google.com>
Fri, 23 Apr 2010 18:09:16 +0000 (18:09 +0000)
committerDoug Evans <dje@google.com>
Fri, 23 Apr 2010 18:09:16 +0000 (18:09 +0000)
python.
* configure: Regenerate.
* main.c: #include "python/python.h".
(captured_main): Defer loading auto-loaded scripts until after
local_gdbinit has been sourced.
* python/py-auto-load.c (gdbpy_global_auto_load): New global.
(load_auto_scripts_for_objfile): New function.
(auto_load_new_objfile): Call it.
* python/python.h (gdbpy_global_auto_load): Declare.
(load_auto_scripts_for_objfile): Declare.

gdb/ChangeLog
gdb/configure
gdb/configure.ac
gdb/main.c
gdb/python/py-auto-load.c
gdb/python/python.h

index b59013f42667fe5ca027ccaa4f3c61ca27e225de..013f001859e7913eea31bb4d21c37df6ec9f5ba7 100644 (file)
@@ -1,5 +1,17 @@
 2010-04-23  Doug Evans  <dje@google.com>
 
+       * configure.ac (CONFIG_SRCS): Add py-auto-load.o even if not using
+       python.
+       * configure: Regenerate.
+       * main.c: #include "python/python.h".
+       (captured_main): Defer loading auto-loaded scripts until after
+       local_gdbinit has been sourced.
+       * python/py-auto-load.c (gdbpy_global_auto_load): New global.
+       (load_auto_scripts_for_objfile): New function.
+       (auto_load_new_objfile): Call it.
+       * python/python.h (gdbpy_global_auto_load): Declare.
+       (load_auto_scripts_for_objfile): Declare.
+
        Add support for auto-loading scripts from .debug_gdb_scripts section.
        * NEWS: Add entry for .debug_gdb_scripts.
        * Makefile.in SUBDIR_PYTHON_OBS): Add py-auto-load.o.
index 0f3d7e6932e9bd506e3f202b9110881a4c6c19f6..301394f3724fd55974cb90ad7efb6d9f714aaffa 100755 (executable)
@@ -9648,9 +9648,10 @@ $as_echo "${PYTHON_CFLAGS}" >&6; }
   fi
 else
   # Even if Python support is not compiled in, we need to have these files
-  # included in order to recognize the GDB command "python".
-  CONFIG_OBS="$CONFIG_OBS python.o py-value.o py-prettyprint.o"
-  CONFIG_SRCS="$CONFIG_SRCS python/python.c python/py-value.c python/py-prettyprint.c"
+  # included.
+  CONFIG_OBS="$CONFIG_OBS python.o py-value.o py-prettyprint.o py-auto-load.o"
+  CONFIG_SRCS="$CONFIG_SRCS python/python.c python/py-value.c \
+       python/py-prettyprint.c python/py-auto-load.c"
 fi
 
 
index 434c5b4da9e0c469aadc4a1ab46cf12884c8412d..4704a538b69bdce71b75744f5800a2c498b41110 100644 (file)
@@ -701,9 +701,10 @@ if test "${have_libpython}" = yes; then
   fi
 else
   # Even if Python support is not compiled in, we need to have these files
-  # included in order to recognize the GDB command "python".
-  CONFIG_OBS="$CONFIG_OBS python.o py-value.o py-prettyprint.o"
-  CONFIG_SRCS="$CONFIG_SRCS python/python.c python/py-value.c python/py-prettyprint.c"
+  # included.
+  CONFIG_OBS="$CONFIG_OBS python.o py-value.o py-prettyprint.o py-auto-load.o"
+  CONFIG_SRCS="$CONFIG_SRCS python/python.c python/py-value.c \
+       python/py-prettyprint.c python/py-auto-load.c"
 fi
 AC_SUBST(PYTHON_CFLAGS)
 
index ec2a2fdab2a565867b82f3f3ea85de9cdcadb149..030c6818df9200670d7ffea686c353a4dea04b45 100644 (file)
@@ -41,6 +41,7 @@
 #include "main.h"
 #include "source.h"
 #include "cli/cli-cmds.h"
+#include "python/python.h"
 
 /* If nonzero, display time usage both at startup and for each command.  */
 
@@ -291,6 +292,7 @@ captured_main (void *data)
   char *local_gdbinit;
 
   int i;
+  int save_auto_load;
 
   long time_at_startup = get_run_time ();
 
@@ -798,6 +800,11 @@ Excess command line arguments ignored. (%s%s)\n"),
     catch_command_errors (directory_switch, dirarg[i], 0, RETURN_MASK_ALL);
   xfree (dirarg);
 
+  /* Skip auto-loading section-specified scripts until we've sourced
+     local_gdbinit (which is often used to augment the source search path).  */
+  save_auto_load = gdbpy_global_auto_load;
+  gdbpy_global_auto_load = 0;
+
   if (execarg != NULL
       && symarg != NULL
       && strcmp (execarg, symarg) == 0)
@@ -857,6 +864,14 @@ Can't attach to process and specify a core file at the same time."));
   if (local_gdbinit && !inhibit_gdbinit)
     catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
 
+  /* Now that all .gdbinit's have been read and all -d options have been
+     processed, we can read any scripts mentioned in SYMARG.
+     We wait until now because it is common to add to the source search
+     path in local_gdbinit.  */
+  gdbpy_global_auto_load = save_auto_load;
+  if (symfile_objfile != NULL)
+    load_auto_scripts_for_objfile (symfile_objfile);
+
   for (i = 0; i < ncmd; i++)
     {
       if (cmdarg[i].type == CMDARG_FILE)
index e3b406ca9bbe91a254e121b155532a6368e92cbd..a06c126b32f94459d4aedff4f8e606ba4148627f 100644 (file)
 #include "progspace.h"
 #include "objfiles.h"
 #include "python.h"
-#include "python-internal.h"
 #include "cli/cli-cmds.h"
 
+/* Internal-use flag to enable/disable auto-loading.
+   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
+   auto-loading.
+
+   This flag exists to facilitate deferring auto-loading during start-up
+   until after ./.gdbinit has been read; it may augment the search directories
+   used to find the scripts.  */
+int gdbpy_global_auto_load = 1;
+
+#ifdef HAVE_PYTHON
+
+#include "python-internal.h"
+
 /* NOTE: It's trivial to also support auto-loading normal gdb scripts.
    There has yet to be a need so it's not implemented.  */
 
@@ -66,7 +81,9 @@ struct loaded_script_entry
   const char *full_path;
 };
 
-/* This is true if we should auto-load python code when an objfile is opened,
+/* 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;
 
@@ -377,7 +394,15 @@ auto_load_new_objfile (struct objfile *objfile)
   if (!objfile->name)
     return;
 
-  if (gdbpy_auto_load)
+  load_auto_scripts_for_objfile (objfile);
+}
+
+/* Load any auto-loaded scripts for OBJFILE.  */
+
+void
+load_auto_scripts_for_objfile (struct objfile *objfile)
+{
+  if (gdbpy_auto_load && gdbpy_global_auto_load)
     {
       auto_load_objfile_script (objfile, GDBPY_AUTO_FILE_NAME);
       auto_load_section_scripts (objfile, GDBPY_AUTO_SECTION_NAME);
@@ -457,3 +482,12 @@ Enables or disables auto-loading of Python code when an object is opened."),
           _("Print dump of auto-loaded section scripts matching REGEXP."),
           &maintenanceprintlist);
 }
+
+#else /* ! HAVE_PYTHON */
+
+void
+load_auto_scripts_for_objfile (struct objfile *objfile)
+{
+}
+
+#endif /* ! HAVE_PYTHON */
index b2a96314c441b344a54498da489fcd8b8fd9f19a..ae808c0c820c4691e55912ad6d043240a183635b 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "value.h"
 
+extern int gdbpy_global_auto_load;
+
 void eval_python_from_control_command (struct command_line *);
 
 void source_python_script (FILE *stream, const char *file);
@@ -34,4 +36,6 @@ int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
 
 void preserve_python_values (struct objfile *objfile, htab_t copied_types);
 
+void load_auto_scripts_for_objfile (struct objfile *objfile);
+
 #endif /* GDB_PYTHON_H */