diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-12-13 21:57:40 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-12-13 21:57:40 +0000 |
commit | b87efeee0c8edb62a6877ed9b78198b7b66d8c04 (patch) | |
tree | 3630c153da43bc311547b4d1d26bd64bc9cdc6d8 | |
parent | 3de2dc4ff6e4c9232f3f231adc8a2dd5609c5db5 (diff) | |
download | fsf-binutils-gdb-b87efeee0c8edb62a6877ed9b78198b7b66d8c04.zip fsf-binutils-gdb-b87efeee0c8edb62a6877ed9b78198b7b66d8c04.tar.gz fsf-binutils-gdb-b87efeee0c8edb62a6877ed9b78198b7b66d8c04.tar.bz2 |
2002-12-13 Andrew Cagney <ac131313@redhat.com>
* frame.c (deprecated_update_current_frame_pc_hack): New
function.
* frame.h (deprecated_update_current_frame_pc_hack): Declare.
* infrun.c (normal_stop): Use said function instead of directly
modifying the frame's PC.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/frame.c | 11 | ||||
-rw-r--r-- | gdb/frame.h | 5 | ||||
-rw-r--r-- | gdb/infrun.c | 8 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b19b238..9a81acc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2002-12-13 Andrew Cagney <ac131313@redhat.com> + + * frame.c (deprecated_update_current_frame_pc_hack): New + function. + * frame.h (deprecated_update_current_frame_pc_hack): Declare. + * infrun.c (normal_stop): Use said function instead of directly + modifying the frame's PC. + 2002-12-13 Alexandre Oliva <aoliva@redhat.com> * frame.h (frame_id_unwind_ftype): Fix typo in return type. diff --git a/gdb/frame.c b/gdb/frame.c index b23d517..44e0811 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1291,6 +1291,17 @@ frame_extra_info_zalloc (struct frame_info *fi, long size) } void +deprecated_update_current_frame_pc_hack (CORE_ADDR pc) +{ + /* FIXME: cagney/2002-12-06: Has the PC in the current frame + changed? "infrun.c", Thanks to DECR_PC_AFTER_BREAK, can change + the PC after the initial frame create. This puts things back in + sync. */ + if (current_frame != NULL) + current_frame->pc = pc; +} + +void _initialize_frame (void) { obstack_init (&frame_cache_obstack); diff --git a/gdb/frame.h b/gdb/frame.h index 3953949..f54f185 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -654,4 +654,9 @@ extern struct frame_extra_info *frame_extra_info_zalloc (struct frame_info *fi, long size); extern struct frame_extra_info *get_frame_extra_info (struct frame_info *fi); +/* FIXME: cagney/2002-12-06: Has the PC in the current frame changed? + "infrun.c", Thanks to DECR_PC_AFTER_BREAK, can change the PC after + the initial frame create. This puts things back in sync. */ +extern void deprecated_update_current_frame_pc_hack (CORE_ADDR pc); + #endif /* !defined (FRAME_H) */ diff --git a/gdb/infrun.c b/gdb/infrun.c index b1db8cb..664351e 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -3066,8 +3066,12 @@ normal_stop (void) /* Make sure that the current_frame's pc is correct. This is a correction for setting up the frame info before doing DECR_PC_AFTER_BREAK */ - if (target_has_execution && get_current_frame ()) - (get_current_frame ())->pc = read_pc (); + if (target_has_execution) + /* FIXME: cagney/2002-12-06: Has the PC changed? Thanks to + DECR_PC_AFTER_BREAK, the program counter can change. Ask the + frame code to check for this and sort out any resultant mess. + DECR_PC_AFTER_BREAK needs to just go away. */ + deprecated_update_current_frame_pc_hack (read_pc ()); if (target_has_execution && breakpoints_inserted) { |