From: Keith Seitz Date: Thu, 25 Jul 2002 17:15:55 +0000 (+0000) Subject: * stack.c (frame_command): If the frame level changed, issue X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fd17289b2ff1493643a8d7cc20bc8100c2b3dac;p=thirdparty%2Fbinutils-gdb.git * stack.c (frame_command): If the frame level changed, issue a selected_frame_level_changed event. (up_command): Add selected_frame_level_changed event; (down_command): Likewise. * gdb-events.sh: Add selected_frame_level_changed event. * gdb-events.c: Regenerate. * gdb-events.h: Regenerate. * stack.c (print_frame_info_base): Always set current_source_symtab and current_source_line. * cli/cli-interp.c (cli_interpreter_exec): Pass from_tty=1 to gdb_execute_command. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6f63236bcc3..fbbe63bb950 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2002-07-25 Keith Seitz + + * stack.c (frame_command): If the frame level changed, issue + a selected_frame_level_changed event. + (up_command): Add selected_frame_level_changed event; + (down_command): Likewise. + + * gdb-events.sh: Add selected_frame_level_changed event. + * gdb-events.c: Regenerate. + * gdb-events.h: Regenerate. + + * stack.c (print_frame_info_base): Always set current_source_symtab + and current_source_line. + + * cli/cli-interp.c (cli_interpreter_exec): Pass from_tty=1 to + gdb_execute_command. + 2002-07-22 Keith Seitz * gdb-events.sh (register_changed_hook): Remove comment. diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 83d8469fb92..0ce7aa157b7 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -100,7 +100,7 @@ cli_interpreter_exec (void *data, char *command_str) It is important that it gets reset everytime, since the user could set gdb to use a different interpreter. */ old_stream = cli_out_set_stream (cli_uiout, gdb_stdout); - result = gdb_execute_command (cli_uiout, command_str, 0); + result = gdb_execute_command (cli_uiout, command_str, 1); cli_out_set_stream (cli_uiout, old_stream); return result; } diff --git a/gdb/gdb-events.c b/gdb/gdb-events.c index 2f218f0d285..c451d4bf336 100644 --- a/gdb/gdb-events.c +++ b/gdb/gdb-events.c @@ -129,6 +129,16 @@ register_update_event (int regno) current_event_hooks->register_update (regno); } +void +selected_frame_level_changed_event (int level) +{ + if (gdb_events_debug) + fprintf_unfiltered (gdb_stdlog, "selected_frame_level_changed_event\n"); + if (!current_event_hooks->selected_frame_level_changed) + return; + current_event_hooks->selected_frame_level_changed (level); +} + #endif #if WITH_GDB_EVENTS @@ -162,6 +172,7 @@ enum gdb_event tracepoint_modify, architecture_changed, register_update, + selected_frame_level_changed, nr_gdb_events }; @@ -200,6 +211,11 @@ struct register_update int regno; }; +struct selected_frame_level_changed + { + int level; + }; + struct event { enum gdb_event type; @@ -213,6 +229,7 @@ struct event struct tracepoint_delete tracepoint_delete; struct tracepoint_modify tracepoint_modify; struct register_update register_update; + struct selected_frame_level_changed selected_frame_level_changed; } data; }; @@ -300,6 +317,15 @@ queue_register_update (int regno) append (event); } +static void +queue_selected_frame_level_changed (int level) +{ + struct event *event = XMALLOC (struct event); + event->type = selected_frame_level_changed; + event->data.selected_frame_level_changed.level = level; + append (event); +} + void gdb_events_deliver (struct gdb_events *vector) { @@ -352,6 +378,10 @@ gdb_events_deliver (struct gdb_events *vector) vector->register_update (event->data.register_update.regno); break; + case selected_frame_level_changed: + vector->selected_frame_level_changed + (event->data.selected_frame_level_changed.level); + break; } delivering_events = event->next; xfree (event); @@ -372,6 +402,7 @@ _initialize_gdb_events (void) queue_event_hooks.tracepoint_modify = queue_tracepoint_modify; queue_event_hooks.architecture_changed = queue_architecture_changed; queue_event_hooks.register_update = queue_register_update; + queue_event_hooks.selected_frame_level_changed = queue_selected_frame_level_changed; #endif c = add_set_cmd ("eventdebug", class_maintenance, var_zinteger, diff --git a/gdb/gdb-events.h b/gdb/gdb-events.h index 5d834b050b7..50b0d391049 100644 --- a/gdb/gdb-events.h +++ b/gdb/gdb-events.h @@ -60,6 +60,7 @@ typedef void (gdb_events_tracepoint_delete_ftype) (int number); typedef void (gdb_events_tracepoint_modify_ftype) (int number); typedef void (gdb_events_architecture_changed_ftype) (void); typedef void (gdb_events_register_update_ftype) (int regno); +typedef void (gdb_events_selected_frame_level_changed_ftype) (int level); /* gdb-events: object. */ @@ -74,6 +75,7 @@ struct gdb_events gdb_events_tracepoint_modify_ftype *tracepoint_modify; gdb_events_architecture_changed_ftype *architecture_changed; gdb_events_register_update_ftype *register_update; + gdb_events_selected_frame_level_changed_ftype *selected_frame_level_changed; }; @@ -88,6 +90,7 @@ extern void tracepoint_delete_event (int number); extern void tracepoint_modify_event (int number); extern void architecture_changed_event (void); extern void register_update_event (int regno); +extern void selected_frame_level_changed_event (int level); /* When GDB_EVENTS are not being used, completly disable them. */ @@ -101,6 +104,7 @@ extern void register_update_event (int regno); #define tracepoint_modify_event(number) 0 #define architecture_changed_event() 0 #define register_update_event(regno) 0 +#define selected_frame_level_changed_event(level) 0 #endif /* Install custom gdb-events hooks. */ diff --git a/gdb/gdb-events.sh b/gdb/gdb-events.sh index 16657b9c7ce..e4bf4b15cf9 100755 --- a/gdb/gdb-events.sh +++ b/gdb/gdb-events.sh @@ -66,6 +66,7 @@ f:void:tracepoint_delete:int number:number f:void:tracepoint_modify:int number:number f:void:architecture_changed:void f:void:register_update:int regno:regno +f:void:selected_frame_level_changed:int level:level #*:void:annotate_starting_hook:void #*:void:annotate_stopped_hook:void #*:void:annotate_signalled_hook:void @@ -101,7 +102,6 @@ f:void:register_update:int regno:regno #*:int:gdb_load_progress_hook:char *section, unsigned long num:section, num #*:void:pre_add_symbol_hook:char *name:name #*:void:post_add_symbol_hook:void -#*:void:selected_frame_level_changed_hook:int level:level #*:int:gdb_loop_hook:int signo:signo ##*:void:solib_create_inferior_hook:void ##*:void:xcoff_relocate_symtab_hook:unsigned int diff --git a/gdb/stack.c b/gdb/stack.c index fa5896395d6..432b8fa3df0 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -398,6 +398,11 @@ print_frame_info_base (struct frame_info *fi, int level, int source, int args) print_frame (fi, level, source, args, sal); source_print = (source == SRC_LINE || source == SRC_AND_LOC); + if (sal.symtab) + { + current_source_symtab = sal.symtab; + current_source_line = sal.line; + } if (source_print && sal.symtab) { @@ -410,10 +415,7 @@ print_frame_info_base (struct frame_info *fi, int level, int source, int args) if (!done) { if (print_frame_info_listing_hook) - { - print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0); - current_source_symtab = sal.symtab; - } + print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0); else { /* We used to do this earlier, but that is clearly @@ -1638,9 +1640,12 @@ select_frame_command (char *level_exp, int from_tty) void frame_command (char *level_exp, int from_tty) { + int current_level = frame_relative_level (selected_frame); select_frame_command (level_exp, from_tty); show_and_print_stack_frame (selected_frame, frame_relative_level (selected_frame), 1); + if (current_level != frame_relative_level (selected_frame)) + selected_frame_level_changed_event (frame_relative_level (selected_frame)); } /* The XDB Compatibility command to print the current frame. */ @@ -1688,6 +1693,7 @@ up_command (char *count_exp, int from_tty) up_silently_base (count_exp); show_and_print_stack_frame (selected_frame, frame_relative_level (selected_frame), 1); + selected_frame_level_changed_event (frame_relative_level (selected_frame)); } /* Select the frame down one or COUNT stack levels @@ -1734,6 +1740,7 @@ down_command (char *count_exp, int from_tty) down_silently_base (count_exp); show_and_print_stack_frame (selected_frame, frame_relative_level (selected_frame), 1); + selected_frame_level_changed_event (frame_relative_level (selected_frame)); } void