* top.c: #include "python/python.h".

(gdb_init): Add a comment regarding initialize_all_files.
	Call finish_python_initialization at the end.
	* python/python.h (finish_python_initialization): Declare.
	* python/python.c (finish_python_initialization): New function.
	(_initialize_python): Move python-implemented initialization there
	and call it.
	(GdbMethods): Use #ifdef HAVE_PYTHON for consistency.
This commit is contained in:
Doug Evans 2010-11-02 16:48:43 +00:00
parent ffa54e5c48
commit 9dea916356
4 changed files with 48 additions and 8 deletions

View File

@ -1,3 +1,14 @@
2010-11-02 Doug Evans <dje@google.com>
* top.c: #include "python/python.h".
(gdb_init): Add a comment regarding initialize_all_files.
Call finish_python_initialization at the end.
* python/python.h (finish_python_initialization): Declare.
* python/python.c (finish_python_initialization): New function.
(_initialize_python): Move python-implemented initialization there
and call it.
(GdbMethods): Use #ifdef HAVE_PYTHON for consistency.
2010-11-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Revert:

View File

@ -997,9 +997,26 @@ Enables or disables printing of Python stack traces."),
gdbpy_doc_cst = PyString_FromString ("__doc__");
gdbpy_enabled_cst = PyString_FromString ("enabled");
/* Remaining initialization is done in Python.
- create a couple objects which are used for Python's stdout and stderr
- provide function GdbSetPythonDirectory */
/* Release the GIL while gdb runs. */
PyThreadState_Swap (NULL);
PyEval_ReleaseLock ();
#endif /* HAVE_PYTHON */
}
#ifdef HAVE_PYTHON
/* Perform the remaining python initializations.
These must be done after GDB is at least mostly initialized.
E.g., The "info pretty-printer" command needs the "info" prefix
command installed. */
void
finish_python_initialization (void)
{
struct cleanup *cleanup;
cleanup = ensure_python_env (get_current_arch (), current_language);
PyRun_SimpleString ("\
import os\n\
@ -1055,16 +1072,14 @@ def GdbSetPythonDirectory (dir):\n\
GdbSetPythonDirectory (gdb.PYTHONDIR)\n\
");
/* Release the GIL while gdb runs. */
PyThreadState_Swap (NULL);
PyEval_ReleaseLock ();
do_cleanups (cleanup);
}
#endif /* HAVE_PYTHON */
}
#if HAVE_PYTHON
#ifdef HAVE_PYTHON
static PyMethodDef GdbMethods[] =
{

View File

@ -24,6 +24,8 @@
extern int gdbpy_global_auto_load;
extern void finish_python_initialization (void);
void eval_python_from_control_command (struct command_line *);
void source_python_script (FILE *stream, const char *file);

View File

@ -47,6 +47,7 @@
#include "main.h"
#include "event-loop.h"
#include "gdbthread.h"
#include "python/python.h"
/* readline include files */
#include "readline/readline.h"
@ -1657,7 +1658,10 @@ gdb_init (char *argv0)
init_cmd_lists (); /* This needs to be done first */
initialize_targets (); /* Setup target_terminal macros for utils.c */
initialize_utils (); /* Make errors and warnings possible */
/* Here is where we call all the _initialize_foo routines. */
initialize_all_files ();
/* This creates the current_program_space. Do this after all the
_initialize_foo routines have had a chance to install their
per-sspace data keys. Also do this before
@ -1684,4 +1688,12 @@ gdb_init (char *argv0)
deprecated_init_ui_hook. */
if (deprecated_init_ui_hook)
deprecated_init_ui_hook (argv0);
#ifdef HAVE_PYTHON
/* Python initialization can require various commands to be installed.
For example "info pretty-printer" needs the "info" prefix to be
installed. Keep things simple and just do final python initialization
here. */
finish_python_initialization ();
#endif
}