2011-08-04 Pedro Alves <pedro@codesourcery.com>
* exceptions.c (struct catcher): Remove saved_uiout field. (exceptions_state_mc_init): Remove the `func_uiout' parameter, and no longer save/resvore the global ui_out builder. (catch_exceptions_with_msg): Save/override/restore the global ui_out builder manually instead of relying on TRY_CATCH to do it. (catch_errors): Save/restore the global ui_out builder manually instead of relying on TRY_CATCH to do it. * exceptions.h (exceptions_state_mc_init): Remove the `func_uiout' parameter. (TRY_CATCH): Adjust. * cli/cli-interp.c (safe_execute_command): Save/override/restore the global ui_out builder manually instead of relying on TRY_CATCH to do it.
This commit is contained in:
parent
a1e28cb2af
commit
f9679975a3
|
@ -1,3 +1,19 @@
|
||||||
|
2011-08-04 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* exceptions.c (struct catcher): Remove saved_uiout field.
|
||||||
|
(exceptions_state_mc_init): Remove the `func_uiout' parameter, and
|
||||||
|
no longer save/resvore the global ui_out builder.
|
||||||
|
(catch_exceptions_with_msg): Save/override/restore the global
|
||||||
|
ui_out builder manually instead of relying on TRY_CATCH to do it.
|
||||||
|
(catch_errors): Save/restore the global ui_out builder manually
|
||||||
|
instead of relying on TRY_CATCH to do it.
|
||||||
|
* exceptions.h (exceptions_state_mc_init): Remove the `func_uiout'
|
||||||
|
parameter.
|
||||||
|
(TRY_CATCH): Adjust.
|
||||||
|
* cli/cli-interp.c (safe_execute_command): Save/override/restore
|
||||||
|
the global ui_out builder manually instead of relying on TRY_CATCH
|
||||||
|
to do it.
|
||||||
|
|
||||||
2011-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
2011-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||||
|
|
||||||
* breakpoint.c (update_global_location_list): Ensure
|
* breakpoint.c (update_global_location_list): Ensure
|
||||||
|
|
|
@ -112,14 +112,23 @@ cli_interpreter_exec (void *data, const char *command_str)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct gdb_exception
|
static struct gdb_exception
|
||||||
safe_execute_command (struct ui_out *uiout, char *command, int from_tty)
|
safe_execute_command (struct ui_out *command_uiout, char *command, int from_tty)
|
||||||
{
|
{
|
||||||
volatile struct gdb_exception e;
|
volatile struct gdb_exception e;
|
||||||
|
struct ui_out *saved_uiout;
|
||||||
|
|
||||||
|
/* Save and override the global ``struct ui_out'' builder. */
|
||||||
|
saved_uiout = uiout;
|
||||||
|
uiout = command_uiout;
|
||||||
|
|
||||||
TRY_CATCH (e, RETURN_MASK_ALL)
|
TRY_CATCH (e, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
execute_command (command, from_tty);
|
execute_command (command, from_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore the global builder. */
|
||||||
|
uiout = saved_uiout;
|
||||||
|
|
||||||
/* FIXME: cagney/2005-01-13: This shouldn't be needed. Instead the
|
/* FIXME: cagney/2005-01-13: This shouldn't be needed. Instead the
|
||||||
caller should print the exception. */
|
caller should print the exception. */
|
||||||
exception_print (gdb_stderr, e);
|
exception_print (gdb_stderr, e);
|
||||||
|
|
|
@ -60,7 +60,6 @@ struct catcher
|
||||||
volatile struct gdb_exception *exception;
|
volatile struct gdb_exception *exception;
|
||||||
/* Saved/current state. */
|
/* Saved/current state. */
|
||||||
int mask;
|
int mask;
|
||||||
struct ui_out *saved_uiout;
|
|
||||||
struct cleanup *saved_cleanup_chain;
|
struct cleanup *saved_cleanup_chain;
|
||||||
/* Back link. */
|
/* Back link. */
|
||||||
struct catcher *prev;
|
struct catcher *prev;
|
||||||
|
@ -70,8 +69,7 @@ struct catcher
|
||||||
static struct catcher *current_catcher;
|
static struct catcher *current_catcher;
|
||||||
|
|
||||||
EXCEPTIONS_SIGJMP_BUF *
|
EXCEPTIONS_SIGJMP_BUF *
|
||||||
exceptions_state_mc_init (struct ui_out *func_uiout,
|
exceptions_state_mc_init (volatile struct gdb_exception *exception,
|
||||||
volatile struct gdb_exception *exception,
|
|
||||||
return_mask mask)
|
return_mask mask)
|
||||||
{
|
{
|
||||||
struct catcher *new_catcher = XZALLOC (struct catcher);
|
struct catcher *new_catcher = XZALLOC (struct catcher);
|
||||||
|
@ -84,10 +82,6 @@ exceptions_state_mc_init (struct ui_out *func_uiout,
|
||||||
|
|
||||||
new_catcher->mask = mask;
|
new_catcher->mask = mask;
|
||||||
|
|
||||||
/* Override the global ``struct ui_out'' builder. */
|
|
||||||
new_catcher->saved_uiout = uiout;
|
|
||||||
uiout = func_uiout;
|
|
||||||
|
|
||||||
/* Prevent error/quit during FUNC from calling cleanups established
|
/* Prevent error/quit during FUNC from calling cleanups established
|
||||||
prior to here. */
|
prior to here. */
|
||||||
new_catcher->saved_cleanup_chain = save_cleanups ();
|
new_catcher->saved_cleanup_chain = save_cleanups ();
|
||||||
|
@ -112,8 +106,6 @@ catcher_pop (void)
|
||||||
|
|
||||||
restore_cleanups (old_catcher->saved_cleanup_chain);
|
restore_cleanups (old_catcher->saved_cleanup_chain);
|
||||||
|
|
||||||
uiout = old_catcher->saved_uiout;
|
|
||||||
|
|
||||||
xfree (old_catcher);
|
xfree (old_catcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,7 +451,7 @@ catch_exceptions (struct ui_out *uiout,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
catch_exceptions_with_msg (struct ui_out *uiout,
|
catch_exceptions_with_msg (struct ui_out *func_uiout,
|
||||||
catch_exceptions_ftype *func,
|
catch_exceptions_ftype *func,
|
||||||
void *func_args,
|
void *func_args,
|
||||||
char **gdberrmsg,
|
char **gdberrmsg,
|
||||||
|
@ -467,11 +459,27 @@ catch_exceptions_with_msg (struct ui_out *uiout,
|
||||||
{
|
{
|
||||||
volatile struct gdb_exception exception;
|
volatile struct gdb_exception exception;
|
||||||
volatile int val = 0;
|
volatile int val = 0;
|
||||||
|
struct ui_out *saved_uiout;
|
||||||
|
|
||||||
TRY_CATCH (exception, mask)
|
/* Save and override the global ``struct ui_out'' builder. */
|
||||||
|
saved_uiout = uiout;
|
||||||
|
uiout = func_uiout;
|
||||||
|
|
||||||
|
TRY_CATCH (exception, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
val = (*func) (uiout, func_args);
|
val = (*func) (uiout, func_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore the global builder. */
|
||||||
|
uiout = saved_uiout;
|
||||||
|
|
||||||
|
if (exception.reason < 0 && (mask & RETURN_MASK (exception.reason)) == 0)
|
||||||
|
{
|
||||||
|
/* The caller didn't request that the event be caught.
|
||||||
|
Rethrow. */
|
||||||
|
throw_exception (exception);
|
||||||
|
}
|
||||||
|
|
||||||
print_any_exception (gdb_stderr, NULL, exception);
|
print_any_exception (gdb_stderr, NULL, exception);
|
||||||
gdb_assert (val >= 0);
|
gdb_assert (val >= 0);
|
||||||
gdb_assert (exception.reason <= 0);
|
gdb_assert (exception.reason <= 0);
|
||||||
|
@ -500,11 +508,26 @@ catch_errors (catch_errors_ftype *func, void *func_args, char *errstring,
|
||||||
{
|
{
|
||||||
volatile int val = 0;
|
volatile int val = 0;
|
||||||
volatile struct gdb_exception exception;
|
volatile struct gdb_exception exception;
|
||||||
|
struct ui_out *saved_uiout;
|
||||||
|
|
||||||
TRY_CATCH (exception, mask)
|
/* Save the global ``struct ui_out'' builder. */
|
||||||
|
saved_uiout = uiout;
|
||||||
|
|
||||||
|
TRY_CATCH (exception, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
val = func (func_args);
|
val = func (func_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore the global builder. */
|
||||||
|
uiout = saved_uiout;
|
||||||
|
|
||||||
|
if (exception.reason < 0 && (mask & RETURN_MASK (exception.reason)) == 0)
|
||||||
|
{
|
||||||
|
/* The caller didn't request that the event be caught.
|
||||||
|
Rethrow. */
|
||||||
|
throw_exception (exception);
|
||||||
|
}
|
||||||
|
|
||||||
print_any_exception (gdb_stderr, errstring, exception);
|
print_any_exception (gdb_stderr, errstring, exception);
|
||||||
if (exception.reason != 0)
|
if (exception.reason != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -114,8 +114,7 @@ extern const struct gdb_exception exception_none;
|
||||||
|
|
||||||
/* Functions to drive the exceptions state m/c (internal to
|
/* Functions to drive the exceptions state m/c (internal to
|
||||||
exceptions). */
|
exceptions). */
|
||||||
EXCEPTIONS_SIGJMP_BUF *exceptions_state_mc_init (struct ui_out *func_uiout,
|
EXCEPTIONS_SIGJMP_BUF *exceptions_state_mc_init (volatile struct
|
||||||
volatile struct
|
|
||||||
gdb_exception *exception,
|
gdb_exception *exception,
|
||||||
return_mask mask);
|
return_mask mask);
|
||||||
int exceptions_state_mc_action_iter (void);
|
int exceptions_state_mc_action_iter (void);
|
||||||
|
@ -146,7 +145,7 @@ int exceptions_state_mc_action_iter_1 (void);
|
||||||
#define TRY_CATCH(EXCEPTION,MASK) \
|
#define TRY_CATCH(EXCEPTION,MASK) \
|
||||||
{ \
|
{ \
|
||||||
EXCEPTIONS_SIGJMP_BUF *buf = \
|
EXCEPTIONS_SIGJMP_BUF *buf = \
|
||||||
exceptions_state_mc_init (uiout, &(EXCEPTION), (MASK)); \
|
exceptions_state_mc_init (&(EXCEPTION), (MASK)); \
|
||||||
EXCEPTIONS_SIGSETJMP (*buf); \
|
EXCEPTIONS_SIGSETJMP (*buf); \
|
||||||
} \
|
} \
|
||||||
while (exceptions_state_mc_action_iter ()) \
|
while (exceptions_state_mc_action_iter ()) \
|
||||||
|
|
Loading…
Reference in New Issue