* RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
@ 2003-09-15 8:59 Shrinivas Atre
2003-09-22 17:27 ` Corinna Vinschen
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Shrinivas Atre @ 2003-09-15 8:59 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 19124 bytes --]
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 #2: h8300-tdep.diff --]
[-- Type: application/octet-stream, Size: 4560 bytes --]
--- 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;
[-- Attachment #3: compile.diff --]
[-- Type: application/octet-stream, Size: 10142 bytes --]
--- 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 #4: tm-h8300.diff --]
[-- Type: application/octet-stream, Size: 360 bytes --]
--- 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
[-- Attachment #5: coff-h8300.diff --]
[-- Type: application/octet-stream, Size: 1706 bytes --]
--- 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)
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
2003-09-15 8:59 RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB Shrinivas Atre
@ 2003-09-22 17:27 ` Corinna Vinschen
2003-10-09 21:23 ` Michael Snyder
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Corinna Vinschen @ 2003-09-22 17:27 UTC (permalink / raw)
To: gdb-patches
On Mon, Sep 15, 2003 at 02:25:20PM +0530, Shrinivas Atre wrote:
> 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 ?
Do you have an FSF copyright assignment? AFAIK you need that.
> --- 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 */
Please don't use UpperCase but only lower case and underscore for
variable names. This variable should be named normal_mode.
In this very case, the variable is extern so the name should be much
less ambiguous. Probably "h8300_normal_mode" would fit.
> - 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;
Is it necessary to duplicate all set_gdbarch_XXX calls? Wouldn't
it be more clear to set "h8300_normal_mode" separately to show that
it's the same machine, just another mode? E. g.
case bfd_mach_h8300h:
case bfd_mach_h8300hn:
if (info.bfd_arch_info->mach)
h8300_normal_mode = 1;
> @@ -510,6 +510,7 @@ enum { POLL_QUIT_INTERVAL = 0x80000 };
>
> int h8300hmode = 0;
> int h8300smode = 0;
> +int NormalMode = 0;
As above, "h8300_normal_mode" would be better.
Otherwise it looks ok but I guess we need a word from the h8300 sim
expert. Michael?
Corinna
--
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
2003-09-15 8:59 RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB Shrinivas Atre
2003-09-22 17:27 ` Corinna Vinschen
@ 2003-10-09 21:23 ` Michael Snyder
2003-10-09 21:24 ` Michael Snyder
2003-10-09 21:27 ` Michael Snyder
3 siblings, 0 replies; 6+ messages in thread
From: Michael Snyder @ 2003-10-09 21:23 UTC (permalink / raw)
To: Shrinivas Atre; +Cc: gdb-patches, nickc
Shrinivas Atre wrote:
> 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
Hi Shrinivas,
I'm sorry for the delay. Yes, these are fine -- except that I can't
approve the BFD part. Please submit that separately to
binutils@sources.redhat.com, it should be approved as a matter
of course. Then you can check everything in -- and thanks.
Michael
>
> =====================================================================
> 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;
>
> =====================================================================
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
2003-09-15 8:59 RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB Shrinivas Atre
2003-09-22 17:27 ` Corinna Vinschen
2003-10-09 21:23 ` Michael Snyder
@ 2003-10-09 21:24 ` Michael Snyder
2003-10-09 21:27 ` Michael Snyder
3 siblings, 0 replies; 6+ messages in thread
From: Michael Snyder @ 2003-10-09 21:24 UTC (permalink / raw)
To: Shrinivas Atre; +Cc: gdb-patches
Shrinivas Atre wrote:
> 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
Oops, I forgot to add -- I would prefer the idiom "!h8300_normal_mode"
instead of "0 == h8300_normal_mode", especially when it's not by itself
but part of an expression.
Thanks,
Michael
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
2003-09-15 8:59 RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB Shrinivas Atre
` (2 preceding siblings ...)
2003-10-09 21:24 ` Michael Snyder
@ 2003-10-09 21:27 ` Michael Snyder
3 siblings, 0 replies; 6+ messages in thread
From: Michael Snyder @ 2003-10-09 21:27 UTC (permalink / raw)
To: Shrinivas Atre; +Cc: gdb-patches
Shrinivas Atre wrote:
> 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
Err... and I meant to approve the updated version of your patch,
including the changes made in response to Corinna's suggestions.
;-/
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
@ 2003-10-17 12:53 Shrinivas Atre
0 siblings, 0 replies; 6+ messages in thread
From: Shrinivas Atre @ 2003-10-17 12:53 UTC (permalink / raw)
To: gdb-patches; +Cc: nickc, Michael Snyder
Hi,
Committed with changes suggested.
http://sources.redhat.com/ml/gdb-cvs/2003-10/msg00144.html
http://sources.redhat.com/ml/gdb-cvs/2003-10/msg00145.html
Regards,
Shrinivas
> -----Original Message-----
> From: Michael Snyder [mailto:msnyder@redhat.com]
> Sent: Friday, October 10, 2003 2:54 AM
> To: Shrinivas Atre
> Cc: gdb-patches@sources.redhat.com; nickc@redhat.com
> Subject: Re: RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB
>
>
> Shrinivas Atre wrote:
> > 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
>
> Hi Shrinivas,
>
> I'm sorry for the delay. Yes, these are fine -- except that I can't
> approve the BFD part. Please submit that separately to
> binutils@sources.redhat.com, it should be approved as a matter
> of course. Then you can check everything in -- and thanks.
>
> Michael
>
> Oops, I forgot to add -- I would prefer the idiom "!h8300_normal_mode"
> instead of "0 == h8300_normal_mode", especially when it's not
> by itself
> but part of an expression.
>
> Thanks,
> Michael
>
>
> Err... and I meant to approve the updated version of your patch,
> including the changes made in response to Corinna's suggestions.
> ;-/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-10-17 12:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-15 8:59 RFA - PATCH - Support H8/300H and H8S Normal Mode for GDB Shrinivas Atre
2003-09-22 17:27 ` Corinna Vinschen
2003-10-09 21:23 ` Michael Snyder
2003-10-09 21:24 ` Michael Snyder
2003-10-09 21:27 ` Michael Snyder
2003-10-17 12:53 Shrinivas Atre
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox