From c1966e261a3c0e0a32639d464a5ebee83aa31144 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 11 Mar 2014 00:02:19 -0400 Subject: [PATCH] * guile/guile.c (call_initialize_gdb_module): New function. (initialize_guile): Replace call to scm_init_guile with call to scm_with_guile. --- gdb/ChangeLog | 6 ++++++ gdb/guile/guile.c | 28 ++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3328043b81..2b68829da7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2014-03-10 Doug Evans + + * guile/guile.c (call_initialize_gdb_module): New function. + (initialize_guile): Replace call to scm_init_guile with call to + scm_with_guile. + 2014-03-10 Joel Brobecker * ada-lang.c (ada_evaluate_subexp): Add missing space before '(' diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c index b7134f7a26..f2fd8d8aef 100644 --- a/gdb/guile/guile.c +++ b/gdb/guile/guile.c @@ -561,6 +561,20 @@ initialize_gdb_module (void *data) gdb_scheme_initialized = 1; } +/* Utility to call scm_c_define_module+initialize_gdb_module from + within scm_with_guile. */ + +static void * +call_initialize_gdb_module (void *data) +{ + /* Most of the initialization is done by initialize_gdb_module. + It is called via scm_c_define_module so that the initialization is + performed within the desired module. */ + scm_c_define_module (gdbscm_module_name, initialize_gdb_module, NULL); + + return NULL; +} + /* A callback to finish Guile initialization after gdb has finished all its initialization. This is the extension_language_ops.finish_initialization "method". */ @@ -697,20 +711,14 @@ _initialize_guile (void) install_gdb_commands (); #if HAVE_GUILE - /* The Guile docs say scm_init_guile isn't as portable as the other Guile - initialization routines. However, this is the easiest to use. - We can switch to a more portable routine if/when the need arises - and if it can be used with gdb. */ - scm_init_guile (); - /* The Python support puts the C side in module "_gdb", leaving the Python side to define module "gdb" which imports "_gdb". There is evidently no similar convention in Guile so we skip this. */ - /* The rest of the initialization is done by initialize_gdb_module. - scm_c_define_module is used as it allows us to perform the initialization - within the desired module. */ - scm_c_define_module (gdbscm_module_name, initialize_gdb_module, NULL); + /* scm_with_guile is the most portable way to initialize Guile. + Plus we need to initialize the Guile support while in Guile mode + (e.g., called from within a call to scm_with_guile). */ + scm_with_guile (call_initialize_gdb_module, NULL); /* Set Guile's backtrace to match the "set guile print-stack" default. [N.B. The two settings are still separate.] -- 2.34.1