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]

Re: H8300 Patch - Fix GDB crash problem when object file of differentH8 cpu is loaded


Michael Snyder wrote:
Andrew Cagney wrote:

Unfortunatly this isn't the right way to go.

BTW, I'm glad you replied to this -- I was going to just approve it. ;-)


The only problem is, these functions would be called from the sim.
Since the sim doesn't know about struct gdbarch, and since you've
written them as using the global current_gdbarch anyway, they
probably should have no argument.

On further reflection, Andrew, the sim also needs to be able to set these variables. In fact, they really belong to the sim, in as much as that's where they're defined.



Michael



Changelog -
2003-11-14 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
* gdb/h8300-tdep.c (h8300_gdbarch_init): Set globals before returning existing gdbarch


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

--- gdb/h8300-tdep.c.old 2003-11-12 13:51:36.000000000 +0530
+++ gdb/h8300-tdep.c 2003-11-14 11:08:29.000000000 +0530
@@ -1176,6 +1176,53 @@ h8300_gdbarch_init (struct gdbarch_info struct gdbarch_tdep *tdep = NULL;
struct gdbarch *gdbarch;
+ /* Set globals */
+ switch (info.bfd_arch_info->mach)
+ {
+ case bfd_mach_h8300:
+ h8300_normal_mode = 0;
+ h8300sxmode = 0;
+ h8300smode = 0;
+ h8300hmode = 0;
+ break;
+ case bfd_mach_h8300h:
+ h8300_normal_mode = 0;
+ h8300sxmode = 0;
+ h8300smode = 0;
+ h8300hmode = 1;
+ break;
+ case bfd_mach_h8300hn:
+ h8300_normal_mode = 1;
+ h8300sxmode = 0;
+ h8300smode = 0;
+ h8300hmode = 1;
+ break;
+ case bfd_mach_h8300s:
+ h8300_normal_mode = 0;
+ h8300sxmode = 0;
+ h8300smode = 1;
+ h8300hmode = 1;
+ break;
+ case bfd_mach_h8300sn:
+ h8300_normal_mode = 1;
+ h8300sxmode = 0;
+ h8300smode = 1;
+ h8300hmode = 1;
+ break;
+ case bfd_mach_h8300sx:
+ h8300_normal_mode = 0;
+ h8300sxmode = 1;
+ h8300smode = 1;
+ h8300hmode = 1;
+ break;
+ case bfd_mach_h8300sxn:
+ h8300_normal_mode = 1;
+ h8300sxmode = 1;
+ h8300smode = 1;
+ h8300hmode = 1;
+ break;
+ }
+
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
@@ -1192,9 +1239,6 @@ h8300_gdbarch_init (struct gdbarch_info switch (info.bfd_arch_info->mach)
{
case bfd_mach_h8300:
- h8300sxmode = 0;
- h8300smode = 0;
- h8300hmode = 0;
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);
@@ -1210,9 +1254,6 @@ h8300_gdbarch_init (struct gdbarch_info break;
case bfd_mach_h8300h:
case bfd_mach_h8300hn:
- 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);
@@ -1222,13 +1263,11 @@ h8300_gdbarch_init (struct gdbarch_info set_gdbarch_register_name (gdbarch, h8300_register_name);
if(info.bfd_arch_info->mach != bfd_mach_h8300hn)
{
- h8300_normal_mode = 0;
set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
}
else
{
- h8300_normal_mode = 1;
set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
}
@@ -1238,9 +1277,6 @@ h8300_gdbarch_init (struct gdbarch_info break;
case bfd_mach_h8300s:
case bfd_mach_h8300sn:
- 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);
@@ -1250,13 +1286,11 @@ h8300_gdbarch_init (struct gdbarch_info set_gdbarch_register_name (gdbarch, h8300s_register_name);
if(info.bfd_arch_info->mach != bfd_mach_h8300sn)
{
- h8300_normal_mode = 0;
set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
}
else
{
- h8300_normal_mode = 1;
set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
}
@@ -1266,9 +1300,6 @@ h8300_gdbarch_init (struct gdbarch_info break;
case bfd_mach_h8300sx:
case bfd_mach_h8300sxn:
- 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);
@@ -1278,13 +1309,11 @@ h8300_gdbarch_init (struct gdbarch_info set_gdbarch_register_name (gdbarch, h8300sx_register_name);
if(info.bfd_arch_info->mach != bfd_mach_h8300sxn)
{
- h8300_normal_mode = 0;
set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
}
else
{
- h8300_normal_mode = 1;
set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
set_gdbarch_addr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
}
=================================================================================












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