D10V memory map changed. Update.
authorAndrew Cagney <cagney@redhat.com>
Tue, 10 Feb 1998 07:05:32 +0000 (07:05 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 10 Feb 1998 07:05:32 +0000 (07:05 +0000)
Replace all references to [ID]MEM_ADDR with conversion macros.

gdb/ChangeLog
gdb/config/d10v/tm-d10v.h
gdb/d10v-tdep.c

index 5751f1f7f06a8a987fa19aa722091fbe5d93f569..bc889d9c19c8f597538d2c9ff43949aa9e259225 100644 (file)
@@ -1,3 +1,15 @@
+Mon Feb  9 11:10:06 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * d10v-tdep.c: Replace references to IMEM_ADDR and DMEM_ADDR with
+       D10V_MAKE_[DI]ADDR and D10V_CONVERT_[ID]ADDR_TO_RAW macros.
+
+       * config/d10v/tm-d10v.h (IMEM_START): Move to 0x01......
+       (DMEM_START): Move to 0x00......
+       (STACK_START): Move to 0x00..7ffe.
+       (D10V_MAKE_IADDR, D10V_MAKE_DADDR): Translate unconditionally.
+
+       * d10v-tdep.c (d10v_xlate_addr): Delete function.
+
 Mon Feb  9 15:10:21 1998  Fred Fish  <fnf@cygnus.com>
 
        * symtab.c (fixup_psymbol_section): Move forward declaration to
index 36eb1d4e1c5bcaeef2ae18920b08527309dca5fe..67136c942cb02f7b07dd9568675bd399537ca4b1 100644 (file)
@@ -33,9 +33,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* these are the addresses the D10V-EVA board maps data */
 /* and instruction memory to. */
 
-#define DMEM_START     0x2000000
+#define DMEM_START     0x0000000
 #define IMEM_START     0x1000000
-#define STACK_START    0x2007ffe
+#define STACK_START    0x0007ffe
 
 #ifdef __STDC__                /* Forward decls for prototypes */
 struct frame_info;
@@ -140,14 +140,14 @@ extern CORE_ADDR d10v_skip_prologue ();
     store_unsigned_integer ((TO), 2, x); \
 }
 
-#define D10V_MAKE_DADDR(x) ( (x) & 0x3000000 ? (x) : ((x) | DMEM_START))
-#define D10V_MAKE_IADDR(x) ( (x) & 0x3000000 ? (x) : (((x) << 2) | IMEM_START))
+#define D10V_MAKE_DADDR(x) ((x) | DMEM_START)
+#define D10V_MAKE_IADDR(x) (((x) << 2) | IMEM_START)
 
 #define D10V_DADDR_P(X) (((X) & 0x3000000) == DMEM_START)
 #define D10V_IADDR_P(X) (((X) & 0x3000000) == IMEM_START)
 
-#define D10V_CONVERT_IADDR_TO_RAW(X) (((X) & ~0x3000000) >> 2)
-#define D10V_CONVERT_DADDR_TO_RAW(X) (((X) & ~0x3000000))
+#define D10V_CONVERT_IADDR_TO_RAW(X) (((X) >> 2) & 0xffff)
+#define D10V_CONVERT_DADDR_TO_RAW(X) ((X) & 0xffff)
 
 #define ARG1_REGNUM R0_REGNUM
 #define ARGN_REGNUM 3
index 8579e7bb73a2d4807d30edb0eaefba094ced5367..95b1ef55560f8f402d1079a3246b85c19c8c661e 100644 (file)
@@ -206,7 +206,7 @@ d10v_frame_chain (frame)
   if (!read_memory_unsigned_integer(fsr.regs[FP_REGNUM], REGISTER_RAW_SIZE(FP_REGNUM)))
     return (CORE_ADDR)0;
 
-  return read_memory_unsigned_integer(fsr.regs[FP_REGNUM], REGISTER_RAW_SIZE(FP_REGNUM))| DMEM_START;
+  return D10V_MAKE_DADDR (read_memory_unsigned_integer (fsr.regs[FP_REGNUM], REGISTER_RAW_SIZE (FP_REGNUM)));
 }  
 
 static int next_addr, uses_frame;
@@ -353,7 +353,7 @@ d10v_frame_find_saved_regs (fi, fsr)
   fi->size = -next_addr;
 
   if (!(fp & 0xffff))
-    fp = read_register(SP_REGNUM) | DMEM_START;
+    fp = D10V_MAKE_DADDR (read_register(SP_REGNUM));
 
   for (i=0; i<NUM_REGS-1; i++)
     if (fsr->regs[i])
@@ -362,9 +362,14 @@ d10v_frame_find_saved_regs (fi, fsr)
       }
 
   if (fsr->regs[LR_REGNUM])
-    fi->return_pc = (read_memory_unsigned_integer(fsr->regs[LR_REGNUM], REGISTER_RAW_SIZE(LR_REGNUM)) << 2) | IMEM_START;
+    {
+      CORE_ADDR return_pc = read_memory_unsigned_integer (fsr->regs[LR_REGNUM], REGISTER_RAW_SIZE (LR_REGNUM));
+      fi->return_pc = D10V_MAKE_IADDR (return_pc);
+    }
   else
-    fi->return_pc = (read_register(LR_REGNUM) << 2) | IMEM_START;
+    {
+      fi->return_pc = D10V_MAKE_IADDR (read_register(LR_REGNUM));
+    }
   
   /* th SP is not normally (ever?) saved, but check anyway */
   if (!fsr->regs[SP_REGNUM])
@@ -411,7 +416,7 @@ show_regs (args, from_tty)
 {
   LONGEST num1, num2;
   printf_filtered ("PC=%04x (0x%x) PSW=%04x RPT_S=%04x RPT_E=%04x RPT_C=%04x\n",
-                   read_register (PC_REGNUM), (read_register (PC_REGNUM) << 2) + IMEM_START,
+                   read_register (PC_REGNUM), D10V_MAKE_IADDR (read_register (PC_REGNUM)),
                    read_register (PSW_REGNUM),
                    read_register (24),
                    read_register (25),
@@ -443,35 +448,19 @@ show_regs (args, from_tty)
   printf_filtered ("A0-A1  %010llx %010llx\n",num1, num2);
 }
 
-static CORE_ADDR
-d10v_xlate_addr (addr)
-     int addr;
-{
-  int imap;
-
-  if (addr < 0x20000)
-    imap = (int)read_register(IMAP0_REGNUM);
-  else
-    imap = (int)read_register(IMAP1_REGNUM);
-
-  if (imap & 0x1000)
-    return (CORE_ADDR)(addr + 0x1000000);
-  return (CORE_ADDR)(addr + (imap & 0xff)*0x20000);
-}
-
-
 CORE_ADDR
 d10v_read_pc (pid)
      int pid;
 {
   int save_pid;
+  CORE_ADDR pc;
   CORE_ADDR retval;
 
   save_pid = inferior_pid;
   inferior_pid = pid;
-  retval = (int)read_register (PC_REGNUM);
+  pc = (int) read_register (PC_REGNUM);
   inferior_pid = save_pid;
-  retval = d10v_xlate_addr(retval << 2);
+  retval = D10V_MAKE_IADDR (pc);
   return retval;
 }
 
@@ -484,34 +473,34 @@ d10v_write_pc (val, pid)
 
   save_pid = inferior_pid;
   inferior_pid = pid;
-  write_register (PC_REGNUM, (val & 0x3ffff) >> 2);
+  write_register (PC_REGNUM, D10V_CONVERT_IADDR_TO_RAW (val));
   inferior_pid = save_pid;
 }
 
 CORE_ADDR
 d10v_read_sp ()
 {
-  return (read_register(SP_REGNUM) | DMEM_START);
+  return (D10V_MAKE_DADDR (read_register (SP_REGNUM)));
 }
 
 void
 d10v_write_sp (val)
      CORE_ADDR val;
 {
-  write_register (SP_REGNUM, (LONGEST)(val & 0xffff));
+  write_register (SP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
 }
 
 void
 d10v_write_fp (val)
      CORE_ADDR val;
 {
-  write_register (FP_REGNUM, (LONGEST)(val & 0xffff));
+  write_register (FP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
 }
 
 CORE_ADDR
 d10v_read_fp ()
 {
-  return (read_register(FP_REGNUM) | DMEM_START);
+  return (D10V_MAKE_DADDR (read_register(FP_REGNUM)));
 }
 
 /* Function: push_return_address (pc)
@@ -523,7 +512,7 @@ d10v_push_return_address (pc, sp)
      CORE_ADDR pc;
      CORE_ADDR sp;
 {
-  write_register (LR_REGNUM, (CALL_DUMMY_ADDRESS () & 0xffff) >> 2);
+  write_register (LR_REGNUM, D10V_CONVERT_IADDR_TO_RAW (CALL_DUMMY_ADDRESS ()));
   return sp;
 }