aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2002-05-16 07:35:21 +0000
committerCorinna Vinschen <corinna@vinschen.de>2002-05-16 07:35:21 +0000
commit6ed14b0eceb007f0d2019bc3ade17f54a332c9fa (patch)
treed7e585ede65416fc18b1f38629934bf5993336cf
parent427259102840f4ba492d4fd07ef0ba0595edef7d (diff)
downloadgdb-6ed14b0eceb007f0d2019bc3ade17f54a332c9fa.zip
gdb-6ed14b0eceb007f0d2019bc3ade17f54a332c9fa.tar.gz
gdb-6ed14b0eceb007f0d2019bc3ade17f54a332c9fa.tar.bz2
* v850-tdep.c: Begin multi-arch'ing v850.
(v850_target_architecture_hook): Remove function. (v850_gdbarch_init): New function. Add code previously in v850_target_architecture_hook(). (_initialize_v850_tdep): Don't set target_architecture_hook. Call register_gdbarch_init() instead.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/v850-tdep.c41
2 files changed, 35 insertions, 15 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dbeec7a..447c1c8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2002-05-16 Corinna Vinschen <vinschen@redhat.com>
+
+ * v850-tdep.c: Begin multi-arch'ing v850.
+ (v850_target_architecture_hook): Remove function.
+ (v850_gdbarch_init): New function. Add code previously in
+ v850_target_architecture_hook().
+ (_initialize_v850_tdep): Don't set target_architecture_hook.
+ Call register_gdbarch_init() instead.
+
2002-05-16 Daniel Jacobowitz <drow@mvista.com>
* gdbtypes.h (struct cplus_struct_type): Remove args field.
diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
index 534e956..2bc76f5 100644
--- a/gdb/v850-tdep.c
+++ b/gdb/v850-tdep.c
@@ -830,33 +830,44 @@ v850_fix_call_dummy (char *dummy, CORE_ADDR sp, CORE_ADDR fun, int nargs,
return 0;
}
-/* Change the register names based on the current machine type. */
-
-static int
-v850_target_architecture_hook (const bfd_arch_info_type *ap)
+static struct gdbarch *
+v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- int i, j;
+ struct gdbarch_tdep *tdep = NULL;
+ struct gdbarch *gdbarch;
+ int i;
+
+ /* find a candidate among the list of pre-declared architectures. */
+ arches = gdbarch_list_lookup_by_info (arches, &info);
+ if (arches != NULL)
+ return (arches->gdbarch);
- if (ap->arch != bfd_arch_v850)
+#if 0
+ tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
+#endif
+
+ if (info.bfd_arch_info->arch != bfd_arch_v850)
return 0;
+ gdbarch = gdbarch_alloc (&info, 0);
+
+ /* Change the register names based on the current machine type. */
for (i = 0; v850_processor_type_table[i].regnames != NULL; i++)
{
- if (v850_processor_type_table[i].mach == ap->mach)
- {
- v850_register_names = v850_processor_type_table[i].regnames;
- tm_print_insn_info.mach = ap->mach;
- return 1;
- }
+ if (v850_processor_type_table[i].mach == info.bfd_arch_info->mach)
+ {
+ v850_register_names = v850_processor_type_table[i].regnames;
+ tm_print_insn_info.mach = info.bfd_arch_info->mach;
+ break;
+ }
}
- internal_error (__FILE__, __LINE__,
- "Architecture `%s' unrecognized", ap->printable_name);
+ return gdbarch;
}
void
_initialize_v850_tdep (void)
{
tm_print_insn = print_insn_v850;
- target_architecture_hook = v850_target_architecture_hook;
+ register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init);
}