[1/7] Eliminate builtin void type

Ulrich Weigand uweigand@de.ibm.com
Fri Jun 26 16:40:00 GMT 2009


Hello,

this patch removes all remaining instances of builtin_type_void and
replaces them with appropriate per-architecture void types.

The use of current_gdbarch in safe_parse_type will be replaced with
a per-type architecture later.

Bye,
Ulrich


ChangeLog:

	* gdbtypes.h (builtin_type_void): Remove.
	* gdbtypes.c (builtin_type_void): Remove.
	(_initialize_gdbtypes): Do not initialize it.

	(safe_parse_type): Add GDBARCH argument.  Use it to construct
	void return type.
	(check_stub_method): Update call.

	* infcall.c (call_function_by_hand): Use platform-specific type
	instead of builtin_type_void.
	* valops.c (value_cast): Use input void type instead of
	builtin_type_void.


Index: gdb-head/gdb/gdbtypes.c
===================================================================
--- gdb-head.orig/gdb/gdbtypes.c
+++ gdb-head/gdb/gdbtypes.c
@@ -108,9 +108,6 @@ struct type *builtin_type_arm_ext;
 struct type *builtin_type_ia64_spill;
 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;
@@ -1525,10 +1522,10 @@ check_typedef (struct type *type)
 }
 
 /* Parse a type expression in the string [P..P+LENGTH).  If an error
-   occurs, silently return builtin_type_void.  */
+   occurs, silently return a void type.  */
 
 static struct type *
-safe_parse_type (char *p, int length)
+safe_parse_type (struct gdbarch *gdbarch, char *p, int length)
 {
   struct ui_file *saved_gdb_stderr;
   struct type *type;
@@ -1539,7 +1536,7 @@ safe_parse_type (char *p, int length)
 
   /* Call parse_and_eval_type() without fear of longjmp()s.  */
   if (!gdb_parse_and_eval_type (p, length, &type))
-    type = builtin_type_void;
+    type = builtin_type (gdbarch)->builtin_void;
 
   /* Stop suppressing error messages.  */
   ui_file_delete (gdb_stderr);
@@ -1561,6 +1558,7 @@ safe_parse_type (char *p, int length)
 static void
 check_stub_method (struct type *type, int method_id, int signature_id)
 {
+  struct gdbarch *gdbarch = current_gdbarch;
   struct fn_field *f;
   char *mangled_name = gdb_mangle_name (type, method_id, signature_id);
   char *demangled_name = cplus_demangle (mangled_name,
@@ -1634,7 +1632,7 @@ check_stub_method (struct type *type, in
 		  && strncmp (argtypetext, "void", p - argtypetext) != 0)
 		{
 		  argtypes[argcount].type =
-		    safe_parse_type (argtypetext, p - argtypetext);
+		    safe_parse_type (gdbarch, argtypetext, p - argtypetext);
 		  argcount += 1;
 		}
 	      argtypetext = p + 1;
@@ -3432,10 +3430,6 @@ _initialize_gdbtypes (void)
   builtin_type_ia64_quad =
     build_flt (-1, "builtin_type_ia64_quad", floatformats_ia64_quad);
 
-  builtin_type_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,
Index: gdb-head/gdb/gdbtypes.h
===================================================================
--- gdb-head.orig/gdb/gdbtypes.h
+++ gdb-head/gdb/gdbtypes.h
@@ -1085,10 +1085,6 @@ extern struct type *builtin_type_arm_ext
 extern struct type *builtin_type_ia64_spill;
 extern struct type *builtin_type_ia64_quad;
 
-/* Platform-neutral void type.  Never attempt to construct a pointer
-   or reference type to this, because those cannot be platform-neutral.
-   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
Index: gdb-head/gdb/infcall.c
===================================================================
--- gdb-head.orig/gdb/infcall.c
+++ gdb-head/gdb/infcall.c
@@ -562,7 +562,7 @@ call_function_by_hand (struct value *fun
 
       /* Tell the target specific argument pushing routine not to
 	 expect a value.  */
-      target_values_type = builtin_type_void;
+      target_values_type = builtin_type (gdbarch)->builtin_void;
     }
   else
     {
Index: gdb-head/gdb/valops.c
===================================================================
--- gdb-head.orig/gdb/valops.c
+++ gdb-head/gdb/valops.c
@@ -511,7 +511,7 @@ value_cast (struct type *type, struct va
     return value_at_lazy (type, value_address (arg2));
   else if (code1 == TYPE_CODE_VOID)
     {
-      return value_zero (builtin_type_void, not_lval);
+      return value_zero (type, not_lval);
     }
   else
     {
-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com



More information about the Gdb-patches mailing list