* sparc-tdep.c (sparc_psr_type, sparc_fsr_type): New variables.
authorMark Kettenis <kettenis@gnu.org>
Fri, 29 Dec 2006 21:00:47 +0000 (21:00 +0000)
committerMark Kettenis <kettenis@gnu.org>
Fri, 29 Dec 2006 21:00:47 +0000 (21:00 +0000)
(sparc_init_types): New function.
(sparc32_register_type): Use appropriate flag types for %fsr and
%prs.
(_initialize_sparc_tdep): Call sparc_init_types.

gdb/ChangeLog
gdb/sparc-tdep.c

index ced7ede00422d0f60a0f901557902aed6c7fb00a..ab1f299a012e5799635d61f62eae3e3970d747ad 100644 (file)
@@ -1,5 +1,11 @@
 2006-12-29  Mark Kettenis  <kettenis@gnu.org>
 
+       * sparc-tdep.c (sparc_psr_type, sparc_fsr_type): New variables.
+       (sparc_init_types): New function.
+       (sparc32_register_type): Use appropriate flag types for %fsr and
+       %prs.
+       (_initialize_sparc_tdep): Call sparc_init_types.
+
        * memory-map.c (memory_map_end_element): Move variable
        declarations to the begining of the block.
 
index 27c852f2632207bf515cb215ea874cea42b6a84e..a53c464be5fafa4791a9c6e7ebcd39431e611295 100644 (file)
@@ -294,6 +294,48 @@ sparc32_register_name (int regnum)
 
   return NULL;
 }
+\f
+
+/* Type for %psr.  */
+struct type *sparc_psr_type;
+
+/* Type for %fsr.  */
+struct type *sparc_fsr_type;
+
+/* Construct types for ISA-specific registers.  */
+
+static void
+sparc_init_types (void)
+{
+  struct type *type;
+
+  type = init_flags_type ("builtin_type_sparc_psr", 4);
+  append_flags_type_flag (type, 5, "ET");
+  append_flags_type_flag (type, 6, "PS");
+  append_flags_type_flag (type, 7, "S");
+  append_flags_type_flag (type, 12, "EF");
+  append_flags_type_flag (type, 13, "EC");
+  sparc_psr_type = type;
+
+  type = init_flags_type ("builtin_type_sparc_fsr", 4);
+  append_flags_type_flag (type, 0, "NXA");
+  append_flags_type_flag (type, 1, "DZA");
+  append_flags_type_flag (type, 2, "UFA");
+  append_flags_type_flag (type, 3, "OFA");
+  append_flags_type_flag (type, 4, "NVA");
+  append_flags_type_flag (type, 5, "NXC");
+  append_flags_type_flag (type, 6, "DZC");
+  append_flags_type_flag (type, 7, "UFC");
+  append_flags_type_flag (type, 8, "OFC");
+  append_flags_type_flag (type, 9, "NVC");
+  append_flags_type_flag (type, 22, "NS");
+  append_flags_type_flag (type, 23, "NXM");
+  append_flags_type_flag (type, 24, "DZM");
+  append_flags_type_flag (type, 25, "UFM");
+  append_flags_type_flag (type, 26, "OFM");
+  append_flags_type_flag (type, 27, "NVM");
+  sparc_fsr_type = type;
+}
 
 /* Return the GDB type object for the "standard" data type of data in
    register REGNUM. */
@@ -313,6 +355,12 @@ sparc32_register_type (struct gdbarch *gdbarch, int regnum)
   if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
     return builtin_type_void_func_ptr;
 
+  if (regnum == SPARC32_PSR_REGNUM)
+    return sparc_psr_type;
+
+  if (regnum == SPARC32_FSR_REGNUM)
+    return sparc_fsr_type;
+
   return builtin_type_int32;
 }
 
@@ -1621,4 +1669,7 @@ void
 _initialize_sparc_tdep (void)
 {
   register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
+
+  /* Initialize the SPARC-specific register types.  */
+  sparc_init_types();
 }