diff options
author | Mark Kettenis <kettenis@gnu.org> | 2001-05-09 16:16:33 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2001-05-09 16:16:33 +0000 |
commit | 0d17c81d95377cc552092f5f92dc9221d562ef77 (patch) | |
tree | 748faccf823073b134edec7797e39abe50a49641 | |
parent | 96f37af640dc063447f69cccf024cac29d06a1c3 (diff) | |
download | gdb-0d17c81d95377cc552092f5f92dc9221d562ef77.zip gdb-0d17c81d95377cc552092f5f92dc9221d562ef77.tar.gz gdb-0d17c81d95377cc552092f5f92dc9221d562ef77.tar.bz2 |
* i386-tdep.c (i386_frame_saved_pc): New function.
* config/i386/tm-i386.h (FRAME_SAVED_PC): Redefine in terms of
i386_frame_saved_pc.
(i386_frame_saved_pc): New prototype.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/config/i386/tm-i386.h | 11 | ||||
-rw-r--r-- | gdb/i386-tdep.c | 17 |
3 files changed, 25 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2f82bb7..85276c8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2001-05-09 Mark Kettenis <kettenis@gnu.org> + * i386-tdep.c (i386_frame_saved_pc): New function. + * config/i386/tm-i386.h (FRAME_SAVED_PC): Redefine in terms of + i386_frame_saved_pc. + (i386_frame_saved_pc): New prototype. + * i386-tdep.c (i386_register_virtual_type): New function. (i386_register_convertible): New function. * config/i386/tm-i386.h (REGISTER_VIRTUAL_TYPE): Redefine in terms diff --git a/gdb/config/i386/tm-i386.h b/gdb/config/i386/tm-i386.h index a59ed82..9248f18 100644 --- a/gdb/config/i386/tm-i386.h +++ b/gdb/config/i386/tm-i386.h @@ -330,15 +330,10 @@ extern CORE_ADDR i386_frame_chain (struct frame_info *frame); i386_frameless_function_invocation (frame) extern int i386_frameless_function_invocation (struct frame_info *frame); -/* Saved Pc. Get it from sigcontext if within sigtramp. */ +/* Return the saved program counter for FRAME. */ -#define FRAME_SAVED_PC(FRAME) \ - (((FRAME)->signal_handler_caller \ - ? sigtramp_saved_pc (FRAME) \ - : read_memory_unsigned_integer ((FRAME)->frame + 4, 4)) \ - ) - -extern CORE_ADDR sigtramp_saved_pc (struct frame_info *); +#define FRAME_SAVED_PC(frame) i386_frame_saved_pc (frame) +extern CORE_ADDR i386_frame_saved_pc (struct frame_info *frame); #define FRAME_ARGS_ADDRESS(fi) ((fi)->frame) diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 446b268..0e3e340 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -378,6 +378,23 @@ i386_frameless_function_invocation (struct frame_info *frame) return frameless_look_for_prologue (frame); } +/* Return the saved program counter for FRAME. */ + +CORE_ADDR +i386_frame_saved_pc (struct frame_info *frame) +{ + /* FIXME: kettenis/2001-05-09: Conditionalizing the next bit of code + on SIGCONTEXT_PC_OFFSET and I386V4_SIGTRAMP_SAVED_PC should be + considered a temporary hack. I plan to come up with something + better when we go multi-arch. */ +#if defined (SIGCONTEXT_PC_OFFSET) || defined (I386V4_SIGTRAMP_SAVED_PC) + if (frame->signal_handler_caller) + return sigtramp_saved_pc (frame); +#endif + + return read_memory_unsigned_integer (frame->frame + 4, 4); +} + /* Immediately after a function call, return the saved pc. */ CORE_ADDR |