This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB


Hi,

The attached patch enables debugging and simulation of H8/300H and H8S 
Normal Mode binaries in GDB.

Is that OK for mainline and 6.0 branch ?

The patches are attached as well as included inline.

Regards,
Shrinivas

=====================================================================
Changelog:

2003-09-15  Shrinivas Atre  <shrinivasa@KPITCummins.com>
      * bfd/coff-h8300.c (funcvec_hash_newfunc): Handle normal mode
        (h8300_reloc16_extra_cases) : Ditto
        (h8300_bfd_link_add_symbols) : Ditto
      * gdb/config/h8300/tm-h8300.h : Addition of extern variable Normalmode 
      * gdb/h8300-tdep.c (BINWORD): Update BINWORD for Normalmode
        (h8300_examine_prologue): Use Normalmode flag
        (h8300_gdbarch_init): Set architecture info for normal mode
      * sim/h8300/compile.c : Addition of extern variable Normalmode 
        (SP) : Handle normal mode 
        (bitfrom) : Use normal mode flag to return suitable value
        (lvalue) : Use normal mode flag to return command line location
        (decode) : Decode instruction correctly for normal mode
        (init_pointers) : Initialise memory correctly for normal mode
        (sim_resume) : Handle cases for normal mode using normal mode flag
        (sim_store_register) : Handle 2 byte PC for normal mode 
        (sim_fetch_register) : Handle 2 byte PC for normal mode
        (set_h8300h) : Set normal mode flag as per architechture
        (sim_load) : Allocate 64K for normal mode instead of bigger memory

=====================================================================

--- src/bfd/coff-h8300.c.orig	Mon Sep 15 14:14:58 2003
+++ src/bfd/coff-h8300.c	Mon Sep 15 14:10:22 2003
@@ -154,7 +154,9 @@ funcvec_hash_newfunc (struct bfd_hash_en
   /* Bump the offset at which we store entries in the function
      vector.  We'd like to bump up the size of the vectors section,
      but it's not easily available here.  */
-  if (bfd_get_mach (table->abfd) == bfd_mach_h8300)
+  if (bfd_get_mach (table->abfd) == bfd_mach_h8300
+    || bfd_get_mach (table->abfd) == bfd_mach_h8300hn
+    || bfd_get_mach (table->abfd) == bfd_mach_h8300sn)
     table->offset += 2;
   else if (bfd_get_mach (table->abfd) == bfd_mach_h8300h
 	   || bfd_get_mach (table->abfd) == bfd_mach_h8300s)
@@ -1124,7 +1126,9 @@ h8300_reloc16_extra_cases (bfd *abfd, st
 	src_address++;
 
 	/* Now create an entry in the function vector itself.  */
-	if (bfd_get_mach (input_section->owner) == bfd_mach_h8300)
+	if (bfd_get_mach (input_section->owner) == bfd_mach_h8300
+	  || bfd_get_mach (input_section->owner) == bfd_mach_h8300hn
+	  || bfd_get_mach (input_section->owner) == bfd_mach_h8300sn)
 	  bfd_put_16 (abfd,
 		      bfd_coff_reloc16_get_value (reloc,
 						  link_info,
@@ -1304,7 +1308,9 @@ h8300_bfd_link_add_symbols (bfd *abfd, s
 
 		  /* Bump the size of the vectors section.  Each vector
 		     takes 2 bytes on the h8300 and 4 bytes on the h8300h.  */
-		  if (bfd_get_mach (abfd) == bfd_mach_h8300)
+		  if (bfd_get_mach (abfd) == bfd_mach_h8300
+		    || bfd_get_mach (abfd) == bfd_mach_h8300hn
+		    || bfd_get_mach (abfd) == bfd_mach_h8300sn)
 		    htab->vectors_sec->_raw_size += 2;
 		  else if (bfd_get_mach (abfd) == bfd_mach_h8300h
 			   || bfd_get_mach (abfd) == bfd_mach_h8300s)

---------------------------------------------------------------------

--- src/gdb/config/h8300/tm-h8300.h.orig	Mon Sep 15 10:46:23 2003
+++ src/gdb/config/h8300/tm-h8300.h	Mon Sep 15 13:32:23 2003
@@ -26,6 +26,7 @@
    GDB_TARGET_IS_H8300 in remote-e7000.c */
 extern int h8300hmode;
 extern int h8300smode;
+extern int NormalMode; /* 1 - Normal Mode , 0 - Advanced mode */
 extern int h8300sxmode;
 #define GDB_TARGET_IS_H8300
 
---------------------------------------------------------------------

--- src/gdb/h8300-tdep.c.orig	Mon Sep 15 10:43:31 2003
+++ src/gdb/h8300-tdep.c	Mon Sep 15 13:32:30 2003
@@ -49,7 +49,7 @@ enum
   h8300h_reg_size = 4,
   h8300_max_reg_size = 4,
 };
-#define BINWORD (h8300hmode ? h8300h_reg_size : h8300_reg_size)
+#define BINWORD (h8300hmode && 0 == NormalMode ? h8300h_reg_size : h8300_reg_size)
 
 enum gdb_regnum
 {
@@ -350,7 +350,7 @@ h8300_examine_prologue (register CORE_AD
     }
 
   /* If the PC isn't valid, quit now.  */
-  if (ip == 0 || ip & (h8300hmode ? ~0xffffff : ~0xffff))
+  if (ip == 0 || ip & (h8300hmode && 0 == NormalMode ? ~0xffffff : ~0xffff))
     return 0;
 
   next_ip = h8300_next_prologue_insn (ip, limit, &insn_word);
@@ -1214,8 +1214,26 @@ h8300_gdbarch_init (struct gdbarch_info 
       set_gdbarch_store_return_value (gdbarch, h8300_store_return_value);
       set_gdbarch_print_insn (gdbarch, print_insn_h8300);
       break;
-    case bfd_mach_h8300h:
     case bfd_mach_h8300hn:
+      NormalMode = 1;
+      h8300sxmode = 0;
+      h8300smode = 0;
+      h8300hmode = 1;
+      set_gdbarch_num_regs (gdbarch, 13);
+      set_gdbarch_num_pseudo_regs (gdbarch, 1);
+      set_gdbarch_ecoff_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
+      set_gdbarch_dwarf_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
+      set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
+      set_gdbarch_stab_reg_to_regnum (gdbarch, h8300_dbg_reg_to_regnum);
+      set_gdbarch_register_name (gdbarch, h8300_register_name);
+      set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_extract_return_value (gdbarch, h8300h_extract_return_value);
+      set_gdbarch_store_return_value (gdbarch, h8300h_store_return_value);
+      set_gdbarch_print_insn (gdbarch, print_insn_h8300h);
+      break;
+    case bfd_mach_h8300h:
+      NormalMode = 0;
       h8300sxmode = 0;
       h8300smode = 0;
       h8300hmode = 1;
@@ -1232,8 +1250,26 @@ h8300_gdbarch_init (struct gdbarch_info 
       set_gdbarch_store_return_value (gdbarch, h8300h_store_return_value);
       set_gdbarch_print_insn (gdbarch, print_insn_h8300h);
       break;
-    case bfd_mach_h8300s:
     case bfd_mach_h8300sn:
+      NormalMode = 1;
+      h8300sxmode = 0;
+      h8300smode = 1;
+      h8300hmode = 1;
+      set_gdbarch_num_regs (gdbarch, 16);
+      set_gdbarch_num_pseudo_regs (gdbarch, 2);
+      set_gdbarch_ecoff_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_dwarf_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_stab_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_register_name (gdbarch, h8300s_register_name);
+      set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_extract_return_value (gdbarch, h8300h_extract_return_value);
+      set_gdbarch_store_return_value (gdbarch, h8300h_store_return_value);
+      set_gdbarch_print_insn (gdbarch, print_insn_h8300s);
+      break;
+    case bfd_mach_h8300s:
+      NormalMode = 0;
       h8300sxmode = 0;
       h8300smode = 1;
       h8300hmode = 1;
@@ -1250,8 +1286,26 @@ h8300_gdbarch_init (struct gdbarch_info 
       set_gdbarch_store_return_value (gdbarch, h8300h_store_return_value);
       set_gdbarch_print_insn (gdbarch, print_insn_h8300s);
       break;
-    case bfd_mach_h8300sx:
     case bfd_mach_h8300sxn:
+      NormalMode = 1;
+      h8300sxmode = 1;
+      h8300smode = 1;
+      h8300hmode = 1;
+      set_gdbarch_num_regs (gdbarch, 18);
+      set_gdbarch_num_pseudo_regs (gdbarch, 2);
+      set_gdbarch_ecoff_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_dwarf_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_dwarf2_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_stab_reg_to_regnum (gdbarch, h8300s_dbg_reg_to_regnum);
+      set_gdbarch_register_name (gdbarch, h8300sx_register_name);
+      set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+      set_gdbarch_extract_return_value (gdbarch, h8300h_extract_return_value);
+      set_gdbarch_store_return_value (gdbarch, h8300h_store_return_value);
+      set_gdbarch_print_insn (gdbarch, print_insn_h8300s);
+      break;
+    case bfd_mach_h8300sx:
+      NormalMode = 0;
       h8300sxmode = 1;
       h8300smode = 1;
       h8300hmode = 1;

---------------------------------------------------------------------

--- src/sim/h8300/compile.c.orig	Mon Sep 15 14:00:52 2003
+++ src/sim/h8300/compile.c	Mon Sep 15 14:07:27 2003
@@ -53,7 +53,7 @@ static void set_simcache_size (SIM_DESC,
 
 #define X(op, size)  (op * 4 + size)
 
-#define SP (h8300hmode ? SL : SW)
+#define SP (h8300hmode && 0 == NormalMode ? SL : SW)
 
 #define h8_opcodes ops
 #define DEFINE_TABLE
@@ -510,6 +510,7 @@ enum { POLL_QUIT_INTERVAL = 0x80000 };
 
 int h8300hmode  = 0;
 int h8300smode  = 0;
+int NormalMode  = 0;
 int h8300sxmode = 0;
 
 static int memory_size;
@@ -539,7 +540,7 @@ bitfrom (int x)
     case L_32:
       return SL;
     case L_P:
-      return h8300hmode ? SL : SW;
+      return (h8300hmode && 0 == NormalMode)? SL : SW;
     }
   return 0;
 }
@@ -575,9 +576,9 @@ lvalue (SIM_DESC sd, int x, int rn, unsi
 static int
 cmdline_location()
 {
-  if (h8300smode)
+  if (h8300smode && 0 == NormalMode)
     return 0xffff00L;
-  else if (h8300hmode)
+  else if (h8300hmode && 0 == NormalMode)
     return 0x2ff00L;
   else
     return 0xff00L;
@@ -837,8 +838,10 @@ decode (SIM_DESC sd, int addr, unsigned 
 		}
 	      else if ((looking_for & MODE) == VECIND)
 		{
-		  /* FIXME: Multiplier should be 2 for "normal" mode.  */
-		  cst[opnum] = ((data[1] & 0x7f) + 0x80) * 4;
+		  if(NormalMode)
+		    cst[opnum] = ((data[1] & 0x7f) + 0x80) * 2;
+		  else
+		    cst[opnum] = ((data[1] & 0x7f) + 0x80) * 4;
 		  cst[opnum] += h8_get_vbr (sd); /* Add vector base reg.  */
 		}
 	      else if ((looking_for & SIZE) == L_32)
@@ -1774,9 +1777,9 @@ init_pointers (SIM_DESC sd)
 
       littleendian.i = 1;
 
-      if (h8300smode)
+      if (h8300smode && 0 == NormalMode)
 	memory_size = H8300S_MSIZE;
-      else if (h8300hmode)
+      else if (h8300hmode && 0 == NormalMode)
 	memory_size = H8300H_MSIZE;
       else
 	memory_size = H8300_MSIZE;
@@ -1950,7 +1953,7 @@ sim_resume (SIM_DESC sd, int step, int s
     }
 
   oldmask = h8_get_mask (sd);
-  if (!h8300hmode)
+  if (!h8300hmode || NormalMode)
     h8_set_mask (sd, 0xffff);
   do
     {
@@ -2790,7 +2793,7 @@ sim_resume (SIM_DESC sd, int step, int s
 
 	    /* Setting char_ptr_size to the sizeof (char *) on the different
 	       architectures.  */
-	    if (h8300hmode || h8300smode)
+	    if ((h8300hmode || h8300smode) && 0 == NormalMode)
 	      {
 		char_ptr_size = 4;
 	      }
@@ -2859,7 +2862,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	    for (i = 0; i < no_of_args; i++)
 	      {
 		/* Saving the argv pointer.  */
-		if (h8300hmode || h8300smode)
+		if ((h8300hmode || h8300smode) && 0 == NormalMode)
 		  {
 		    SET_MEMORY_L (argv_ptrs_location, argv_ptrs[i]);
 		  }
@@ -2875,7 +2878,7 @@ sim_resume (SIM_DESC sd, int step, int s
 
 	    /* Required by POSIX, Setting 0x0 at the end of the list of argv
 	       pointers.  */
-	    if (h8300hmode || h8300smode)
+	    if ((h8300hmode || h8300smode) && 0 == NormalMode)
 	      {
 		SET_MEMORY_L (old_sp, 0x0);
 	      }
@@ -2914,7 +2917,7 @@ sim_resume (SIM_DESC sd, int step, int s
 
 	    /* Setting filename_ptr to first argument of open,  */
 	    /* and trying to get mode.  */
-	    if (h8300sxmode || h8300hmode || h8300smode)
+	    if ((h8300sxmode || h8300hmode || h8300smode) && 0 == NormalMode)
 	      {
 		filename_ptr = GET_L_REG (0);
 		mode = GET_MEMORY_L (h8_get_reg (sd, SP_REGNUM) + 4);
@@ -2965,8 +2968,8 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int read_return = 0;	/* Return value from callback to
 					   read.  */
 
-	    fd = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
-	    buf_size = h8300hmode ? GET_L_REG (2) : GET_W_REG (2);
+	    fd = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
+	    buf_size = (h8300hmode && 0 == NormalMode) ? GET_L_REG (2) : GET_W_REG (2);
 
 	    char_ptr = (char *) malloc (sizeof (char) * buf_size);
 
@@ -3000,9 +3003,9 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int write_return;	/* Return value from callback to write.  */
 	    int i = 0;		/* Loop counter */
 
-	    fd = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
-	    char_ptr = h8300hmode ? GET_L_REG (1) : GET_W_REG (1);
-	    len = h8300hmode ? GET_L_REG (2) : GET_W_REG (2);
+	    fd = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
+	    char_ptr = (h8300hmode && 0 == NormalMode) ? GET_L_REG (1) : GET_W_REG (1);
+	    len = (h8300hmode && 0 == NormalMode) ? GET_L_REG (2) : GET_W_REG (2);
 
 	    /* Allocating space for the characters to be written.  */
 	    ptr = (char *) malloc (sizeof (char) * len);
@@ -3032,9 +3035,9 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int origin;		/* Origin */
 	    int lseek_return;	/* Return value from callback to lseek.  */
 
-	    fd = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
-	    offset = h8300hmode ? GET_L_REG (1) : GET_W_REG (1);
-	    origin = h8300hmode ? GET_L_REG (2) : GET_W_REG (2);
+	    fd = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
+	    offset = (h8300hmode && 0 == NormalMode) ? GET_L_REG (1) : GET_W_REG (1);
+	    origin = (h8300hmode && 0 == NormalMode) ? GET_L_REG (2) : GET_W_REG (2);
 
 	    /* Callback lseek and return offset.  */
 	    lseek_return =
@@ -3050,7 +3053,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int fd;		/* File descriptor */
 	    int close_return;	/* Return value from callback to close.  */
 
-	    fd = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
+	    fd = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
 
 	    /* Callback close and return.  */
 	    close_return = sim_callback->close (sim_callback, fd);
@@ -3068,10 +3071,10 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int stat_ptr;	/* Pointer to stat record.  */
 	    char *temp_stat_ptr;	/* Temporary stat_rec pointer.  */
 
-	    fd = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
+	    fd = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
 
 	    /* Setting stat_ptr to second argument of stat.  */
-	    stat_ptr = h8300hmode ? GET_L_REG (1) : GET_W_REG (1);
+	    stat_ptr = (h8300hmode && 0 == NormalMode) ? GET_L_REG (1) : GET_W_REG (1);
 
 	    /* Callback stat and return.  */
 	    fstat_return = sim_callback->fstat (sim_callback, fd, &stat_rec);
@@ -3120,7 +3123,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	    int i = 0;		/* Loop Counter */
 
 	    /* Setting filename_ptr to first argument of open.  */
-	    filename_ptr = h8300hmode ? GET_L_REG (0) : GET_W_REG (0);
+	    filename_ptr = (h8300hmode && 0 == NormalMode) ? GET_L_REG (0) : GET_W_REG (0);
 
 	    /* Trying to find the length of the filename.  */
 	    temp_char = GET_MEMORY_B (h8_get_reg (sd, 0));
@@ -3144,7 +3147,7 @@ sim_resume (SIM_DESC sd, int step, int s
 
 	    /* Setting stat_ptr to second argument of stat.  */
 	    /* stat_ptr = h8_get_reg (sd, 1); */
-	    stat_ptr = h8300hmode ? GET_L_REG (1) : GET_W_REG (1);
+	    stat_ptr = (h8300hmode && 0 == NormalMode) ? GET_L_REG (1) : GET_W_REG (1);
 
 	    /* Callback stat and return.  */
 	    stat_return =
@@ -3552,7 +3555,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	call:
 	  tmp = h8_get_reg (sd, SP_REGNUM);
 
-	  if (h8300hmode)
+	  if (h8300hmode && 0 == NormalMode)
 	    {
 	      tmp -= 4;
 	      SET_MEMORY_L (tmp, code->next_pc);
@@ -3584,7 +3587,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	      h8_set_exr (sd, GET_MEMORY_L (tmp));
 	      tmp += 4;
 	    }
-	  if (h8300hmode)
+	  if (h8300hmode && 0 == NormalMode)
 	    {
 	      h8_set_ccr (sd, GET_MEMORY_L (tmp));
 	      tmp += 4;
@@ -3607,7 +3610,7 @@ sim_resume (SIM_DESC sd, int step, int s
 	rts:
 	  tmp = h8_get_reg (sd, SP_REGNUM);
 
-	  if (h8300hmode)
+	  if (h8300hmode && 0 == NormalMode)
 	    {
 	      pc = GET_MEMORY_L (tmp);
 	      tmp += 4;
@@ -3658,10 +3661,20 @@ sim_resume (SIM_DESC sd, int step, int s
 	    goto end;			/* res is vector number.  */
 
 	  tmp = h8_get_reg (sd, SP_REGNUM);
-	  tmp -= 4;
-	  SET_MEMORY_L (tmp, code->next_pc);
-	  tmp -= 4; 
-	  SET_MEMORY_L (tmp, h8_get_ccr (sd));
+ 	  if(NormalMode)
+ 	    {
+ 	      tmp -= 2;
+ 	      SET_MEMORY_W (tmp, code->next_pc);
+ 	      tmp -= 2;
+ 	      SET_MEMORY_W (tmp, h8_get_ccr (sd));
+ 	    }
+ 	  else
+ 	    {
+ 	      tmp -= 4;
+ 	      SET_MEMORY_L (tmp, code->next_pc);
+ 	      tmp -= 4;
+ 	      SET_MEMORY_L (tmp, h8_get_ccr (sd));
+ 	    }
 	  intMaskBit = 1;
 	  BUILDSR (sd);
 
@@ -3673,8 +3686,10 @@ sim_resume (SIM_DESC sd, int step, int s
 
 	  h8_set_reg (sd, SP_REGNUM, tmp);
 
-	  /* FIXME: "normal" mode should use 2-byte ptrs.  */
-	  pc = GET_MEMORY_L (0x20 + res * 4);
+	  if(NormalMode)
+	    pc = GET_MEMORY_L (0x10 + res * 2); /* Vector addresses are 0x10,0x12,0x14 and 0x16 */
+	  else
+	    pc = GET_MEMORY_L (0x20 + res * 4);
 	  goto end;
 
 	case O (O_BPT, SN):
@@ -4703,7 +4718,10 @@ sim_store_register (SIM_DESC sd, int rn,
   switch (rn)
     {
     case PC_REGNUM:
-      h8_set_pc (sd, intval);
+      if(NormalMode)
+        h8_set_pc (sd, shortval); /* PC for Normal mode is 2 bytes */
+      else
+        h8_set_pc (sd, intval);
       break;
     default:
       (*sim_callback->printf_filtered) (sim_callback, 
@@ -4814,7 +4832,8 @@ sim_fetch_register (SIM_DESC sd, int rn,
       longreg = 1;
       break;
     }
-  if (h8300hmode || longreg)
+  /* In Normal mode PC is 2 byte, but other registers are 4 byte */
+  if ((h8300hmode || longreg) && !(rn == PC_REGNUM && NormalMode))
     {
       buf[0] = v >> 24;
       buf[1] = v >> 16;
@@ -4919,6 +4938,9 @@ set_h8300h (unsigned long machine)
 
   if (machine == bfd_mach_h8300h || machine == bfd_mach_h8300hn || h8300smode)
     h8300hmode = 1;
+
+  if(machine == bfd_mach_h8300hn || machine == bfd_mach_h8300sn || machine == bfd_mach_h8300sxn)
+    NormalMode = 1;
 }
 
 /* Cover function of sim_state_free to free the cpu buffers as well.  */
@@ -5054,9 +5076,9 @@ sim_load (SIM_DESC sd, char *prog, bfd *
      switching between H8/300 and H8/300H programs without exiting
      gdb.  */
 
-  if (h8300smode)
+  if (h8300smode && 0 == NormalMode)
     memory_size = H8300S_MSIZE;
-  else if (h8300hmode)
+  else if (h8300hmode && 0 == NormalMode)
     memory_size = H8300H_MSIZE;
   else
     memory_size = H8300_MSIZE;

=====================================================================

Attachment: h8300-tdep.diff
Description: h8300-tdep.diff

Attachment: compile.diff
Description: compile.diff

Attachment: tm-h8300.diff
Description: tm-h8300.diff

Attachment: coff-h8300.diff
Description: coff-h8300.diff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]