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:
Andrew Cagney
2002-11-15 23:24:21 +00:00
parent b7b7461f84
commit f407986f1a
5 changed files with 62 additions and 33 deletions

View File

@@ -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));
}