This is the mail archive of the gdb-patches@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]

[rfc][22/37] Eliminate builtin_type_ macros: Platform-neutral "true char" types


Hello,

similarly to the preceding builtin_type_void patch, this patch converts
builtin_type_true_char and builtin_type_true_unsigned_char into global
platform-neutral variables.  These types are only used for GDB-internal
platform-neutral purposes.

Bye,
Ulrich


ChangeLog:

	* gdbtypes.h (struct builtin_type): Remove builtin_true_char
	and builtin_true_unsigned_char.
	(builtin_type_true_char): Remove macro, add extern declaration.
	(builtin_type_true_unsigned_char): Add extern declaration.
	* gdbtypes.c (builtin_type_true_char): New global variable.
	(builtin_type_true_unsigned_char): Likewise.
	(_initialize_gdbtypes): Initialize them.
	(gdbtypes_post_init): Do not initialize builtin_true_char
	and builtin_true_unsigned_char members of struct builtin_type.

	* printcmd.c (print_scalar_formatted): Do not use builtin_type;
	use builtin_type_true_unsigned_char instead.

	* ada-valprint.c (ada_val_print_1): Use builtin_type_true_char
	instead of builtin_type_char for internal string.


Index: gdb-head/gdb/gdbtypes.c
===================================================================
--- gdb-head.orig/gdb/gdbtypes.c
+++ gdb-head/gdb/gdbtypes.c
@@ -111,6 +111,10 @@ struct type *builtin_type_ia64_quad;
 /* Platform-neutral void type.  */
 struct type *builtin_type_void;
 
+/* Platform-neutral character types.  */
+struct type *builtin_type_true_char;
+struct type *builtin_type_true_unsigned_char;
+
 
 int opaque_type_resolution = 1;
 static void
@@ -3109,14 +3113,6 @@ gdbtypes_post_init (struct gdbarch *gdba
 	       (TYPE_FLAG_NOSIGN
                 | (gdbarch_char_signed (gdbarch) ? 0 : TYPE_FLAG_UNSIGNED)),
 	       "char", (struct objfile *) NULL);
-  builtin_type->builtin_true_char =
-    init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-	       0,
-	       "true character", (struct objfile *) NULL);
-  builtin_type->builtin_true_unsigned_char =
-    init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-	       TYPE_FLAG_UNSIGNED,
-	       "true character", (struct objfile *) NULL);
   builtin_type->builtin_signed_char =
     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
 	       0,
@@ -3337,6 +3333,14 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_VOID, 1,
 	       0,
 	       "void", (struct objfile *) NULL);
+  builtin_type_true_char =
+    init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+	       0,
+	       "true character", (struct objfile *) NULL);
+  builtin_type_true_unsigned_char =
+    init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+	       TYPE_FLAG_UNSIGNED,
+	       "true character", (struct objfile *) NULL);
 
   add_setshow_zinteger_cmd ("overload", no_class, &overload_debug, _("\
 Set debugging of C++ overloading."), _("\
Index: gdb-head/gdb/gdbtypes.h
===================================================================
--- gdb-head.orig/gdb/gdbtypes.h
+++ gdb-head/gdb/gdbtypes.h
@@ -977,12 +977,6 @@ struct builtin_type
 
   /* Integral types.  */
 
-  /* We use these for the '/c' print format, because c_char is just a
-     one-byte integral type, which languages less laid back than C
-     will print as ... well, a one-byte integral type.  */
-  struct type *builtin_true_char;
-  struct type *builtin_true_unsigned_char;
-
   /* Implicit size/sign (based on the the architecture's ABI).  */
   struct type *builtin_void;
   struct type *builtin_char;
@@ -1018,8 +1012,6 @@ extern const struct builtin_type *builti
 	(builtin_type (current_gdbarch)->builtin_func_ptr)
 #define builtin_type_CORE_ADDR \
 	(builtin_type (current_gdbarch)->builtin_core_addr)
-#define builtin_type_true_char \
-	(builtin_type (current_gdbarch)->builtin_true_char)
 #define builtin_type_char \
 	(builtin_type (current_gdbarch)->builtin_char)
 #define builtin_type_short \
@@ -1099,6 +1091,14 @@ extern struct type *builtin_type_ia64_qu
    You must use builtin_type (...)->builtin_void in those cases.  */
 extern struct type *builtin_type_void;
 
+/* Platform-neutral character types.
+   We use these for the '/c' print format, because c_char is just a
+   one-byte integral type, which languages less laid back than C
+   will print as ... well, a one-byte integral type.  */
+extern struct type *builtin_type_true_char;
+extern struct type *builtin_type_true_unsigned_char;
+
+
 /* This type represents a type that was unrecognized in symbol
    read-in.  */
 extern struct type *builtin_type_error;
Index: gdb-head/gdb/printcmd.c
===================================================================
--- gdb-head.orig/gdb/printcmd.c
+++ gdb-head/gdb/printcmd.c
@@ -425,13 +425,9 @@ print_scalar_formatted (const void *vala
 
     case 'c':
       if (TYPE_UNSIGNED (type))
-	{
-	  struct type *utype;
-
-	  utype = builtin_type (current_gdbarch)->builtin_true_unsigned_char;
-	  value_print (value_from_longest (utype, val_long),
-		       stream, 0, Val_pretty_default);
-	}
+	value_print (value_from_longest (builtin_type_true_unsigned_char,
+					 val_long),
+		     stream, 0, Val_pretty_default);
       else
 	value_print (value_from_longest (builtin_type_true_char, val_long),
 		     stream, 0, Val_pretty_default);
Index: gdb-head/gdb/ada-valprint.c
===================================================================
--- gdb-head.orig/gdb/ada-valprint.c
+++ gdb-head/gdb/ada-valprint.c
@@ -752,7 +752,7 @@ ada_val_print_1 (struct type *type, cons
 		parray_of_char =
 		  make_pointer_type
 		  (create_array_type
-		   (NULL, builtin_type_char,
+		   (NULL, builtin_type_true_char,
 		    create_range_type (NULL, builtin_type_int, 0, 32)), NULL);
 
 	      printable_val =

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


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