* config/vax/tm-vax.h (BREAKPOINT): Remove.
(BELIEVE_PCC_PROMOTION): Remove. (AP_REGNUM): Move to... * config/vax/nm-vax.h: ...here. * vax-tdep.c: Use VAX_AP_REGNUM instead of AP_REGNUM. (vax_breakpoint_from_pc): New function. (vax_gdbarch_init): Initialize gdbarch_breakpoint_from_pc and gdbarch_believe_pcc_promotion.
This commit is contained in:
parent
6300c360ea
commit
1d049c5e1d
4 changed files with 30 additions and 14 deletions
|
@ -1,3 +1,14 @@
|
|||
2002-06-26 Jason Thorpe <thorpej@wasabisystems.com>
|
||||
|
||||
* config/vax/tm-vax.h (BREAKPOINT): Remove.
|
||||
(BELIEVE_PCC_PROMOTION): Remove.
|
||||
(AP_REGNUM): Move to...
|
||||
* config/vax/nm-vax.h: ...here.
|
||||
* vax-tdep.c: Use VAX_AP_REGNUM instead of AP_REGNUM.
|
||||
(vax_breakpoint_from_pc): New function.
|
||||
(vax_gdbarch_init): Initialize gdbarch_breakpoint_from_pc
|
||||
and gdbarch_believe_pcc_promotion.
|
||||
|
||||
2002-06-26 Jason Thorpe <thorpej@wasabisystems.com>
|
||||
|
||||
* Makefile.in (vax_tdep_h): Define.
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define AP_REGNUM 12 /* XXXJRT */
|
||||
|
||||
#define REGISTER_U_ADDR(addr, blockend, regno) \
|
||||
{ addr = blockend - 0110 + regno * 4; \
|
||||
if (regno == PC_REGNUM) addr = blockend - 8; \
|
||||
|
|
|
@ -31,11 +31,6 @@
|
|||
#define SIGTRAMP_START(pc) STACK_END_ADDR
|
||||
#define SIGTRAMP_END(pc) 0x80000000
|
||||
|
||||
/* Sequence of bytes for breakpoint instruction. */
|
||||
#define BREAKPOINT {3}
|
||||
|
||||
#define AP_REGNUM 12 /* XXXJRT */
|
||||
|
||||
/* Offset to saved PC in sigcontext, from <sys/signal.h>. */
|
||||
/* XXXJRT should go away */
|
||||
#define SIGCONTEXT_PC_OFFSET 12
|
||||
|
@ -43,6 +38,3 @@
|
|||
/* XXXJRT not yet under gdbarch control */
|
||||
#define FRAME_ARGS_ADDRESS_CORRECT(fi) vax_frame_args_address_correct ((fi))
|
||||
extern CORE_ADDR vax_frame_args_address_correct (struct frame_info *);
|
||||
|
||||
/* If vax pcc says CHAR or SHORT, it provides the correct address. */
|
||||
#define BELIEVE_PCC_PROMOTION 1
|
||||
|
|
|
@ -186,7 +186,7 @@ vax_frame_init_saved_regs (struct frame_info *frame)
|
|||
|
||||
/* regmask's low bit is for register 0, which is the first one
|
||||
what would be pushed. */
|
||||
for (regnum = 0; regnum < AP_REGNUM; regnum++)
|
||||
for (regnum = 0; regnum < VAX_AP_REGNUM; regnum++)
|
||||
{
|
||||
if (regmask & (1 << regnum))
|
||||
frame->saved_regs[regnum] = next_addr += 4;
|
||||
|
@ -199,7 +199,7 @@ vax_frame_init_saved_regs (struct frame_info *frame)
|
|||
|
||||
frame->saved_regs[PC_REGNUM] = frame->frame + 16;
|
||||
frame->saved_regs[FP_REGNUM] = frame->frame + 12;
|
||||
frame->saved_regs[AP_REGNUM] = frame->frame + 8;
|
||||
frame->saved_regs[VAX_AP_REGNUM] = frame->frame + 8;
|
||||
frame->saved_regs[PS_REGNUM] = frame->frame + 4;
|
||||
}
|
||||
|
||||
|
@ -239,7 +239,7 @@ vax_frame_args_address (struct frame_info *frame)
|
|||
if (frame->next)
|
||||
return (read_memory_integer (frame->next->frame + 8, 4));
|
||||
|
||||
return (read_register (AP_REGNUM));
|
||||
return (read_register (VAX_AP_REGNUM));
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
|
@ -276,12 +276,12 @@ vax_push_dummy_frame (void)
|
|||
sp = push_word (sp, read_register (regnum));
|
||||
sp = push_word (sp, read_register (PC_REGNUM));
|
||||
sp = push_word (sp, read_register (FP_REGNUM));
|
||||
sp = push_word (sp, read_register (AP_REGNUM));
|
||||
sp = push_word (sp, read_register (VAX_AP_REGNUM));
|
||||
sp = push_word (sp, (read_register (PS_REGNUM) & 0xffef) + 0x2fff0000);
|
||||
sp = push_word (sp, 0);
|
||||
write_register (SP_REGNUM, sp);
|
||||
write_register (FP_REGNUM, sp);
|
||||
write_register (AP_REGNUM, sp + (17 * 4));
|
||||
write_register (VAX_AP_REGNUM, sp + (17 * 4));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -296,7 +296,7 @@ vax_pop_frame (void)
|
|||
| (read_register (PS_REGNUM) & 0xffff0000));
|
||||
write_register (PC_REGNUM, read_memory_integer (fp + 16, 4));
|
||||
write_register (FP_REGNUM, read_memory_integer (fp + 12, 4));
|
||||
write_register (AP_REGNUM, read_memory_integer (fp + 8, 4));
|
||||
write_register (VAX_AP_REGNUM, read_memory_integer (fp + 8, 4));
|
||||
fp += 16;
|
||||
for (regnum = 0; regnum < 12; regnum++)
|
||||
if (regmask & (0x10000 << regnum))
|
||||
|
@ -353,6 +353,15 @@ vax_extract_struct_value_address (char *regbuf)
|
|||
return (extract_address (regbuf + REGISTER_BYTE (0), REGISTER_RAW_SIZE (0)));
|
||||
}
|
||||
|
||||
static const unsigned char *
|
||||
vax_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
|
||||
{
|
||||
static const unsigned char vax_breakpoint[] = { 3 };
|
||||
|
||||
*lenptr = sizeof(vax_breakpoint);
|
||||
return (vax_breakpoint);
|
||||
}
|
||||
|
||||
/* Advance PC across any function entry prologue instructions
|
||||
to reach some "real" code. */
|
||||
|
||||
|
@ -708,10 +717,12 @@ vax_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
|
||||
|
||||
/* Breakpoint info */
|
||||
set_gdbarch_breakpoint_from_pc (gdbarch, vax_breakpoint_from_pc);
|
||||
set_gdbarch_decr_pc_after_break (gdbarch, 0);
|
||||
|
||||
/* Misc info */
|
||||
set_gdbarch_function_start_offset (gdbarch, 2);
|
||||
set_gdbarch_believe_pcc_promotion (gdbarch, 1);
|
||||
|
||||
/* Hook in ABI-specific overrides, if they have been registered. */
|
||||
gdbarch_init_osabi (info, gdbarch, osabi);
|
||||
|
|
Loading…
Add table
Reference in a new issue