This is the mail archive of the gdb-cvs@sourceware.org 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]

[binutils-gdb] Add some missing arch_..._type helpers


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=88dfca6c43c11dea69db24cfb87e6821e63e29b2

commit 88dfca6c43c11dea69db24cfb87e6821e63e29b2
Author: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Date:   Tue Sep 6 17:26:32 2016 +0200

    Add some missing arch_..._type helpers
    
    gdbtypes provides a number of helper routines that can be called instead of
    using arch_type directly to create a type of a particular kind.  This patch
    adds two additional such routines that have been missing so far, to allow
    creation of TYPE_CODE_DECFLOAT and TYPE_CODE_POINTER types.
    
    The patch also changes a number of places to use the new helper routines
    instead of calling arch_type directly.  No functional change intended.
    
    gdb/ChangeLog:
    
    	* gdbtypes.h (arch_decfloat_type): New prototype.
    	(arch_pointer_type): Likewise.
    	* gdbtypes.c (arch_decfloat_type): New function.
    	(arch_pointer_type): Likewise.
    	(gdbtypes_post_init): Use arch_decfloat_type.
    	* avr-tdep.c (avr_gdbarch_init): Use arch_pointer_type.
    	* ft32-tdep.c (ft32_gdbarch_init): Likewise.
    	* m32c-tdep.c (make_types): Likewise.
    	* rl78-tdep.c (rl78_gdbarch_init): Likewise.
    
    Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>

Diff:
---
 gdb/ChangeLog   | 12 ++++++++++++
 gdb/avr-tdep.c  |  5 ++---
 gdb/ft32-tdep.c |  5 ++---
 gdb/gdbtypes.c  | 35 ++++++++++++++++++++++++++++++++---
 gdb/gdbtypes.h  |  3 +++
 gdb/m32c-tdep.c | 15 +++------------
 gdb/rl78-tdep.c | 11 ++---------
 7 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 95627c2..437fedb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,17 @@
 2016-09-05  Ulrich Weigand  <uweigand@de.ibm.com>
 
+	* gdbtypes.h (arch_decfloat_type): New prototype.
+	(arch_pointer_type): Likewise.
+	* gdbtypes.c (arch_decfloat_type): New function.
+	(arch_pointer_type): Likewise.
+	(gdbtypes_post_init): Use arch_decfloat_type.
+	* avr-tdep.c (avr_gdbarch_init): Use arch_pointer_type.
+	* ft32-tdep.c (ft32_gdbarch_init): Likewise.
+	* m32c-tdep.c (make_types): Likewise.
+	* rl78-tdep.c (rl78_gdbarch_init): Likewise.
+
+2016-09-05  Ulrich Weigand  <uweigand@de.ibm.com>
+
 	* gdbtypes.c (set_type_code): New function.
 	(init_type, arch_type): Use it.
 
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index f6f43a0..c5f32a6 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -1466,9 +1466,8 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
      be defined.  */
   tdep->void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
   tdep->func_void_type = make_function_type (tdep->void_type, NULL);
-  tdep->pc_type = arch_type (gdbarch, TYPE_CODE_PTR, 4, NULL);
-  TYPE_TARGET_TYPE (tdep->pc_type) = tdep->func_void_type;
-  TYPE_UNSIGNED (tdep->pc_type) = 1;
+  tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
+				     tdep->func_void_type);
 
   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
   set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 5eaa682..db04d2e 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -610,9 +610,8 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
      be defined.  */
   void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
   func_void_type = make_function_type (void_type, NULL);
-  tdep->pc_type = arch_type (gdbarch, TYPE_CODE_PTR, 4, NULL);
-  TYPE_TARGET_TYPE (tdep->pc_type) = func_void_type;
-  TYPE_UNSIGNED (tdep->pc_type) = 1;
+  tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
+				     func_void_type);
   TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
 
   set_gdbarch_read_pc (gdbarch, ft32_read_pc);
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 241bf08..45fdf84 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -4740,6 +4740,18 @@ arch_float_type (struct gdbarch *gdbarch,
   return t;
 }
 
+/* Allocate a TYPE_CODE_DECFLOAT type structure associated with GDBARCH.
+   BIT is the type size in bits.  NAME is the type name.  */
+
+struct type *
+arch_decfloat_type (struct gdbarch *gdbarch, int bit, const char *name)
+{
+  struct type *t;
+
+  t = arch_type (gdbarch, TYPE_CODE_DECFLOAT, bit / TARGET_CHAR_BIT, name);
+  return t;
+}
+
 /* Allocate a TYPE_CODE_COMPLEX type structure associated with GDBARCH.
    NAME is the type name.  TARGET_TYPE is the component float type.  */
 
@@ -4755,6 +4767,23 @@ arch_complex_type (struct gdbarch *gdbarch,
   return t;
 }
 
+/* Allocate a TYPE_CODE_PTR type structure associated with GDBARCH.
+   BIT is the pointer type size in bits.  NAME is the type name.
+   TARGET_TYPE is the pointer target type.  Always sets the pointer type's
+   TYPE_UNSIGNED flag.  */
+
+struct type *
+arch_pointer_type (struct gdbarch *gdbarch,
+		   int bit, const char *name, struct type *target_type)
+{
+  struct type *t;
+
+  t = arch_type (gdbarch, TYPE_CODE_PTR, bit / TARGET_CHAR_BIT, name);
+  TYPE_TARGET_TYPE (t) = target_type;
+  TYPE_UNSIGNED (t) = 1;
+  return t;
+}
+
 /* Allocate a TYPE_CODE_FLAGS type structure associated with GDBARCH.
    NAME is the type name.  LENGTH is the size of the flag word in bytes.  */
 
@@ -4971,11 +5000,11 @@ gdbtypes_post_init (struct gdbarch *gdbarch)
   /* The following three are about decimal floating point types, which
      are 32-bits, 64-bits and 128-bits respectively.  */
   builtin_type->builtin_decfloat
-    = arch_type (gdbarch, TYPE_CODE_DECFLOAT, 32 / 8, "_Decimal32");
+    = arch_decfloat_type (gdbarch, 32, "_Decimal32");
   builtin_type->builtin_decdouble
-    = arch_type (gdbarch, TYPE_CODE_DECFLOAT, 64 / 8, "_Decimal64");
+    = arch_decfloat_type (gdbarch, 64, "_Decimal64");
   builtin_type->builtin_declong
-    = arch_type (gdbarch, TYPE_CODE_DECFLOAT, 128 / 8, "_Decimal128");
+    = arch_decfloat_type (gdbarch, 128, "_Decimal128");
 
   /* "True" character types.  */
   builtin_type->builtin_true_char
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 2dda074..579a34b 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1686,8 +1686,11 @@ extern struct type *arch_boolean_type (struct gdbarch *, int, int,
 				       const char *);
 extern struct type *arch_float_type (struct gdbarch *, int, const char *,
 				     const struct floatformat **);
+extern struct type *arch_decfloat_type (struct gdbarch *, int, const char *);
 extern struct type *arch_complex_type (struct gdbarch *, const char *,
 				       struct type *);
+extern struct type *arch_pointer_type (struct gdbarch *, int, const char *,
+				       struct type *);
 
 /* Helper functions to construct a struct or record type.  An
    initially empty type is created using arch_composite_type().
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
index 1e98f73..547c997 100644
--- a/gdb/m32c-tdep.c
+++ b/gdb/m32c-tdep.c
@@ -192,27 +192,18 @@ make_types (struct gdbarch *arch)
      this is called, so we avoid using them.  */
   tdep->voyd = arch_type (arch, TYPE_CODE_VOID, 1, "void");
   tdep->ptr_voyd
-    = arch_type (arch, TYPE_CODE_PTR, gdbarch_ptr_bit (arch) / TARGET_CHAR_BIT,
-                 NULL);
-  TYPE_TARGET_TYPE (tdep->ptr_voyd) = tdep->voyd;
-  TYPE_UNSIGNED (tdep->ptr_voyd) = 1;
+    = arch_pointer_type (arch, gdbarch_ptr_bit (arch), NULL, tdep->voyd);
   tdep->func_voyd = lookup_function_type (tdep->voyd);
 
   xsnprintf (type_name, sizeof (type_name), "%s_data_addr_t",
 	     gdbarch_bfd_arch_info (arch)->printable_name);
   tdep->data_addr_reg_type
-    = arch_type (arch, TYPE_CODE_PTR, data_addr_reg_bits / TARGET_CHAR_BIT,
-                 xstrdup (type_name));
-  TYPE_TARGET_TYPE (tdep->data_addr_reg_type) = tdep->voyd;
-  TYPE_UNSIGNED (tdep->data_addr_reg_type) = 1;
+    = arch_pointer_type (arch, data_addr_reg_bits, type_name, tdep->voyd);
 
   xsnprintf (type_name, sizeof (type_name), "%s_code_addr_t",
 	     gdbarch_bfd_arch_info (arch)->printable_name);
   tdep->code_addr_reg_type
-    = arch_type (arch, TYPE_CODE_PTR, code_addr_reg_bits / TARGET_CHAR_BIT,
-                 xstrdup (type_name));
-  TYPE_TARGET_TYPE (tdep->code_addr_reg_type) = tdep->func_voyd;
-  TYPE_UNSIGNED (tdep->code_addr_reg_type) = 1;
+    = arch_pointer_type (arch, code_addr_reg_bits, type_name, tdep->func_voyd);
 
   tdep->uint8  = arch_integer_type (arch,  8, 1, "uint8_t");
   tdep->uint16 = arch_integer_type (arch, 16, 1, "uint16_t");
diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
index 420ee86..4818d38 100644
--- a/gdb/rl78-tdep.c
+++ b/gdb/rl78-tdep.c
@@ -1410,16 +1410,9 @@ rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->rl78_int32 = arch_integer_type (gdbarch, 32, 0, "int32_t");
 
   tdep->rl78_data_pointer
-    = arch_type (gdbarch, TYPE_CODE_PTR, 16 / TARGET_CHAR_BIT,
-                 xstrdup ("rl78_data_addr_t"));
-  TYPE_TARGET_TYPE (tdep->rl78_data_pointer) = tdep->rl78_void;
-  TYPE_UNSIGNED (tdep->rl78_data_pointer) = 1;
-
+    = arch_pointer_type (gdbarch, 16, "rl78_data_addr_t", tdep->rl78_void);
   tdep->rl78_code_pointer
-    = arch_type (gdbarch, TYPE_CODE_PTR, 32 / TARGET_CHAR_BIT,
-                 xstrdup ("rl78_code_addr_t"));
-  TYPE_TARGET_TYPE (tdep->rl78_code_pointer) = tdep->rl78_void;
-  TYPE_UNSIGNED (tdep->rl78_code_pointer) = 1;
+    = arch_pointer_type (gdbarch, 32, "rl78_code_addr_t", tdep->rl78_void);
 
   tdep->rl78_psw_type = arch_flags_type (gdbarch, "builtin_type_rl78_psw", 1);
   append_flags_type_flag (tdep->rl78_psw_type, 0, "CY");


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