* gdb.base/Makefile.in (clean): Remove callf-info.exp.
[deliverable/binutils-gdb.git] / gdb / a29k-tdep.c
index e39adf1069e33df0e5810ba8b4b446d8ba6618e4..206c676b0ff3fc6d32d114330adcf72a36c2bec6 100644 (file)
@@ -402,7 +402,7 @@ init_frame_info (innermost_frame, frame)
   else
     frame->frame = frame->next->frame + frame->next->rsize;
   
-#if CALL_DUMMY_LOCATION == ON_STACK
+#if 0 /* CALL_DUMMY_LOCATION == ON_STACK */
   This wont work;
 #else
   if (PC_IN_CALL_DUMMY (p, 0, 0))
@@ -825,6 +825,16 @@ push_dummy_frame ()
   gr1 = read_register (GR1_REGNUM) - DUMMY_FRAME_RSIZE;
   write_register (GR1_REGNUM, gr1);
 
+#ifdef VXWORKS_TARGET
+  /* We force re-reading all registers to get the new local registers set
+     after gr1 has been modified. This fix is due to the lack of single
+     register read/write operation in the RPC interface between VxGDB and
+     VxWorks. This really must be changed ! */
+
+  vx_read_register (-1);
+
+#endif /* VXWORK_TARGET */
+
   rab = read_register (RAB_REGNUM);
   if (gr1 < rab)
     {
@@ -917,9 +927,9 @@ gdb_print_insn_a29k (memaddr, info)
      disassemble_info *info;
 {
   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
-    return print_insn_big_a29k (memaddr, &info);
+    return print_insn_big_a29k (memaddr, info);
   else
-    return print_insn_little_a29k (memaddr, &info);
+    return print_insn_little_a29k (memaddr, info);
 }
 
 enum a29k_processor_types processor_type = a29k_unknown;
@@ -967,6 +977,31 @@ a29k_get_processor_type ()
   fprintf_filtered (gdb_stderr, " revision %c\n", 'A' + ((cfg_reg >> 24) & 0x0f));
 }
 
+#ifdef GET_LONGJMP_TARGET
+/* Figure out where the longjmp will land.  We expect that we have just entered
+  longjmp and haven't yet setup the stack frame, so the args are still in the
+   output regs.  lr2 (LR2_REGNUM) points at the jmp_buf structure from which we
+   extract the pc (JB_PC) that we will land at.  The pc is copied into ADDR.
+   This routine returns true on success */
+
+int
+get_longjmp_target(pc)
+     CORE_ADDR *pc;
+{
+  CORE_ADDR jb_addr;
+  char buf[sizeof(CORE_ADDR)];
+
+  jb_addr = read_register(LR2_REGNUM);
+
+  if (target_read_memory(jb_addr + JB_PC * JB_ELEMENT_SIZE, (char *) buf,
+                         sizeof(CORE_ADDR)))
+    return 0;
+
+  *pc = extract_address ((PTR) buf, sizeof(CORE_ADDR));
+  return 1;
+}
+#endif /* GET_LONGJMP_TARGET */
+
 void
 _initialize_a29k_tdep ()
 {
This page took 0.023794 seconds and 4 git commands to generate.