From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18191 invoked by alias); 15 Sep 2010 12:42:04 -0000 Received: (qmail 18176 invoked by uid 22791); 15 Sep 2010 12:42:02 -0000 X-SWARE-Spam-Status: No, hits=-0.0 required=5.0 tests=AWL,BAYES_05,TO_MALFORMED,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mtagate7.uk.ibm.com (HELO mtagate7.uk.ibm.com) (194.196.100.167) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 15 Sep 2010 12:41:54 +0000 Received: from d06nrmr1407.portsmouth.uk.ibm.com (d06nrmr1407.portsmouth.uk.ibm.com [9.149.38.185]) by mtagate7.uk.ibm.com (8.13.1/8.13.1) with ESMTP id o8FCfotu018915 for ; Wed, 15 Sep 2010 12:41:50 GMT Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o8FCfoHj3223554 for ; Wed, 15 Sep 2010 13:41:50 +0100 Received: from d06av04.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o8FCfoSm003512 for ; Wed, 15 Sep 2010 13:41:50 +0100 Received: from leonard.localnet (dyn-9-152-224-33.boeblingen.de.ibm.com [9.152.224.33]) by d06av04.portsmouth.uk.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id o8FCfixN002868 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 15 Sep 2010 13:41:49 +0100 From: Ken Werner To: Tom Tromey Subject: Re: RFA: shrink main_type Date: Wed, 15 Sep 2010 19:23:00 -0000 User-Agent: KMail/1.13.2 (Linux/2.6.32-24-generic; KDE/4.4.2; i686; ; ) References: <20080819051306.GQ16894@adacore.com> In-Reply-To: Cc: gdb-patches@sourceware.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_H8LkM81fpH/iBjS" Message-Id: <201009151441.43723.ken@linux.vnet.ibm.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-09/txt/msg00289.txt.bz2 --Boundary-00=_H8LkM81fpH/iBjS Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-length: 1804 On Tuesday, August 19, 2008 07:55:37 pm Tom Tromey wrote: > + /* Flags about this type. These fields appear at this location > + because they packs nicely here. See the TYPE_* macros for > + documentation about these fields. */ > + > + unsigned int flag_unsigned : 1; > + unsigned int flag_nosign : 1; > + unsigned int flag_stub : 1; > + unsigned int flag_target_stub : 1; > + unsigned int flag_static : 1; > + unsigned int flag_prototyped : 1; > + unsigned int flag_incomplete : 1; > + unsigned int flag_varargs : 1; > + unsigned int flag_vector : 1; > + unsigned int flag_stub_supported : 1; > + unsigned int flag_nottext : 1; > + unsigned int flag_fixed_instance : 1; Hi Tom, This is quite an old change but while debugging gdb I noticed that vector types do have a strange bit set into their instance_flags and this seems to go back to this patch. The snippet above introduces the flag_nottext as a bitfield member of the type struct while gdbtypes.c:make_vector_type still sets that bit into the instance_flags. The nottext flag is set for the element types of vectors (gdbtypes.c:make_vector_type) and for the builtin_int8/builtin_int8 types. The flag is read from the c-valprint.c:c_textual_element_type function that determines whether arrays of chars should be printed as strings or not. So, I guess that prior to this patch char vectors were printed just like integer vectors - plain data. One approach to restore that functionality would be to move the nottext flag into to the instance_flags of the type. Attached is an untested patch of what I have in mind. Comments are welcome. This also renders my previous attempt to fix the printing of character vectors (http://sourceware.org/ml/gdb-patches/2010-06/msg00573.html) obsolete. Regards Ken Werner --Boundary-00=_H8LkM81fpH/iBjS Content-Type: text/x-patch; charset="UTF-8"; name="type_nottext.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="type_nottext.patch" Content-length: 4791 Index: gdb/c-valprint.c =================================================================== RCS file: /cvs/src/src/gdb/c-valprint.c,v retrieving revision 1.72 diff -p -u -r1.72 c-valprint.c --- gdb/c-valprint.c 14 Jul 2010 14:13:54 -0000 1.72 +++ gdb/c-valprint.c 15 Sep 2010 12:22:49 -0000 @@ -180,8 +180,7 @@ c_val_print (struct type *type, const gd /* Print arrays of textual chars with a string syntax, as long as the entire array is valid. */ - if (!TYPE_VECTOR (type) - && c_textual_element_type (unresolved_elttype, options->format) + if (c_textual_element_type (unresolved_elttype, options->format) && value_bits_valid (original_value, TARGET_CHAR_BIT * embedded_offset, TARGET_CHAR_BIT * TYPE_LENGTH (type))) Index: gdb/gdbtypes.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.c,v retrieving revision 1.199 diff -p -u -r1.199 gdbtypes.c --- gdb/gdbtypes.c 8 Sep 2010 17:17:42 -0000 1.199 +++ gdb/gdbtypes.c 15 Sep 2010 12:22:49 -0000 @@ -942,7 +942,7 @@ make_vector_type (struct type *array_typ elt_type = TYPE_TARGET_TYPE (inner_array); if (TYPE_CODE (elt_type) == TYPE_CODE_INT) { - flags = TYPE_INSTANCE_FLAGS (elt_type) | TYPE_FLAG_NOTTEXT; + flags = TYPE_INSTANCE_FLAGS (elt_type) | TYPE_INSTANCE_FLAG_NOTTEXT; elt_type = make_qualified_type (elt_type, flags, NULL); TYPE_TARGET_TYPE (inner_array) = elt_type; } @@ -1801,8 +1801,6 @@ init_type (enum type_code code, int leng TYPE_VECTOR (type) = 1; if (flags & TYPE_FLAG_STUB_SUPPORTED) TYPE_STUB_SUPPORTED (type) = 1; - if (flags & TYPE_FLAG_NOTTEXT) - TYPE_NOTTEXT (type) = 1; if (flags & TYPE_FLAG_FIXED_INSTANCE) TYPE_FIXED_INSTANCE (type) = 1; @@ -3490,8 +3488,10 @@ gdbtypes_post_init (struct gdbarch *gdba = arch_integer_type (gdbarch, 128, 0, "int128_t"); builtin_type->builtin_uint128 = arch_integer_type (gdbarch, 128, 1, "uint128_t"); - TYPE_NOTTEXT (builtin_type->builtin_int8) = 1; - TYPE_NOTTEXT (builtin_type->builtin_uint8) = 1; + TYPE_INSTANCE_FLAGS (builtin_type->builtin_int8) |= + TYPE_INSTANCE_FLAG_NOTTEXT; + TYPE_INSTANCE_FLAGS (builtin_type->builtin_uint8) |= + TYPE_INSTANCE_FLAG_NOTTEXT; /* Wide character types. */ builtin_type->builtin_char16 Index: gdb/gdbtypes.h =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.h,v retrieving revision 1.134 diff -p -u -r1.134 gdbtypes.h --- gdb/gdbtypes.h 28 Jul 2010 16:23:58 -0000 1.134 +++ gdb/gdbtypes.h 15 Sep 2010 12:22:49 -0000 @@ -159,18 +159,17 @@ enum type_code enum type_flag_value { - TYPE_FLAG_UNSIGNED = (1 << 6), - TYPE_FLAG_NOSIGN = (1 << 7), - TYPE_FLAG_STUB = (1 << 8), - TYPE_FLAG_TARGET_STUB = (1 << 9), - TYPE_FLAG_STATIC = (1 << 10), - TYPE_FLAG_PROTOTYPED = (1 << 11), - TYPE_FLAG_INCOMPLETE = (1 << 12), - TYPE_FLAG_VARARGS = (1 << 13), - TYPE_FLAG_VECTOR = (1 << 14), - TYPE_FLAG_FIXED_INSTANCE = (1 << 15), - TYPE_FLAG_STUB_SUPPORTED = (1 << 16), - TYPE_FLAG_NOTTEXT = (1 << 17), + TYPE_FLAG_UNSIGNED = (1 << 7), + TYPE_FLAG_NOSIGN = (1 << 8), + TYPE_FLAG_STUB = (1 << 9), + TYPE_FLAG_TARGET_STUB = (1 << 10), + TYPE_FLAG_STATIC = (1 << 11), + TYPE_FLAG_PROTOTYPED = (1 << 12), + TYPE_FLAG_INCOMPLETE = (1 << 13), + TYPE_FLAG_VARARGS = (1 << 14), + TYPE_FLAG_VECTOR = (1 << 15), + TYPE_FLAG_FIXED_INSTANCE = (1 << 16), + TYPE_FLAG_STUB_SUPPORTED = (1 << 17), /* Used for error-checking. */ TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED @@ -186,7 +185,8 @@ enum type_instance_flag_value TYPE_INSTANCE_FLAG_CODE_SPACE = (1 << 2), TYPE_INSTANCE_FLAG_DATA_SPACE = (1 << 3), TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 = (1 << 4), - TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2 = (1 << 5) + TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2 = (1 << 5), + TYPE_INSTANCE_FLAG_NOTTEXT = (1 << 6), }; /* Unsigned integer type. If this is not set for a TYPE_CODE_INT, the @@ -269,7 +269,7 @@ enum type_instance_flag_value /* Not textual. By default, GDB treats all single byte integers as characters (or elements of strings) unless this flag is set. */ -#define TYPE_NOTTEXT(t) (TYPE_MAIN_TYPE (t)->flag_nottext) +#define TYPE_NOTTEXT(t) (TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_NOTTEXT) /* Type owner. If TYPE_OBJFILE_OWNED is true, the type is owned by the objfile retrieved as TYPE_OBJFILE. Otherweise, the type is @@ -388,7 +388,6 @@ struct main_type unsigned int flag_varargs : 1; unsigned int flag_vector : 1; unsigned int flag_stub_supported : 1; - unsigned int flag_nottext : 1; unsigned int flag_fixed_instance : 1; unsigned int flag_objfile_owned : 1; /* True if this type was declared with "class" rather than --Boundary-00=_H8LkM81fpH/iBjS--