This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: RFA: More additions to "maint print type"
- From: Jim Blandy <jimb at zwingli dot cygnus dot com>
- To: fnf at redhat dot com
- Cc: gdb-patches at sources dot redhat dot com
- Date: 11 Dec 2001 16:24:10 -0500
- Subject: Re: RFA: More additions to "maint print type"
- References: <200112102120.fBALK7W09630@fishpond.ninemoons.com>
Approved.
Fred Fish <fnf@ns1.ninemoons.com> writes:
>
> Here are some more changes to the "maint print type" command to bring
> it up to date with the current internal type representation. Also
> note that we should explicitly print the tagname member even when the
> value to be printed is '<NULL>'. After all, we print NULL for other
> structure members.
>
> -Fred
>
> gdb/ChangeLog:
>
> 2001-12-10 Fred Fish <fnf@redhat.com>
>
> * gdbtypes.c (print_bound_type): New function.
> (recursive_dump_type): Print type struct code values
> TYPE_CODE_BITSTRING, TYPE_CODE_COMPLEX, TYPE_CODE_TEMPLATE,
> and TYPE_CODE_TEMPLATE_ARG.
> (recursive_dump_type): Print type struct members
> upper_bound_type, lower_bound_type, cv_type, and as_type.
> Also always print the tagname member, even when it is NULL.
>
> testsuite/ChangeLog:
>
> 2001-12-10 Fred Fish <fnf@redhat.com>
>
> * gdb.base/maint.exp: Update to match changes in type dumping code.
>
>
> Index: gdbtypes.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtypes.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 gdbtypes.c
> --- gdbtypes.c 2001/12/10 06:23:21 1.32
> +++ gdbtypes.c 2001/12/10 21:14:30
> @@ -2711,6 +2711,35 @@ print_cplus_stuff (struct type *type, in
> }
> }
>
> +static void
> +print_bound_type (int bt)
> +{
> + switch (bt)
> + {
> + case BOUND_CANNOT_BE_DETERMINED:
> + printf_filtered ("(BOUND_CANNOT_BE_DETERMINED)");
> + break;
> + case BOUND_BY_REF_ON_STACK:
> + printf_filtered ("(BOUND_BY_REF_ON_STACK)");
> + break;
> + case BOUND_BY_VALUE_ON_STACK:
> + printf_filtered ("(BOUND_BY_VALUE_ON_STACK)");
> + break;
> + case BOUND_BY_REF_IN_REG:
> + printf_filtered ("(BOUND_BY_REF_IN_REG)");
> + break;
> + case BOUND_BY_VALUE_IN_REG:
> + printf_filtered ("(BOUND_BY_VALUE_IN_REG)");
> + break;
> + case BOUND_SIMPLE:
> + printf_filtered ("(BOUND_SIMPLE)");
> + break;
> + default:
> + printf_filtered ("(unknown bound type)");
> + break;
> + }
> +}
> +
> static struct obstack dont_print_type_obstack;
>
> void
> @@ -2751,13 +2780,10 @@ recursive_dump_type (struct type *type,
> TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
> gdb_print_host_address (TYPE_NAME (type), gdb_stdout);
> printf_filtered (")\n");
> - if (TYPE_TAG_NAME (type) != NULL)
> - {
> - printfi_filtered (spaces, "tagname '%s' (",
> - TYPE_TAG_NAME (type));
> - gdb_print_host_address (TYPE_TAG_NAME (type), gdb_stdout);
> - printf_filtered (")\n");
> - }
> + printfi_filtered (spaces, "tagname '%s' (",
> + TYPE_TAG_NAME (type) ? TYPE_TAG_NAME (type) : "<NULL>");
> + gdb_print_host_address (TYPE_TAG_NAME (type), gdb_stdout);
> + printf_filtered (")\n");
> printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
> switch (TYPE_CODE (type))
> {
> @@ -2800,6 +2826,9 @@ recursive_dump_type (struct type *type,
> case TYPE_CODE_STRING:
> printf_filtered ("(TYPE_CODE_STRING)");
> break;
> + case TYPE_CODE_BITSTRING:
> + printf_filtered ("(TYPE_CODE_BITSTRING)");
> + break;
> case TYPE_CODE_ERROR:
> printf_filtered ("(TYPE_CODE_ERROR)");
> break;
> @@ -2818,15 +2847,32 @@ recursive_dump_type (struct type *type,
> case TYPE_CODE_BOOL:
> printf_filtered ("(TYPE_CODE_BOOL)");
> break;
> + case TYPE_CODE_COMPLEX:
> + printf_filtered ("(TYPE_CODE_COMPLEX)");
> + break;
> case TYPE_CODE_TYPEDEF:
> printf_filtered ("(TYPE_CODE_TYPEDEF)");
> break;
> + case TYPE_CODE_TEMPLATE:
> + printf_filtered ("(TYPE_CODE_TEMPLATE)");
> + break;
> + case TYPE_CODE_TEMPLATE_ARG:
> + printf_filtered ("(TYPE_CODE_TEMPLATE_ARG)");
> + break;
> default:
> printf_filtered ("(UNKNOWN TYPE CODE)");
> break;
> }
> puts_filtered ("\n");
> printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
> + printfi_filtered (spaces, "upper_bound_type 0x%x ",
> + TYPE_ARRAY_UPPER_BOUND_TYPE (type));
> + print_bound_type (TYPE_ARRAY_UPPER_BOUND_TYPE (type));
> + puts_filtered ("\n");
> + printfi_filtered (spaces, "lower_bound_type 0x%x ",
> + TYPE_ARRAY_LOWER_BOUND_TYPE (type));
> + print_bound_type (TYPE_ARRAY_LOWER_BOUND_TYPE (type));
> + puts_filtered ("\n");
> printfi_filtered (spaces, "objfile ");
> gdb_print_host_address (TYPE_OBJFILE (type), gdb_stdout);
> printf_filtered ("\n");
> @@ -2842,6 +2888,12 @@ recursive_dump_type (struct type *type,
> printf_filtered ("\n");
> printfi_filtered (spaces, "reference_type ");
> gdb_print_host_address (TYPE_REFERENCE_TYPE (type), gdb_stdout);
> + printf_filtered ("\n");
> + printfi_filtered (spaces, "cv_type ");
> + gdb_print_host_address (TYPE_CV_TYPE (type), gdb_stdout);
> + printf_filtered ("\n");
> + printfi_filtered (spaces, "as_type ");
> + gdb_print_host_address (TYPE_AS_TYPE (type), gdb_stdout);
> printf_filtered ("\n");
> printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
> if (TYPE_UNSIGNED (type))
> Index: testsuite/gdb.base/maint.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/maint.exp,v
> retrieving revision 1.7
> diff -u -p -r1.7 maint.exp
> --- maint.exp 2001/10/13 08:36:32 1.7
> +++ maint.exp 2001/12/10 21:15:07
> @@ -345,7 +345,7 @@ set timeout $old_timeout
>
> send_gdb "maint print type argc\n"
> gdb_expect {
> - -re "type node $hex\r\nname .int. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\nflags $hex\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
> + -re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nupper_bound_type $hex \\(BOUND_SIMPLE\\)\r\nlower_bound_type $hex \\(BOUND_SIMPLE\\)\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ncv_type $hex\r\nas_type $hex\r\nflags $hex\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
> { pass "maint print type" }
> -re ".*$gdb_prompt $" { fail "maint print type" }
> timeout { fail "(timeout) maint print type" }
>
>