[PATCH] mcore multi-arch

Grace Sainsbury graces@redhat.com
Wed Jul 3 11:00:00 GMT 2002


I started to multi-arch the mcore target.
committed as obvious.

grace

2002-07-03  Grace Sainsbury  <graces@redhat.com>

	    * config/mcore/tm-mcore.h (GDB_MULTI_ARCH): Add macro. Set
              to 0.
	      (REGISTER_SIZE): Remove.
	      (MAX_REGISTER_RAW_SIZE): Remove.
	      (REGISTER_VIRTUAL_TYPE): Remove.
	      (MAX_REGISTER_VIRTUAL_SIZE): Remove.
	      (REGISTER_NAME): Remove.
	      (USE_GENERIC_DUMMY_FRAMES): Remove.
	      (CALL_DUMMY): Remove.
	      (CALL_DUMMY_START_OFFSET): Remove.
	      (CALL_DUMMY_BREAKPOINT_OFFSET): Remove.
	      (CALL_DUMMY_LOCATION): Remove.
	      (FIX_CALL_DUMMY): Remove.
	      (CALL_DUMMY_ADDRESS): Remove.
	      (SIZEOF_CALL_DUMMY_WORDS): Remove.
	      (SAVE_DUMMY_FRAME_TOS): Remove.
	      * mcore-tdep.c (MCORE_REG_SIZE, MCORE_NUM_REGS): Add
              macros.
	      (mcore_register_virtual_type): New function.
	      (mcore_register_byte): New function.
	      (mcore_register_size): New function.
	      (mcore_register_name): New function.
	      (mcore_gdbarch_init): New function. Add set_gdbarch
              calls for
	      macros removed from tm-mcore.h.
	      (mcore_dump_tdep): Add.
	      (_initialize_mcore_tdep): Add gdbarch_register call.
-------------- next part --------------
Index: mcore-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mcore-tdep.c,v
retrieving revision 1.13
diff -u -r1.13 mcore-tdep.c
--- mcore-tdep.c	18 Apr 2002 18:09:02 -0000	1.13
+++ mcore-tdep.c	3 Jul 2002 16:36:21 -0000
@@ -76,22 +76,12 @@
 int mcore_debug = 0;
 #endif
 
-/* The registers of the Motorola MCore processors */
-/* *INDENT-OFF* */
-char *mcore_register_names[] =
-{ "r0",   "r1",  "r2",    "r3",   "r4",   "r5",   "r6",   "r7",
-  "r8",   "r9",  "r10",   "r11",  "r12",  "r13",  "r14",  "r15",
-  "ar0",  "ar1", "ar2",   "ar3",  "ar4",  "ar5",  "ar6",  "ar7",
-  "ar8",  "ar9", "ar10", "ar11",  "ar12", "ar13", "ar14", "ar15",
-  "psr",  "vbr", "epsr",  "fpsr", "epc",  "fpc",  "ss0",  "ss1",
-  "ss2",  "ss3", "ss4",   "gcr",  "gsr",  "cr13", "cr14", "cr15",
-  "cr16", "cr17", "cr18", "cr19", "cr20", "cr21", "cr22", "cr23",
-  "cr24", "cr25", "cr26", "cr27", "cr28", "cr29", "cr30", "cr31",
-  "pc" };
-/* *INDENT-ON* */
-
 
+/* All registers are 4 bytes long.  */
+#define MCORE_REG_SIZE 4
+#define MCORE_NUM_REGS 65
 
+  
 /* Additional info that we use for managing frames */
 struct frame_extra_info
   {
@@ -175,6 +165,68 @@
 #define mcore_insn_debug(args) {}
 #endif
 
+
+static struct type *
+mcore_register_virtual_type (int regnum)
+{
+  if (regnum < 0 || regnum >= MCORE_NUM_REGS)
+    internal_error (__FILE__, __LINE__,
+		    "mcore_register_virtual_type: illegal register number %d",
+		    regnum);
+  else
+    return builtin_type_int;
+}
+
+static int
+mcore_register_byte (int regnum)
+{
+  if (regnum < 0 || regnum >= MCORE_NUM_REGS)
+    internal_error (__FILE__, __LINE__,
+		    "mcore_register_byte: illegal register number %d",
+		    regnum);
+  else 
+    return (regnum * MCORE_REG_SIZE);
+}
+
+static int
+mcore_register_size (int regnum)
+{
+  
+  if (regnum < 0 || regnum >= MCORE_NUM_REGS)
+    internal_error (__FILE__, __LINE__,
+		    "mcore_register_size: illegal register number %d",
+		    regnum);
+  else
+    return MCORE_REG_SIZE;
+}
+
+/* The registers of the Motorola MCore processors */
+
+static const char *
+mcore_register_name (int regnum)
+{
+
+  static char *register_names[] = { 
+    "r0",   "r1",  "r2",    "r3",   "r4",   "r5",   "r6",   "r7",
+    "r8",   "r9",  "r10",   "r11",  "r12",  "r13",  "r14",  "r15",
+    "ar0",  "ar1", "ar2",   "ar3",  "ar4",  "ar5",  "ar6",  "ar7",
+    "ar8",  "ar9", "ar10", "ar11",  "ar12", "ar13", "ar14", "ar15",
+    "psr",  "vbr", "epsr",  "fpsr", "epc",  "fpc",  "ss0",  "ss1",
+    "ss2",  "ss3", "ss4",   "gcr",  "gsr",  "cr13", "cr14", "cr15",
+    "cr16", "cr17", "cr18", "cr19", "cr20", "cr21", "cr22", "cr23",
+    "cr24", "cr25", "cr26", "cr27", "cr28", "cr29", "cr30", "cr31",
+    "pc" 
+  };
+
+  if (regnum < 0 ||
+      regnum >= sizeof (register_names) / sizeof (register_names[0]))
+    internal_error (__FILE__, __LINE__,
+		    "mcore_register_name: illegal register number %d",
+		    regnum);
+  else
+    return register_names[regnum];
+}
+
 /* Given the address at which to insert a breakpoint (BP_ADDR),
    what will that breakpoint be?
 
@@ -981,10 +1033,59 @@
   return extract_unsigned_integer (buf, 2);
 }
 
+static struct gdbarch *
+mcore_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+  static LONGEST call_dummy_words[7] = { };
+  struct gdbarch_tdep *tdep = NULL;
+  struct gdbarch *gdbarch;
+
+  /* find a candidate among the list of pre-declared architectures. */
+  arches = gdbarch_list_lookup_by_info (arches, &info);
+  if (arches != NULL)
+    return (arches->gdbarch);
+
+  gdbarch = gdbarch_alloc (&info, 0);
+
+  /* All registers are 32 bits */
+  set_gdbarch_register_size (gdbarch, MCORE_REG_SIZE);
+  set_gdbarch_max_register_raw_size (gdbarch, MCORE_REG_SIZE);
+  set_gdbarch_max_register_virtual_size (gdbarch, MCORE_REG_SIZE);
+
+  set_gdbarch_register_name (gdbarch, mcore_register_name);
+  set_gdbarch_register_virtual_type (gdbarch, mcore_register_virtual_type);
+  set_gdbarch_register_virtual_size (gdbarch, mcore_register_size);
+  set_gdbarch_register_raw_size (gdbarch, mcore_register_size);
+  set_gdbarch_register_byte (gdbarch, mcore_register_byte);
+
+  set_gdbarch_call_dummy_p (gdbarch, 1);
+  set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
+  set_gdbarch_call_dummy_words (gdbarch, call_dummy_words);
+  set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
+  set_gdbarch_call_dummy_start_offset (gdbarch, 0);
+  set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
+  set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
+  set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
+  set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
+  set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
+  set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
+  set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
+  set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
+
+  return gdbarch;
+}
+
+static void
+mcore_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
+{
+
+}
+
 void
 _initialize_mcore_tdep (void)
 {
   extern int print_insn_mcore (bfd_vma, disassemble_info *);
+  gdbarch_register (bfd_arch_mcore, mcore_gdbarch_init, mcore_dump_tdep);
   tm_print_insn = print_insn_mcore;
 
 #ifdef MCORE_DEBUG
Index: config/mcore/tm-mcore.h
===================================================================
RCS file: /cvs/src/src/gdb/config/mcore/tm-mcore.h,v
retrieving revision 1.12
diff -u -r1.12 tm-mcore.h
--- config/mcore/tm-mcore.h	14 Jun 2002 22:55:47 -0000	1.12
+++ config/mcore/tm-mcore.h	3 Jul 2002 16:36:22 -0000
@@ -23,6 +23,9 @@
 #include "symtab.h"		/* For namespace_enum.  */
 #include "symfile.h"		/* For entry_point_address().  */
 
+#define GDB_MULTI_ARCH 0
+
+#if !GDB_MULTI_ARCH
 /* All registers are 32 bits */
 #define REGISTER_SIZE 4
 #define MAX_REGISTER_RAW_SIZE 4
@@ -34,11 +37,14 @@
 #define REGISTER_RAW_SIZE(REG) 4
 
 #define MAX_REGISTER_VIRTUAL_SIZE 4
+#endif
 
 #define REGISTER_BYTES (NUM_REGS * REGISTER_SIZE)
 
+#if !GDB_MULTI_ARCH
 extern char *mcore_register_names[];
 #define REGISTER_NAME(I) mcore_register_names[I]
+#endif
 
 /* Registers. The Motorola MCore contains:
 
@@ -117,6 +123,7 @@
 extern void mcore_pop_frame (struct frame_info *fi);
 #define POP_FRAME mcore_pop_frame (get_current_frame ())
 
+#if !GDB_MULTI_ARCH
 #define USE_GENERIC_DUMMY_FRAMES 1
 #define CALL_DUMMY                   {0}
 #define CALL_DUMMY_START_OFFSET      (0)
@@ -126,6 +133,7 @@
 #define CALL_DUMMY_ADDRESS()         entry_point_address ()
 #define SIZEOF_CALL_DUMMY_WORDS      0
 #define SAVE_DUMMY_FRAME_TOS(SP)     generic_save_dummy_frame_tos (SP)
+#endif
 
 extern CORE_ADDR mcore_push_return_address (CORE_ADDR, CORE_ADDR);
 #define PUSH_RETURN_ADDRESS(PC, SP)  mcore_push_return_address (PC, SP)
@@ -137,7 +145,9 @@
 #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
   (SP) = mcore_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR)
 
+#if !GDB_MULTI_ARCH
 #define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP)
+#endif
 
 /* MCore will never pass a sturcture by reference. It will always be split
    between registers and stack. */


More information about the Gdb-patches mailing list