aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-06-26 17:20:36 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-06-26 17:20:36 +0000
commit1d049c5e1d1bbd7805cd3403bab79a69fc38fc43 (patch)
tree1ed278afbd404e6017149c72e90214f15c04018e
parent6300c360ea913043e2cf58c45597f60a03df6a13 (diff)
downloadgdb-1d049c5e1d1bbd7805cd3403bab79a69fc38fc43.zip
gdb-1d049c5e1d1bbd7805cd3403bab79a69fc38fc43.tar.gz
gdb-1d049c5e1d1bbd7805cd3403bab79a69fc38fc43.tar.bz2
* 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.
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/config/vax/nm-vax.h2
-rw-r--r--gdb/config/vax/tm-vax.h8
-rw-r--r--gdb/vax-tdep.c23
4 files changed, 30 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 00c8236..adea6be 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,16 @@
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.
(vax-tdep.o): Use $(vax_tdep_h).
* vax-tdep.c (vax_gdbarch_init): Use generic OS ABI framework.
diff --git a/gdb/config/vax/nm-vax.h b/gdb/config/vax/nm-vax.h
index c2baef1..efebd6b 100644
--- a/gdb/config/vax/nm-vax.h
+++ b/gdb/config/vax/nm-vax.h
@@ -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; \
diff --git a/gdb/config/vax/tm-vax.h b/gdb/config/vax/tm-vax.h
index 204d155..8d77a29 100644
--- a/gdb/config/vax/tm-vax.h
+++ b/gdb/config/vax/tm-vax.h
@@ -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
diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
index 40e4e96..46dce5a 100644
--- a/gdb/vax-tdep.c
+++ b/gdb/vax-tdep.c
@@ -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);