forked from Imagelibrary/binutils-gdb
2002-11-15 Andrew Cagney <cagney@redhat.com>
* frame.h (sigtramp_saved_pc): Delete declaration. * blockframe.c (sigtramp_saved_pc): Delete function. * ns32k-tdep.c (ns32k_sigtramp_saved_pc): New function. (ns32k_frame_saved_pc): Call ns32k_sigtramp_saved_pc. * vax-tdep.c (vax_sigtramp_saved_pc): New function. (vax_frame_saved_pc): Call vax_sigtramp_saved_pc.
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
2002-11-15 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* frame.h (sigtramp_saved_pc): Delete declaration.
|
||||
* blockframe.c (sigtramp_saved_pc): Delete function.
|
||||
* ns32k-tdep.c (ns32k_sigtramp_saved_pc): New function.
|
||||
(ns32k_frame_saved_pc): Call ns32k_sigtramp_saved_pc.
|
||||
* vax-tdep.c (vax_sigtramp_saved_pc): New function.
|
||||
(vax_frame_saved_pc): Call vax_sigtramp_saved_pc.
|
||||
|
||||
2002-11-15 Andrew Cagney <ac131313@redhat.com>
|
||||
|
||||
* frame.c (frame_pc_unwind): New function.
|
||||
|
||||
@@ -660,35 +660,6 @@ find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SIGCONTEXT_PC_OFFSET
|
||||
/* Get saved user PC for sigtramp from sigcontext for BSD style sigtramp. */
|
||||
|
||||
CORE_ADDR
|
||||
sigtramp_saved_pc (struct frame_info *frame)
|
||||
{
|
||||
CORE_ADDR sigcontext_addr;
|
||||
char *buf;
|
||||
int ptrbytes = TYPE_LENGTH (builtin_type_void_func_ptr);
|
||||
int sigcontext_offs = (2 * TARGET_INT_BIT) / TARGET_CHAR_BIT;
|
||||
|
||||
buf = alloca (ptrbytes);
|
||||
/* Get sigcontext address, it is the third parameter on the stack. */
|
||||
if (frame->next)
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(FRAME_ARGS_ADDRESS (frame->next) + FRAME_ARGS_SKIP + sigcontext_offs,
|
||||
builtin_type_void_data_ptr);
|
||||
else
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(read_register (SP_REGNUM) + sigcontext_offs, builtin_type_void_data_ptr);
|
||||
|
||||
/* Don't cause a memory_error when accessing sigcontext in case the stack
|
||||
layout has changed or the stack is corrupt. */
|
||||
target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, ptrbytes);
|
||||
return extract_typed_address (buf, builtin_type_void_func_ptr);
|
||||
}
|
||||
#endif /* SIGCONTEXT_PC_OFFSET */
|
||||
|
||||
|
||||
/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK
|
||||
below is for infrun.c, which may give the macro a pc without that
|
||||
subtracted out. */
|
||||
|
||||
@@ -392,8 +392,6 @@ extern struct frame_info *block_innermost_frame (struct block *);
|
||||
|
||||
extern struct frame_info *find_frame_addr_in_frame_chain (CORE_ADDR);
|
||||
|
||||
extern CORE_ADDR sigtramp_saved_pc (struct frame_info *);
|
||||
|
||||
/* NOTE: cagney/2002-09-13: There is no need for this function.
|
||||
Instead either of frame_unwind_signed_register() or
|
||||
frame_unwind_unsigned_register() can be used. */
|
||||
|
||||
@@ -314,11 +314,36 @@ ns32k_frame_chain (struct frame_info *frame)
|
||||
return (read_memory_integer (frame->frame, 4));
|
||||
}
|
||||
|
||||
|
||||
static CORE_ADDR
|
||||
ns32k_sigtramp_saved_pc (struct frame_info *frame)
|
||||
{
|
||||
CORE_ADDR sigcontext_addr;
|
||||
char *buf;
|
||||
int ptrbytes = TYPE_LENGTH (builtin_type_void_func_ptr);
|
||||
int sigcontext_offs = (2 * TARGET_INT_BIT) / TARGET_CHAR_BIT;
|
||||
|
||||
buf = alloca (ptrbytes);
|
||||
/* Get sigcontext address, it is the third parameter on the stack. */
|
||||
if (frame->next)
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(FRAME_ARGS_ADDRESS (frame->next) + FRAME_ARGS_SKIP + sigcontext_offs,
|
||||
builtin_type_void_data_ptr);
|
||||
else
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(read_register (SP_REGNUM) + sigcontext_offs, builtin_type_void_data_ptr);
|
||||
|
||||
/* Don't cause a memory_error when accessing sigcontext in case the stack
|
||||
layout has changed or the stack is corrupt. */
|
||||
target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, ptrbytes);
|
||||
return extract_typed_address (buf, builtin_type_void_func_ptr);
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
ns32k_frame_saved_pc (struct frame_info *frame)
|
||||
{
|
||||
if (frame->signal_handler_caller)
|
||||
return (sigtramp_saved_pc (frame)); /* XXXJRT */
|
||||
return (ns32k_sigtramp_saved_pc (frame)); /* XXXJRT */
|
||||
|
||||
return (read_memory_integer (frame->frame + 4, 4));
|
||||
}
|
||||
|
||||
@@ -157,11 +157,37 @@ vax_frame_init_saved_regs (struct frame_info *frame)
|
||||
frame->saved_regs[PS_REGNUM] = frame->frame + 4;
|
||||
}
|
||||
|
||||
/* Get saved user PC for sigtramp from sigcontext for BSD style sigtramp. */
|
||||
|
||||
static CORE_ADDR
|
||||
vax_sigtramp_saved_pc (struct frame_info *frame)
|
||||
{
|
||||
CORE_ADDR sigcontext_addr;
|
||||
char *buf;
|
||||
int ptrbytes = TYPE_LENGTH (builtin_type_void_func_ptr);
|
||||
int sigcontext_offs = (2 * TARGET_INT_BIT) / TARGET_CHAR_BIT;
|
||||
|
||||
buf = alloca (ptrbytes);
|
||||
/* Get sigcontext address, it is the third parameter on the stack. */
|
||||
if (frame->next)
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(FRAME_ARGS_ADDRESS (frame->next) + FRAME_ARGS_SKIP + sigcontext_offs,
|
||||
builtin_type_void_data_ptr);
|
||||
else
|
||||
sigcontext_addr = read_memory_typed_address
|
||||
(read_register (SP_REGNUM) + sigcontext_offs, builtin_type_void_data_ptr);
|
||||
|
||||
/* Don't cause a memory_error when accessing sigcontext in case the stack
|
||||
layout has changed or the stack is corrupt. */
|
||||
target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, ptrbytes);
|
||||
return extract_typed_address (buf, builtin_type_void_func_ptr);
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
vax_frame_saved_pc (struct frame_info *frame)
|
||||
{
|
||||
if (frame->signal_handler_caller)
|
||||
return (sigtramp_saved_pc (frame)); /* XXXJRT */
|
||||
return (vax_sigtramp_saved_pc (frame)); /* XXXJRT */
|
||||
|
||||
return (read_memory_integer (frame->frame + 16, 4));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user