2002-06-04 23:28:49 +08:00
|
|
|
|
/* Support for printing Ada types for GDB, the GNU debugger.
|
2024-01-12 23:30:44 +08:00
|
|
|
|
Copyright (C) 1986-2024 Free Software Foundation, Inc.
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2007-08-24 02:08:50 +08:00
|
|
|
|
This file is part of GDB.
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2007-08-24 02:08:50 +08:00
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2007-08-24 02:08:50 +08:00
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2007-08-24 02:08:50 +08:00
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
2023-09-20 10:34:23 +08:00
|
|
|
|
#include "bfd.h"
|
2019-04-07 03:38:10 +08:00
|
|
|
|
#include "gdbtypes.h"
|
|
|
|
|
#include "value.h"
|
|
|
|
|
#include "c-lang.h"
|
|
|
|
|
#include "cli/cli-style.h"
|
2019-04-03 10:04:24 +08:00
|
|
|
|
#include "typeprint.h"
|
2019-04-07 03:38:10 +08:00
|
|
|
|
#include "target-float.h"
|
|
|
|
|
#include "ada-lang.h"
|
|
|
|
|
#include <ctype.h>
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
static int print_selected_record_field_types (struct type *, struct type *,
|
|
|
|
|
int, int,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *, int, int,
|
|
|
|
|
const struct type_print_options *);
|
2014-01-15 23:14:15 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
static int print_record_field_types (struct type *, struct type *,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *, int, int,
|
|
|
|
|
const struct type_print_options *);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
|
|
|
|
|
static char *name_buffer;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
static int name_buffer_len;
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* The (decoded) Ada name of TYPE. This value persists until the
|
|
|
|
|
next call. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
static char *
|
2004-06-02 17:55:36 +08:00
|
|
|
|
decoded_type_name (struct type *type)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
if (ada_type_name (type) == NULL)
|
|
|
|
|
return NULL;
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
* gdbtypes.h (struct main_type): Change type of name,tag_name,
and fields.name members from char * to const char *. All uses updated.
(struct cplus_struct_type): Change type of fn_fieldlists.name member
from char * to const char *. All uses updated.
(type_name_no_tag): Update.
(lookup_unsigned_typename, lookup_signed_typename): Update.
* gdbtypes.c (type_name_no_tag): Change result type
from char * to const char *. All callers updated.
(lookup_unsigned_typename, lookup_signed_typename): Change type of
name parameter from char * to const char *.
* symtab.h (struct cplus_specific): Change type of demangled_name
member from char * to const char *. All uses updated.
(struct general_symbol_info): Change type of name and
mangled_lang.demangled_name members from char * to const char *.
All uses updated.
(symbol_get_demangled_name, symbol_natural_name): Update.
(symbol_demangled_name, symbol_search_name): Update.
* symtab.c (symbol_get_demangled_name): Change result type
from char * to const char *. All callers updated.
(symbol_natural_name, symbol_demangled_name): Ditto.
(symbol_search_name): Ditto.
(completion_list_add_name): Change type of symname,sym_text,
text,word parameters from char * to const char *.
(completion_list_objc_symbol): Change type of sym_text,
text,word parameters from char * to const char *.
* ada-lang.c (find_struct_field): Change type of name parameter
from char * to const char *.
(encoded_ordered_before): Similarly for N0,N1 parameters.
(old_renaming_is_invisible): Similarly for function_name parameter.
(ada_type_name): Change result type from char * to const char *.
All callers updated.
* ada-lang.h (ada_type_name): Update.
* buildsym.c (hashname): Change type of name parameter
from char * to const char *.
* buildsym.h (hashname): Update.
* dbxread.c (end_psymtab): Change type of include_list parameter
from char ** to const char **.
* dwarf2read.c (determine_prefix): Change result type
from char * to const char *. All callers updated.
* f-lang.c (find_common_for_function): Change type of name, funcname
parameters from char * to const char *.
* f-lang.c (find_common_for_function): Update.
* f-valprint.c (list_all_visible_commons): Change type of funcname
parameters from char * to const char *.
* gdbarch.sh (static_transform_name): Change type of name parameter
and result from char * to const char *.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* i386-sol2-tdep.c (i386_sol2_static_transform_name): Change type
of name parameter from char * to const char *.
* jv-lang.c (java_primitive_type_from_name): Ditto.
(java_demangled_signature_length): Similarly for signature parameter.
(java_demangled_signature_copy): Ditto.
(java_demangle_type_signature): Ditto.
* jv-lang.h (java_primitive_type_from_name): Update.
(java_demangle_type_signature): Update.
* objc-lang.c (specialcmp): Change type of a,b parameters
from char * to const char *.
* p-lang.c (is_pascal_string_type): Change type of arrayname parameter
from char * to const char *. All callers updated.
* p-lang.h (is_pascal_string_type): Update.
* solib-frv.c (find_canonical_descriptor_in_load_object): Change type
of name parameter from char * to const char *.
* sparc-sol2-tdep.c (sparc_sol2_static_transform_name): Ditto.
* utils.c (fprintf_symbol_filtered): Ditto.
* defs.h (fprintf_symbol_filtered): Update.
* sparc-tdep.h (sparc_sol2_static_transform_name): Update.
* stabsread.h (end_psymtab): Update.
* stack.c (find_frame_funname): Change type of funname parameter
from char ** to const char **.
* stack.h (find_frame_funname): Update.
* typeprint.c (type_print): Change type of varstring parameter
from char * to const char *.
* value.h (type_print): Update.
* xcoffread.c (xcoff_start_psymtab): Change type of filename parameter
from char * to const char *. All callers updated.
(xcoff_end_psymtab): Change type of include_list parameter
from char ** to const char **. All callers updated.
(swap_sym): Similarly for name parameter. All callers updated.
* coffread.c (patch_type): Add (char*) cast to xfree parameter.
Use xstrdup.
(process_coff_symbol): Use xstrdup.
* stabsread.c (stabs_method_name_from_physname): Renamed from
update_method_name_from_physname. Change result type from void
to char *. All callers updated.
(read_member_functions): In has_destructor case, store name in objfile
obstack instead of malloc space. In !has_stub case, fix mem leak.
2012-02-07 12:48:23 +08:00
|
|
|
|
const char *raw_name = ada_type_name (type);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
char *s, *q;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
if (name_buffer == NULL || name_buffer_len <= strlen (raw_name))
|
|
|
|
|
{
|
|
|
|
|
name_buffer_len = 16 + 2 * strlen (raw_name);
|
2015-09-26 02:08:06 +08:00
|
|
|
|
name_buffer = (char *) xrealloc (name_buffer, name_buffer_len);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
strcpy (name_buffer, raw_name);
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
s = (char *) strstr (name_buffer, "___");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
if (s != NULL)
|
|
|
|
|
*s = '\0';
|
|
|
|
|
|
|
|
|
|
s = name_buffer + strlen (name_buffer) - 1;
|
|
|
|
|
while (s > name_buffer && (s[0] != '_' || s[-1] != '_'))
|
|
|
|
|
s -= 1;
|
|
|
|
|
|
|
|
|
|
if (s == name_buffer)
|
|
|
|
|
return name_buffer;
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (!islower (s[1]))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
for (s = q = name_buffer; *s != '\0'; q += 1)
|
|
|
|
|
{
|
|
|
|
|
if (s[0] == '_' && s[1] == '_')
|
|
|
|
|
{
|
2002-08-19 02:11:12 +08:00
|
|
|
|
*q = '.';
|
|
|
|
|
s += 2;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2002-08-19 02:11:12 +08:00
|
|
|
|
*q = *s;
|
|
|
|
|
s += 1;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*q = '\0';
|
|
|
|
|
return name_buffer;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-16 00:00:05 +08:00
|
|
|
|
/* Return nonzero if TYPE is a subrange type, and its bounds
|
|
|
|
|
are identical to the bounds of its subtype. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
type_is_full_subrange_of_target_type (struct type *type)
|
|
|
|
|
{
|
|
|
|
|
struct type *subtype;
|
|
|
|
|
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (type->code () != TYPE_CODE_RANGE)
|
2014-01-16 00:00:05 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
2022-07-31 10:43:54 +08:00
|
|
|
|
subtype = type->target_type ();
|
2014-01-16 00:00:05 +08:00
|
|
|
|
if (subtype == NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
|
2014-08-15 06:57:00 +08:00
|
|
|
|
if (is_dynamic_type (type))
|
|
|
|
|
return 0;
|
|
|
|
|
|
2014-01-16 00:00:05 +08:00
|
|
|
|
if (ada_discrete_type_low_bound (type)
|
|
|
|
|
!= ada_discrete_type_low_bound (subtype))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
if (ada_discrete_type_high_bound (type)
|
|
|
|
|
!= ada_discrete_type_high_bound (subtype))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-04 04:43:57 +08:00
|
|
|
|
/* Print TYPE on STREAM, preferably as a range if BOUNDS_PREFERRED_P
|
2014-01-16 00:00:05 +08:00
|
|
|
|
is nonzero. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2014-01-16 00:00:05 +08:00
|
|
|
|
print_range (struct type *type, struct ui_file *stream,
|
2023-06-04 04:43:57 +08:00
|
|
|
|
int bounds_preferred_p)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2023-06-04 04:43:57 +08:00
|
|
|
|
if (!bounds_preferred_p)
|
2014-01-16 00:00:05 +08:00
|
|
|
|
{
|
|
|
|
|
/* Try stripping all TYPE_CODE_RANGE layers whose bounds
|
|
|
|
|
are identical to the bounds of their subtype. When
|
|
|
|
|
the bounds of both types match, it can allow us to
|
|
|
|
|
print a range using the name of its base type, which
|
|
|
|
|
is easier to read. For instance, we would print...
|
|
|
|
|
|
|
|
|
|
array (character) of ...
|
|
|
|
|
|
|
|
|
|
... instead of...
|
|
|
|
|
|
|
|
|
|
array ('["00"]' .. '["ff"]') of ... */
|
|
|
|
|
while (type_is_full_subrange_of_target_type (type))
|
2022-07-31 10:43:54 +08:00
|
|
|
|
type = type->target_type ();
|
2014-01-16 00:00:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-15 01:46:38 +08:00
|
|
|
|
switch (type->code ())
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
case TYPE_CODE_RANGE:
|
|
|
|
|
case TYPE_CODE_ENUM:
|
* dwarf2read.c (struct attribute): Increase sizes of unsnd and snd
fields to allow larger integer sizes.
(read_subrange_type): Increase size of bound values.
Add logic to determine signedness based on base-type size, signedness.
(read_attribute_value): Change format for bad byte size in message.
(read_8_bytes): Increase size of result type.
(dump_die_shallow): Change format for value.
(dwarf2_get_attr_constant_value): Increase size of return type.
Correct comment.
* gdbtypes.c (create_range_type): Change API to increase size of
bounds. struct field -> union field.
Always take signedness from base type.
(check_typedef): Use new API for TYPE_LOW_BOUND, TYPE_HIGH_BOUND.
(recursive_dump_type, copy_type_recursive): Adjust to new
representation of range types.
* gdbtypes.h (fields_or_bounds): New union containing struct field and
new struct range_bounds, used for range types.
(TYPE_RANGE_DATA): New macro to access range_bounds member.
(TYPE_LOW_BOUND, TYPE_HIGH_BOUND): Represent with new TYPE_RANGE_DATA.
(TYPE_LOW_BOUND_UNDEFINED, TYPE_HIGH_BOUND_UNDEFINED): New macros,
taking over the job of TYPE_FIELD_ARTIFICIAL for range bounds.
(SET_TYPE_LOW_BOUND, SET_TYPE_HIGH_BOUND, SET_TYPE_LOW_BOUND_DEFINED)
(SET_TYPE_HIGH_BOUND_DEFINED): New macros.
(TYPE_FIELDS, TYPE_BASECLASS, TYPE_BASECLASS_NAME, TYPE_FIELD)
(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED)
(TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED, TYPE_ARRAY_UPPER_BOUND_VALUE)
(TYPE_ARRAY_LOWER_BOUND_VALUE): Adjust to new representation.
(create_range_type): Adjust API.
* ada-lang.c (ada_modulus): Use new extended bound values.
(discrete_type_low_bound): Rename to...
(ada_discrete_type_low_bound): ... and make external.
(discrete_type_high_bound): Rename to...
(ada_discrete_type_high_bound): ... and make external.
(ada_value_slice_from_ptr, ada_array_bound_from_type)
(ada_evaluate_subexp, to_fixed_range_type):
Use ada_discrete_type_low_bound, ada_discrete_type_high_bound.
* ada-typeprint.c (print_range): Use ada_discrete_type_low_bound,
ada_discrete_type_high_bound. Don't look at field count, which
is no longer meaningful. Print bounds whenever argument is a range
or enumeration.
* ada-lang.h (ada_discrete_type_low_bound,ada_discrete_type_high_bound):
Declare.
* varobj.c (c_describe_child): Adjust to render larger values.
* mdebugread.c (parse_type): Use proper abstractions for range types:
TYPE_RANGE_DATA, SET_TYPE_LOW_BOUND_DEFINED,
SET_TYPE_HIGH_BOUND_DEFINED.
* p-typeprint.c (pascal_type_print_varspec_prefix): Use larger format
for bounds.
2009-12-14 14:19:13 +08:00
|
|
|
|
{
|
2014-08-19 01:04:18 +08:00
|
|
|
|
LONGEST lo = 0, hi = 0; /* init for gcc -Wall */
|
Split TRY_CATCH into TRY + CATCH
This patch splits the TRY_CATCH macro into three, so that we go from
this:
~~~
volatile gdb_exception ex;
TRY_CATCH (ex, RETURN_MASK_ERROR)
{
}
if (ex.reason < 0)
{
}
~~~
to this:
~~~
TRY
{
}
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
~~~
Thus, we'll be getting rid of the local volatile exception object, and
declaring the caught exception in the catch block.
This allows reimplementing TRY/CATCH in terms of C++ exceptions when
building in C++ mode, while still allowing to build GDB in C mode
(using setjmp/longjmp), as a transition step.
TBC, after this patch, is it _not_ valid to have code between the TRY
and the CATCH blocks, like:
TRY
{
}
// some code here.
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
Just like it isn't valid to do that with C++'s native try/catch.
By switching to creating the exception object inside the CATCH block
scope, we can get rid of all the explicitly allocated volatile
exception objects all over the tree, and map the CATCH block more
directly to C++'s catch blocks.
The majority of the TRY_CATCH -> TRY+CATCH+END_CATCH conversion was
done with a script, rerun from scratch at every rebase, no manual
editing involved. After the mechanical conversion, a few places
needed manual intervention, to fix preexisting cases where we were
using the exception object outside of the TRY_CATCH block, and cases
where we were using "else" after a 'if (ex.reason) < 0)' [a CATCH
after this patch]. The result was folded into this patch so that GDB
still builds at each incremental step.
END_CATCH is necessary for two reasons:
First, because we name the exception object in the CATCH block, which
requires creating a scope, which in turn must be closed somewhere.
Declaring the exception variable in the initializer field of a for
block, like:
#define CATCH(EXCEPTION, mask) \
for (struct gdb_exception EXCEPTION; \
exceptions_state_mc_catch (&EXCEPTION, MASK); \
EXCEPTION = exception_none)
would avoid needing END_CATCH, but alas, in C mode, we build with C90,
which doesn't allow mixed declarations and code.
Second, because when TRY/CATCH are wired to real C++ try/catch, as
long as we need to handle cleanup chains, even if there's no CATCH
block that wants to catch the exception, we need for stop at every
frame in the unwind chain and run cleanups, then rethrow. That will
be done in END_CATCH.
After we require C++, we'll still need TRY/CATCH/END_CATCH until
cleanups are completely phased out -- TRY/CATCH in C++ mode will
save/restore the current cleanup chain, like in C mode, and END_CATCH
catches otherwise uncaugh exceptions, runs cleanups and rethrows, so
that C++ cleanups and exceptions can coexist.
IMO, this still makes the TRY/CATCH code look a bit more like a
newcomer would expect, so IMO worth it even if we weren't considering
C++.
gdb/ChangeLog.
2015-03-07 Pedro Alves <palves@redhat.com>
* common/common-exceptions.c (struct catcher) <exception>: No
longer a pointer to volatile exception. Now an exception value.
<mask>: Delete field.
(exceptions_state_mc_init): Remove all parameters. Adjust.
(exceptions_state_mc): No longer pop the catcher here.
(exceptions_state_mc_catch): New function.
(throw_exception): Adjust.
* common/common-exceptions.h (exceptions_state_mc_init): Remove
all parameters.
(exceptions_state_mc_catch): Declare.
(TRY_CATCH): Rename to ...
(TRY): ... this. Remove EXCEPTION and MASK parameters.
(CATCH, END_CATCH): New.
All callers adjusted.
gdb/gdbserver/ChangeLog:
2015-03-07 Pedro Alves <palves@redhat.com>
Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH
instead.
2015-03-07 23:14:14 +08:00
|
|
|
|
int got_error = 0;
|
2014-01-15 22:27:09 +08:00
|
|
|
|
|
2019-04-04 06:02:42 +08:00
|
|
|
|
try
|
2014-08-15 06:57:00 +08:00
|
|
|
|
{
|
|
|
|
|
lo = ada_discrete_type_low_bound (type);
|
|
|
|
|
hi = ada_discrete_type_high_bound (type);
|
|
|
|
|
}
|
2019-04-04 05:59:07 +08:00
|
|
|
|
catch (const gdb_exception_error &e)
|
2014-08-15 06:57:00 +08:00
|
|
|
|
{
|
|
|
|
|
/* This can happen when the range is dynamic. Sometimes,
|
|
|
|
|
resolving dynamic property values requires us to have
|
|
|
|
|
access to an actual object, which is not available
|
|
|
|
|
when the user is using the "ptype" command on a type.
|
|
|
|
|
Print the range as an unbounded range. */
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "<>");
|
Split TRY_CATCH into TRY + CATCH
This patch splits the TRY_CATCH macro into three, so that we go from
this:
~~~
volatile gdb_exception ex;
TRY_CATCH (ex, RETURN_MASK_ERROR)
{
}
if (ex.reason < 0)
{
}
~~~
to this:
~~~
TRY
{
}
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
~~~
Thus, we'll be getting rid of the local volatile exception object, and
declaring the caught exception in the catch block.
This allows reimplementing TRY/CATCH in terms of C++ exceptions when
building in C++ mode, while still allowing to build GDB in C mode
(using setjmp/longjmp), as a transition step.
TBC, after this patch, is it _not_ valid to have code between the TRY
and the CATCH blocks, like:
TRY
{
}
// some code here.
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
Just like it isn't valid to do that with C++'s native try/catch.
By switching to creating the exception object inside the CATCH block
scope, we can get rid of all the explicitly allocated volatile
exception objects all over the tree, and map the CATCH block more
directly to C++'s catch blocks.
The majority of the TRY_CATCH -> TRY+CATCH+END_CATCH conversion was
done with a script, rerun from scratch at every rebase, no manual
editing involved. After the mechanical conversion, a few places
needed manual intervention, to fix preexisting cases where we were
using the exception object outside of the TRY_CATCH block, and cases
where we were using "else" after a 'if (ex.reason) < 0)' [a CATCH
after this patch]. The result was folded into this patch so that GDB
still builds at each incremental step.
END_CATCH is necessary for two reasons:
First, because we name the exception object in the CATCH block, which
requires creating a scope, which in turn must be closed somewhere.
Declaring the exception variable in the initializer field of a for
block, like:
#define CATCH(EXCEPTION, mask) \
for (struct gdb_exception EXCEPTION; \
exceptions_state_mc_catch (&EXCEPTION, MASK); \
EXCEPTION = exception_none)
would avoid needing END_CATCH, but alas, in C mode, we build with C90,
which doesn't allow mixed declarations and code.
Second, because when TRY/CATCH are wired to real C++ try/catch, as
long as we need to handle cleanup chains, even if there's no CATCH
block that wants to catch the exception, we need for stop at every
frame in the unwind chain and run cleanups, then rethrow. That will
be done in END_CATCH.
After we require C++, we'll still need TRY/CATCH/END_CATCH until
cleanups are completely phased out -- TRY/CATCH in C++ mode will
save/restore the current cleanup chain, like in C mode, and END_CATCH
catches otherwise uncaugh exceptions, runs cleanups and rethrows, so
that C++ cleanups and exceptions can coexist.
IMO, this still makes the TRY/CATCH code look a bit more like a
newcomer would expect, so IMO worth it even if we weren't considering
C++.
gdb/ChangeLog.
2015-03-07 Pedro Alves <palves@redhat.com>
* common/common-exceptions.c (struct catcher) <exception>: No
longer a pointer to volatile exception. Now an exception value.
<mask>: Delete field.
(exceptions_state_mc_init): Remove all parameters. Adjust.
(exceptions_state_mc): No longer pop the catcher here.
(exceptions_state_mc_catch): New function.
(throw_exception): Adjust.
* common/common-exceptions.h (exceptions_state_mc_init): Remove
all parameters.
(exceptions_state_mc_catch): Declare.
(TRY_CATCH): Rename to ...
(TRY): ... this. Remove EXCEPTION and MASK parameters.
(CATCH, END_CATCH): New.
All callers adjusted.
gdb/gdbserver/ChangeLog:
2015-03-07 Pedro Alves <palves@redhat.com>
Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH
instead.
2015-03-07 23:14:14 +08:00
|
|
|
|
got_error = 1;
|
2014-08-15 06:57:00 +08:00
|
|
|
|
}
|
Split TRY_CATCH into TRY + CATCH
This patch splits the TRY_CATCH macro into three, so that we go from
this:
~~~
volatile gdb_exception ex;
TRY_CATCH (ex, RETURN_MASK_ERROR)
{
}
if (ex.reason < 0)
{
}
~~~
to this:
~~~
TRY
{
}
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
~~~
Thus, we'll be getting rid of the local volatile exception object, and
declaring the caught exception in the catch block.
This allows reimplementing TRY/CATCH in terms of C++ exceptions when
building in C++ mode, while still allowing to build GDB in C mode
(using setjmp/longjmp), as a transition step.
TBC, after this patch, is it _not_ valid to have code between the TRY
and the CATCH blocks, like:
TRY
{
}
// some code here.
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
Just like it isn't valid to do that with C++'s native try/catch.
By switching to creating the exception object inside the CATCH block
scope, we can get rid of all the explicitly allocated volatile
exception objects all over the tree, and map the CATCH block more
directly to C++'s catch blocks.
The majority of the TRY_CATCH -> TRY+CATCH+END_CATCH conversion was
done with a script, rerun from scratch at every rebase, no manual
editing involved. After the mechanical conversion, a few places
needed manual intervention, to fix preexisting cases where we were
using the exception object outside of the TRY_CATCH block, and cases
where we were using "else" after a 'if (ex.reason) < 0)' [a CATCH
after this patch]. The result was folded into this patch so that GDB
still builds at each incremental step.
END_CATCH is necessary for two reasons:
First, because we name the exception object in the CATCH block, which
requires creating a scope, which in turn must be closed somewhere.
Declaring the exception variable in the initializer field of a for
block, like:
#define CATCH(EXCEPTION, mask) \
for (struct gdb_exception EXCEPTION; \
exceptions_state_mc_catch (&EXCEPTION, MASK); \
EXCEPTION = exception_none)
would avoid needing END_CATCH, but alas, in C mode, we build with C90,
which doesn't allow mixed declarations and code.
Second, because when TRY/CATCH are wired to real C++ try/catch, as
long as we need to handle cleanup chains, even if there's no CATCH
block that wants to catch the exception, we need for stop at every
frame in the unwind chain and run cleanups, then rethrow. That will
be done in END_CATCH.
After we require C++, we'll still need TRY/CATCH/END_CATCH until
cleanups are completely phased out -- TRY/CATCH in C++ mode will
save/restore the current cleanup chain, like in C mode, and END_CATCH
catches otherwise uncaugh exceptions, runs cleanups and rethrows, so
that C++ cleanups and exceptions can coexist.
IMO, this still makes the TRY/CATCH code look a bit more like a
newcomer would expect, so IMO worth it even if we weren't considering
C++.
gdb/ChangeLog.
2015-03-07 Pedro Alves <palves@redhat.com>
* common/common-exceptions.c (struct catcher) <exception>: No
longer a pointer to volatile exception. Now an exception value.
<mask>: Delete field.
(exceptions_state_mc_init): Remove all parameters. Adjust.
(exceptions_state_mc): No longer pop the catcher here.
(exceptions_state_mc_catch): New function.
(throw_exception): Adjust.
* common/common-exceptions.h (exceptions_state_mc_init): Remove
all parameters.
(exceptions_state_mc_catch): Declare.
(TRY_CATCH): Rename to ...
(TRY): ... this. Remove EXCEPTION and MASK parameters.
(CATCH, END_CATCH): New.
All callers adjusted.
gdb/gdbserver/ChangeLog:
2015-03-07 Pedro Alves <palves@redhat.com>
Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH
instead.
2015-03-07 23:14:14 +08:00
|
|
|
|
|
|
|
|
|
if (!got_error)
|
2014-08-15 06:57:00 +08:00
|
|
|
|
{
|
(Ada) slightly incorrect bounds for type of array indexed by enum
Consider the following code:
type Enumerated is (Enum_A, Enum_B, Enum_C, Enum_Last);
type Table is array (Enumerated) of Integer;
-- Declare a variable of type Table to make sure the compiler
-- does emit the debugging information for that type.
V : Table := (others => 1);
Trying to print the type description of type Table, or of variable V
yields:
(gdb) ptype v
type = array (0 .. 3) of integer
(gdb) ptype example.table
type = array (0 .. 3) of integer
The compiler generates an XA type for the bounds...
<1><cf6>: Abbrev Number: 13 (DW_TAG_structure_type)
<cf7> DW_AT_name : example__table___XA
... whose member is described as being as:
<2><cfe>: Abbrev Number: 14 (DW_TAG_member)
<cff> DW_AT_name : example__enumerated
<d05> DW_AT_type : <0xc69>
This leads us to DIE 0xc69, which is our enumeration type:
<2><c69>: Abbrev Number: 4 (DW_TAG_enumeration_type)
<c6a> DW_AT_name : example__enumerated
Normally, for arrays, we expect a range type, rather than an enumerated
type. However, for a situation like this, where the range of the array
index is the full enumeration type, it seems like a waste to require
an extra range layer.
Instead, looking at print_range, we see that we print the bounds
of our range using the target type:
target_type = TYPE_TARGET_TYPE (type);
if (target_type == NULL)
target_type = type;
[...]
ada_print_scalar (target_type, lo, stream);
fprintf_filtered (stream, " .. ");
ada_print_scalar (target_type, hi, stream);
In this case, this causes us to use the enumerated type's subtype,
which is a plain integer type, hence the output we get. However,
there is no reason for using the target type, even in the TYPE_CODE_RANGE
situation. So this patch fixes the issue by simply printing the bounds
using the type being given, instead of its target type.
gdb/ChangeLog:
* ada-typeprint.c (print_range): Print the bounds using TYPE
rather than its TYPE_TARGET_TYPE.
A new test for this isn't necessary, as existing tests will demonstrate
this issue once a change in the compiler triggering the generation of
this type of debugging info gets pushed.
2018-09-09 05:49:10 +08:00
|
|
|
|
ada_print_scalar (type, lo, stream);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " .. ");
|
(Ada) slightly incorrect bounds for type of array indexed by enum
Consider the following code:
type Enumerated is (Enum_A, Enum_B, Enum_C, Enum_Last);
type Table is array (Enumerated) of Integer;
-- Declare a variable of type Table to make sure the compiler
-- does emit the debugging information for that type.
V : Table := (others => 1);
Trying to print the type description of type Table, or of variable V
yields:
(gdb) ptype v
type = array (0 .. 3) of integer
(gdb) ptype example.table
type = array (0 .. 3) of integer
The compiler generates an XA type for the bounds...
<1><cf6>: Abbrev Number: 13 (DW_TAG_structure_type)
<cf7> DW_AT_name : example__table___XA
... whose member is described as being as:
<2><cfe>: Abbrev Number: 14 (DW_TAG_member)
<cff> DW_AT_name : example__enumerated
<d05> DW_AT_type : <0xc69>
This leads us to DIE 0xc69, which is our enumeration type:
<2><c69>: Abbrev Number: 4 (DW_TAG_enumeration_type)
<c6a> DW_AT_name : example__enumerated
Normally, for arrays, we expect a range type, rather than an enumerated
type. However, for a situation like this, where the range of the array
index is the full enumeration type, it seems like a waste to require
an extra range layer.
Instead, looking at print_range, we see that we print the bounds
of our range using the target type:
target_type = TYPE_TARGET_TYPE (type);
if (target_type == NULL)
target_type = type;
[...]
ada_print_scalar (target_type, lo, stream);
fprintf_filtered (stream, " .. ");
ada_print_scalar (target_type, hi, stream);
In this case, this causes us to use the enumerated type's subtype,
which is a plain integer type, hence the output we get. However,
there is no reason for using the target type, even in the TYPE_CODE_RANGE
situation. So this patch fixes the issue by simply printing the bounds
using the type being given, instead of its target type.
gdb/ChangeLog:
* ada-typeprint.c (print_range): Print the bounds using TYPE
rather than its TYPE_TARGET_TYPE.
A new test for this isn't necessary, as existing tests will demonstrate
this issue once a change in the compiler triggering the generation of
this type of debugging info gets pushed.
2018-09-09 05:49:10 +08:00
|
|
|
|
ada_print_scalar (type, hi, stream);
|
2014-08-15 06:57:00 +08:00
|
|
|
|
}
|
* dwarf2read.c (struct attribute): Increase sizes of unsnd and snd
fields to allow larger integer sizes.
(read_subrange_type): Increase size of bound values.
Add logic to determine signedness based on base-type size, signedness.
(read_attribute_value): Change format for bad byte size in message.
(read_8_bytes): Increase size of result type.
(dump_die_shallow): Change format for value.
(dwarf2_get_attr_constant_value): Increase size of return type.
Correct comment.
* gdbtypes.c (create_range_type): Change API to increase size of
bounds. struct field -> union field.
Always take signedness from base type.
(check_typedef): Use new API for TYPE_LOW_BOUND, TYPE_HIGH_BOUND.
(recursive_dump_type, copy_type_recursive): Adjust to new
representation of range types.
* gdbtypes.h (fields_or_bounds): New union containing struct field and
new struct range_bounds, used for range types.
(TYPE_RANGE_DATA): New macro to access range_bounds member.
(TYPE_LOW_BOUND, TYPE_HIGH_BOUND): Represent with new TYPE_RANGE_DATA.
(TYPE_LOW_BOUND_UNDEFINED, TYPE_HIGH_BOUND_UNDEFINED): New macros,
taking over the job of TYPE_FIELD_ARTIFICIAL for range bounds.
(SET_TYPE_LOW_BOUND, SET_TYPE_HIGH_BOUND, SET_TYPE_LOW_BOUND_DEFINED)
(SET_TYPE_HIGH_BOUND_DEFINED): New macros.
(TYPE_FIELDS, TYPE_BASECLASS, TYPE_BASECLASS_NAME, TYPE_FIELD)
(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED)
(TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED, TYPE_ARRAY_UPPER_BOUND_VALUE)
(TYPE_ARRAY_LOWER_BOUND_VALUE): Adjust to new representation.
(create_range_type): Adjust API.
* ada-lang.c (ada_modulus): Use new extended bound values.
(discrete_type_low_bound): Rename to...
(ada_discrete_type_low_bound): ... and make external.
(discrete_type_high_bound): Rename to...
(ada_discrete_type_high_bound): ... and make external.
(ada_value_slice_from_ptr, ada_array_bound_from_type)
(ada_evaluate_subexp, to_fixed_range_type):
Use ada_discrete_type_low_bound, ada_discrete_type_high_bound.
* ada-typeprint.c (print_range): Use ada_discrete_type_low_bound,
ada_discrete_type_high_bound. Don't look at field count, which
is no longer meaningful. Print bounds whenever argument is a range
or enumeration.
* ada-lang.h (ada_discrete_type_low_bound,ada_discrete_type_high_bound):
Declare.
* varobj.c (c_describe_child): Adjust to render larger values.
* mdebugread.c (parse_type): Use proper abstractions for range types:
TYPE_RANGE_DATA, SET_TYPE_LOW_BOUND_DEFINED,
SET_TYPE_HIGH_BOUND_DEFINED.
* p-typeprint.c (pascal_type_print_varspec_prefix): Use larger format
for bounds.
2009-12-14 14:19:13 +08:00
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
break;
|
|
|
|
|
default:
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%.*s",
|
|
|
|
|
ada_name_prefix_len (type->name ()),
|
|
|
|
|
type->name ());
|
* dwarf2read.c (struct attribute): Increase sizes of unsnd and snd
fields to allow larger integer sizes.
(read_subrange_type): Increase size of bound values.
Add logic to determine signedness based on base-type size, signedness.
(read_attribute_value): Change format for bad byte size in message.
(read_8_bytes): Increase size of result type.
(dump_die_shallow): Change format for value.
(dwarf2_get_attr_constant_value): Increase size of return type.
Correct comment.
* gdbtypes.c (create_range_type): Change API to increase size of
bounds. struct field -> union field.
Always take signedness from base type.
(check_typedef): Use new API for TYPE_LOW_BOUND, TYPE_HIGH_BOUND.
(recursive_dump_type, copy_type_recursive): Adjust to new
representation of range types.
* gdbtypes.h (fields_or_bounds): New union containing struct field and
new struct range_bounds, used for range types.
(TYPE_RANGE_DATA): New macro to access range_bounds member.
(TYPE_LOW_BOUND, TYPE_HIGH_BOUND): Represent with new TYPE_RANGE_DATA.
(TYPE_LOW_BOUND_UNDEFINED, TYPE_HIGH_BOUND_UNDEFINED): New macros,
taking over the job of TYPE_FIELD_ARTIFICIAL for range bounds.
(SET_TYPE_LOW_BOUND, SET_TYPE_HIGH_BOUND, SET_TYPE_LOW_BOUND_DEFINED)
(SET_TYPE_HIGH_BOUND_DEFINED): New macros.
(TYPE_FIELDS, TYPE_BASECLASS, TYPE_BASECLASS_NAME, TYPE_FIELD)
(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED)
(TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED, TYPE_ARRAY_UPPER_BOUND_VALUE)
(TYPE_ARRAY_LOWER_BOUND_VALUE): Adjust to new representation.
(create_range_type): Adjust API.
* ada-lang.c (ada_modulus): Use new extended bound values.
(discrete_type_low_bound): Rename to...
(ada_discrete_type_low_bound): ... and make external.
(discrete_type_high_bound): Rename to...
(ada_discrete_type_high_bound): ... and make external.
(ada_value_slice_from_ptr, ada_array_bound_from_type)
(ada_evaluate_subexp, to_fixed_range_type):
Use ada_discrete_type_low_bound, ada_discrete_type_high_bound.
* ada-typeprint.c (print_range): Use ada_discrete_type_low_bound,
ada_discrete_type_high_bound. Don't look at field count, which
is no longer meaningful. Print bounds whenever argument is a range
or enumeration.
* ada-lang.h (ada_discrete_type_low_bound,ada_discrete_type_high_bound):
Declare.
* varobj.c (c_describe_child): Adjust to render larger values.
* mdebugread.c (parse_type): Use proper abstractions for range types:
TYPE_RANGE_DATA, SET_TYPE_LOW_BOUND_DEFINED,
SET_TYPE_HIGH_BOUND_DEFINED.
* p-typeprint.c (pascal_type_print_varspec_prefix): Use larger format
for bounds.
2009-12-14 14:19:13 +08:00
|
|
|
|
break;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print the number or discriminant bound at BOUNDS+*N on STREAM, and
|
2004-06-02 17:55:36 +08:00
|
|
|
|
set *N past the bound and its delimiter, if any. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2015-10-14 02:40:50 +08:00
|
|
|
|
print_range_bound (struct type *type, const char *bounds, int *n,
|
2002-08-19 02:11:12 +08:00
|
|
|
|
struct ui_file *stream)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
LONGEST B;
|
2010-05-19 03:23:37 +08:00
|
|
|
|
|
2002-06-04 23:28:49 +08:00
|
|
|
|
if (ada_scan_number (bounds, *n, &B, n))
|
|
|
|
|
{
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* STABS decodes all range types which bounds are 0 .. -1 as
|
gdb, gdbserver, gdbsupport: fix leading space vs tabs issues
Many spots incorrectly use only spaces for indentation (for example,
there are a lot of spots in ada-lang.c). I've always found it awkward
when I needed to edit one of these spots: do I keep the original wrong
indentation, or do I fix it? What if the lines around it are also
wrong, do I fix them too? I probably don't want to fix them in the same
patch, to avoid adding noise to my patch.
So I propose to fix as much as possible once and for all (hopefully).
One typical counter argument for this is that it makes code archeology
more difficult, because git-blame will show this commit as the last
change for these lines. My counter counter argument is: when
git-blaming, you often need to do "blame the file at the parent commit"
anyway, to go past some other refactor that touched the line you are
interested in, but is not the change you are looking for. So you
already need a somewhat efficient way to do this.
Using some interactive tool, rather than plain git-blame, makes this
trivial. For example, I use "tig blame <file>", where going back past
the commit that changed the currently selected line is one keystroke.
It looks like Magit in Emacs does it too (though I've never used it).
Web viewers of Github and Gitlab do it too. My point is that it won't
really make archeology more difficult.
The other typical counter argument is that it will cause conflicts with
existing patches. That's true... but it's a one time cost, and those
are not conflicts that are difficult to resolve. I have also tried "git
rebase --ignore-whitespace", it seems to work well. Although that will
re-introduce the faulty indentation, so one needs to take care of fixing
the indentation in the patch after that (which is easy).
gdb/ChangeLog:
* aarch64-linux-tdep.c: Fix indentation.
* aarch64-ravenscar-thread.c: Fix indentation.
* aarch64-tdep.c: Fix indentation.
* aarch64-tdep.h: Fix indentation.
* ada-lang.c: Fix indentation.
* ada-lang.h: Fix indentation.
* ada-tasks.c: Fix indentation.
* ada-typeprint.c: Fix indentation.
* ada-valprint.c: Fix indentation.
* ada-varobj.c: Fix indentation.
* addrmap.c: Fix indentation.
* addrmap.h: Fix indentation.
* agent.c: Fix indentation.
* aix-thread.c: Fix indentation.
* alpha-bsd-nat.c: Fix indentation.
* alpha-linux-tdep.c: Fix indentation.
* alpha-mdebug-tdep.c: Fix indentation.
* alpha-nbsd-tdep.c: Fix indentation.
* alpha-obsd-tdep.c: Fix indentation.
* alpha-tdep.c: Fix indentation.
* amd64-bsd-nat.c: Fix indentation.
* amd64-darwin-tdep.c: Fix indentation.
* amd64-linux-nat.c: Fix indentation.
* amd64-linux-tdep.c: Fix indentation.
* amd64-nat.c: Fix indentation.
* amd64-obsd-tdep.c: Fix indentation.
* amd64-tdep.c: Fix indentation.
* amd64-windows-tdep.c: Fix indentation.
* annotate.c: Fix indentation.
* arc-tdep.c: Fix indentation.
* arch-utils.c: Fix indentation.
* arch/arm-get-next-pcs.c: Fix indentation.
* arch/arm.c: Fix indentation.
* arm-linux-nat.c: Fix indentation.
* arm-linux-tdep.c: Fix indentation.
* arm-nbsd-tdep.c: Fix indentation.
* arm-pikeos-tdep.c: Fix indentation.
* arm-tdep.c: Fix indentation.
* arm-tdep.h: Fix indentation.
* arm-wince-tdep.c: Fix indentation.
* auto-load.c: Fix indentation.
* auxv.c: Fix indentation.
* avr-tdep.c: Fix indentation.
* ax-gdb.c: Fix indentation.
* ax-general.c: Fix indentation.
* bfin-linux-tdep.c: Fix indentation.
* block.c: Fix indentation.
* block.h: Fix indentation.
* blockframe.c: Fix indentation.
* bpf-tdep.c: Fix indentation.
* break-catch-sig.c: Fix indentation.
* break-catch-syscall.c: Fix indentation.
* break-catch-throw.c: Fix indentation.
* breakpoint.c: Fix indentation.
* breakpoint.h: Fix indentation.
* bsd-uthread.c: Fix indentation.
* btrace.c: Fix indentation.
* build-id.c: Fix indentation.
* buildsym-legacy.h: Fix indentation.
* buildsym.c: Fix indentation.
* c-typeprint.c: Fix indentation.
* c-valprint.c: Fix indentation.
* c-varobj.c: Fix indentation.
* charset.c: Fix indentation.
* cli/cli-cmds.c: Fix indentation.
* cli/cli-decode.c: Fix indentation.
* cli/cli-decode.h: Fix indentation.
* cli/cli-script.c: Fix indentation.
* cli/cli-setshow.c: Fix indentation.
* coff-pe-read.c: Fix indentation.
* coffread.c: Fix indentation.
* compile/compile-cplus-types.c: Fix indentation.
* compile/compile-object-load.c: Fix indentation.
* compile/compile-object-run.c: Fix indentation.
* completer.c: Fix indentation.
* corefile.c: Fix indentation.
* corelow.c: Fix indentation.
* cp-abi.h: Fix indentation.
* cp-namespace.c: Fix indentation.
* cp-support.c: Fix indentation.
* cp-valprint.c: Fix indentation.
* cris-linux-tdep.c: Fix indentation.
* cris-tdep.c: Fix indentation.
* darwin-nat-info.c: Fix indentation.
* darwin-nat.c: Fix indentation.
* darwin-nat.h: Fix indentation.
* dbxread.c: Fix indentation.
* dcache.c: Fix indentation.
* disasm.c: Fix indentation.
* dtrace-probe.c: Fix indentation.
* dwarf2/abbrev.c: Fix indentation.
* dwarf2/attribute.c: Fix indentation.
* dwarf2/expr.c: Fix indentation.
* dwarf2/frame.c: Fix indentation.
* dwarf2/index-cache.c: Fix indentation.
* dwarf2/index-write.c: Fix indentation.
* dwarf2/line-header.c: Fix indentation.
* dwarf2/loc.c: Fix indentation.
* dwarf2/macro.c: Fix indentation.
* dwarf2/read.c: Fix indentation.
* dwarf2/read.h: Fix indentation.
* elfread.c: Fix indentation.
* eval.c: Fix indentation.
* event-top.c: Fix indentation.
* exec.c: Fix indentation.
* exec.h: Fix indentation.
* expprint.c: Fix indentation.
* f-lang.c: Fix indentation.
* f-typeprint.c: Fix indentation.
* f-valprint.c: Fix indentation.
* fbsd-nat.c: Fix indentation.
* fbsd-tdep.c: Fix indentation.
* findvar.c: Fix indentation.
* fork-child.c: Fix indentation.
* frame-unwind.c: Fix indentation.
* frame-unwind.h: Fix indentation.
* frame.c: Fix indentation.
* frv-linux-tdep.c: Fix indentation.
* frv-tdep.c: Fix indentation.
* frv-tdep.h: Fix indentation.
* ft32-tdep.c: Fix indentation.
* gcore.c: Fix indentation.
* gdb_bfd.c: Fix indentation.
* gdbarch.sh: Fix indentation.
* gdbarch.c: Re-generate
* gdbarch.h: Re-generate.
* gdbcore.h: Fix indentation.
* gdbthread.h: Fix indentation.
* gdbtypes.c: Fix indentation.
* gdbtypes.h: Fix indentation.
* glibc-tdep.c: Fix indentation.
* gnu-nat.c: Fix indentation.
* gnu-nat.h: Fix indentation.
* gnu-v2-abi.c: Fix indentation.
* gnu-v3-abi.c: Fix indentation.
* go32-nat.c: Fix indentation.
* guile/guile-internal.h: Fix indentation.
* guile/scm-cmd.c: Fix indentation.
* guile/scm-frame.c: Fix indentation.
* guile/scm-iterator.c: Fix indentation.
* guile/scm-math.c: Fix indentation.
* guile/scm-ports.c: Fix indentation.
* guile/scm-pretty-print.c: Fix indentation.
* guile/scm-value.c: Fix indentation.
* h8300-tdep.c: Fix indentation.
* hppa-linux-nat.c: Fix indentation.
* hppa-linux-tdep.c: Fix indentation.
* hppa-nbsd-nat.c: Fix indentation.
* hppa-nbsd-tdep.c: Fix indentation.
* hppa-obsd-nat.c: Fix indentation.
* hppa-tdep.c: Fix indentation.
* hppa-tdep.h: Fix indentation.
* i386-bsd-nat.c: Fix indentation.
* i386-darwin-nat.c: Fix indentation.
* i386-darwin-tdep.c: Fix indentation.
* i386-dicos-tdep.c: Fix indentation.
* i386-gnu-nat.c: Fix indentation.
* i386-linux-nat.c: Fix indentation.
* i386-linux-tdep.c: Fix indentation.
* i386-nto-tdep.c: Fix indentation.
* i386-obsd-tdep.c: Fix indentation.
* i386-sol2-nat.c: Fix indentation.
* i386-tdep.c: Fix indentation.
* i386-tdep.h: Fix indentation.
* i386-windows-tdep.c: Fix indentation.
* i387-tdep.c: Fix indentation.
* i387-tdep.h: Fix indentation.
* ia64-libunwind-tdep.c: Fix indentation.
* ia64-libunwind-tdep.h: Fix indentation.
* ia64-linux-nat.c: Fix indentation.
* ia64-linux-tdep.c: Fix indentation.
* ia64-tdep.c: Fix indentation.
* ia64-tdep.h: Fix indentation.
* ia64-vms-tdep.c: Fix indentation.
* infcall.c: Fix indentation.
* infcmd.c: Fix indentation.
* inferior.c: Fix indentation.
* infrun.c: Fix indentation.
* iq2000-tdep.c: Fix indentation.
* language.c: Fix indentation.
* linespec.c: Fix indentation.
* linux-fork.c: Fix indentation.
* linux-nat.c: Fix indentation.
* linux-tdep.c: Fix indentation.
* linux-thread-db.c: Fix indentation.
* lm32-tdep.c: Fix indentation.
* m2-lang.c: Fix indentation.
* m2-typeprint.c: Fix indentation.
* m2-valprint.c: Fix indentation.
* m32c-tdep.c: Fix indentation.
* m32r-linux-tdep.c: Fix indentation.
* m32r-tdep.c: Fix indentation.
* m68hc11-tdep.c: Fix indentation.
* m68k-bsd-nat.c: Fix indentation.
* m68k-linux-nat.c: Fix indentation.
* m68k-linux-tdep.c: Fix indentation.
* m68k-tdep.c: Fix indentation.
* machoread.c: Fix indentation.
* macrocmd.c: Fix indentation.
* macroexp.c: Fix indentation.
* macroscope.c: Fix indentation.
* macrotab.c: Fix indentation.
* macrotab.h: Fix indentation.
* main.c: Fix indentation.
* mdebugread.c: Fix indentation.
* mep-tdep.c: Fix indentation.
* mi/mi-cmd-catch.c: Fix indentation.
* mi/mi-cmd-disas.c: Fix indentation.
* mi/mi-cmd-env.c: Fix indentation.
* mi/mi-cmd-stack.c: Fix indentation.
* mi/mi-cmd-var.c: Fix indentation.
* mi/mi-cmds.c: Fix indentation.
* mi/mi-main.c: Fix indentation.
* mi/mi-parse.c: Fix indentation.
* microblaze-tdep.c: Fix indentation.
* minidebug.c: Fix indentation.
* minsyms.c: Fix indentation.
* mips-linux-nat.c: Fix indentation.
* mips-linux-tdep.c: Fix indentation.
* mips-nbsd-tdep.c: Fix indentation.
* mips-tdep.c: Fix indentation.
* mn10300-linux-tdep.c: Fix indentation.
* mn10300-tdep.c: Fix indentation.
* moxie-tdep.c: Fix indentation.
* msp430-tdep.c: Fix indentation.
* namespace.h: Fix indentation.
* nat/fork-inferior.c: Fix indentation.
* nat/gdb_ptrace.h: Fix indentation.
* nat/linux-namespaces.c: Fix indentation.
* nat/linux-osdata.c: Fix indentation.
* nat/netbsd-nat.c: Fix indentation.
* nat/x86-dregs.c: Fix indentation.
* nbsd-nat.c: Fix indentation.
* nbsd-tdep.c: Fix indentation.
* nios2-linux-tdep.c: Fix indentation.
* nios2-tdep.c: Fix indentation.
* nto-procfs.c: Fix indentation.
* nto-tdep.c: Fix indentation.
* objfiles.c: Fix indentation.
* objfiles.h: Fix indentation.
* opencl-lang.c: Fix indentation.
* or1k-tdep.c: Fix indentation.
* osabi.c: Fix indentation.
* osabi.h: Fix indentation.
* osdata.c: Fix indentation.
* p-lang.c: Fix indentation.
* p-typeprint.c: Fix indentation.
* p-valprint.c: Fix indentation.
* parse.c: Fix indentation.
* ppc-linux-nat.c: Fix indentation.
* ppc-linux-tdep.c: Fix indentation.
* ppc-nbsd-nat.c: Fix indentation.
* ppc-nbsd-tdep.c: Fix indentation.
* ppc-obsd-nat.c: Fix indentation.
* ppc-ravenscar-thread.c: Fix indentation.
* ppc-sysv-tdep.c: Fix indentation.
* ppc64-tdep.c: Fix indentation.
* printcmd.c: Fix indentation.
* proc-api.c: Fix indentation.
* producer.c: Fix indentation.
* producer.h: Fix indentation.
* prologue-value.c: Fix indentation.
* prologue-value.h: Fix indentation.
* psymtab.c: Fix indentation.
* python/py-arch.c: Fix indentation.
* python/py-bpevent.c: Fix indentation.
* python/py-event.c: Fix indentation.
* python/py-event.h: Fix indentation.
* python/py-finishbreakpoint.c: Fix indentation.
* python/py-frame.c: Fix indentation.
* python/py-framefilter.c: Fix indentation.
* python/py-inferior.c: Fix indentation.
* python/py-infthread.c: Fix indentation.
* python/py-objfile.c: Fix indentation.
* python/py-prettyprint.c: Fix indentation.
* python/py-registers.c: Fix indentation.
* python/py-signalevent.c: Fix indentation.
* python/py-stopevent.c: Fix indentation.
* python/py-stopevent.h: Fix indentation.
* python/py-threadevent.c: Fix indentation.
* python/py-tui.c: Fix indentation.
* python/py-unwind.c: Fix indentation.
* python/py-value.c: Fix indentation.
* python/py-xmethods.c: Fix indentation.
* python/python-internal.h: Fix indentation.
* python/python.c: Fix indentation.
* ravenscar-thread.c: Fix indentation.
* record-btrace.c: Fix indentation.
* record-full.c: Fix indentation.
* record.c: Fix indentation.
* reggroups.c: Fix indentation.
* regset.h: Fix indentation.
* remote-fileio.c: Fix indentation.
* remote.c: Fix indentation.
* reverse.c: Fix indentation.
* riscv-linux-tdep.c: Fix indentation.
* riscv-ravenscar-thread.c: Fix indentation.
* riscv-tdep.c: Fix indentation.
* rl78-tdep.c: Fix indentation.
* rs6000-aix-tdep.c: Fix indentation.
* rs6000-lynx178-tdep.c: Fix indentation.
* rs6000-nat.c: Fix indentation.
* rs6000-tdep.c: Fix indentation.
* rust-lang.c: Fix indentation.
* rx-tdep.c: Fix indentation.
* s12z-tdep.c: Fix indentation.
* s390-linux-tdep.c: Fix indentation.
* score-tdep.c: Fix indentation.
* ser-base.c: Fix indentation.
* ser-mingw.c: Fix indentation.
* ser-uds.c: Fix indentation.
* ser-unix.c: Fix indentation.
* serial.c: Fix indentation.
* sh-linux-tdep.c: Fix indentation.
* sh-nbsd-tdep.c: Fix indentation.
* sh-tdep.c: Fix indentation.
* skip.c: Fix indentation.
* sol-thread.c: Fix indentation.
* solib-aix.c: Fix indentation.
* solib-darwin.c: Fix indentation.
* solib-frv.c: Fix indentation.
* solib-svr4.c: Fix indentation.
* solib.c: Fix indentation.
* source.c: Fix indentation.
* sparc-linux-tdep.c: Fix indentation.
* sparc-nbsd-tdep.c: Fix indentation.
* sparc-obsd-tdep.c: Fix indentation.
* sparc-ravenscar-thread.c: Fix indentation.
* sparc-tdep.c: Fix indentation.
* sparc64-linux-tdep.c: Fix indentation.
* sparc64-nbsd-tdep.c: Fix indentation.
* sparc64-obsd-tdep.c: Fix indentation.
* sparc64-tdep.c: Fix indentation.
* stabsread.c: Fix indentation.
* stack.c: Fix indentation.
* stap-probe.c: Fix indentation.
* stubs/ia64vms-stub.c: Fix indentation.
* stubs/m32r-stub.c: Fix indentation.
* stubs/m68k-stub.c: Fix indentation.
* stubs/sh-stub.c: Fix indentation.
* stubs/sparc-stub.c: Fix indentation.
* symfile-mem.c: Fix indentation.
* symfile.c: Fix indentation.
* symfile.h: Fix indentation.
* symmisc.c: Fix indentation.
* symtab.c: Fix indentation.
* symtab.h: Fix indentation.
* target-float.c: Fix indentation.
* target.c: Fix indentation.
* target.h: Fix indentation.
* tic6x-tdep.c: Fix indentation.
* tilegx-linux-tdep.c: Fix indentation.
* tilegx-tdep.c: Fix indentation.
* top.c: Fix indentation.
* tracefile-tfile.c: Fix indentation.
* tracepoint.c: Fix indentation.
* tui/tui-disasm.c: Fix indentation.
* tui/tui-io.c: Fix indentation.
* tui/tui-regs.c: Fix indentation.
* tui/tui-stack.c: Fix indentation.
* tui/tui-win.c: Fix indentation.
* tui/tui-winsource.c: Fix indentation.
* tui/tui.c: Fix indentation.
* typeprint.c: Fix indentation.
* ui-out.h: Fix indentation.
* unittests/copy_bitwise-selftests.c: Fix indentation.
* unittests/memory-map-selftests.c: Fix indentation.
* utils.c: Fix indentation.
* v850-tdep.c: Fix indentation.
* valarith.c: Fix indentation.
* valops.c: Fix indentation.
* valprint.c: Fix indentation.
* valprint.h: Fix indentation.
* value.c: Fix indentation.
* value.h: Fix indentation.
* varobj.c: Fix indentation.
* vax-tdep.c: Fix indentation.
* windows-nat.c: Fix indentation.
* windows-tdep.c: Fix indentation.
* xcoffread.c: Fix indentation.
* xml-syscall.c: Fix indentation.
* xml-tdesc.c: Fix indentation.
* xstormy16-tdep.c: Fix indentation.
* xtensa-config.c: Fix indentation.
* xtensa-linux-nat.c: Fix indentation.
* xtensa-linux-tdep.c: Fix indentation.
* xtensa-tdep.c: Fix indentation.
gdbserver/ChangeLog:
* ax.cc: Fix indentation.
* dll.cc: Fix indentation.
* inferiors.h: Fix indentation.
* linux-low.cc: Fix indentation.
* linux-nios2-low.cc: Fix indentation.
* linux-ppc-ipa.cc: Fix indentation.
* linux-ppc-low.cc: Fix indentation.
* linux-x86-low.cc: Fix indentation.
* linux-xtensa-low.cc: Fix indentation.
* regcache.cc: Fix indentation.
* server.cc: Fix indentation.
* tracepoint.cc: Fix indentation.
gdbsupport/ChangeLog:
* common-exceptions.h: Fix indentation.
* event-loop.cc: Fix indentation.
* fileio.cc: Fix indentation.
* filestuff.cc: Fix indentation.
* gdb-dlfcn.cc: Fix indentation.
* gdb_string_view.h: Fix indentation.
* job-control.cc: Fix indentation.
* signals.cc: Fix indentation.
Change-Id: I4bad7ae6be0fbe14168b8ebafb98ffe14964a695
2020-11-02 23:26:14 +08:00
|
|
|
|
unsigned integers (ie. the type code is TYPE_CODE_INT, not
|
|
|
|
|
TYPE_CODE_RANGE). Unfortunately, ada_print_scalar() relies
|
|
|
|
|
on the unsigned flag to determine whether the bound should
|
|
|
|
|
be printed as a signed or an unsigned value. This causes
|
|
|
|
|
the upper bound of the 0 .. -1 range types to be printed as
|
|
|
|
|
a very large unsigned number instead of -1.
|
|
|
|
|
To workaround this stabs deficiency, we replace the TYPE by NULL
|
|
|
|
|
to indicate default output when we detect that the bound is negative,
|
|
|
|
|
and the type is a TYPE_CODE_INT. The bound is negative when
|
|
|
|
|
'm' is the last character of the number scanned in BOUNDS. */
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (bounds[*n - 1] == 'm' && type->code () == TYPE_CODE_INT)
|
2009-06-30 01:30:12 +08:00
|
|
|
|
type = NULL;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
ada_print_scalar (type, B, stream);
|
|
|
|
|
if (bounds[*n] == '_')
|
|
|
|
|
*n += 2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int bound_len;
|
2015-10-14 02:40:50 +08:00
|
|
|
|
const char *bound = bounds + *n;
|
|
|
|
|
const char *pend;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
pend = strstr (bound, "__");
|
|
|
|
|
if (pend == NULL)
|
|
|
|
|
*n += bound_len = strlen (bound);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
bound_len = pend - bound;
|
|
|
|
|
*n += bound_len + 2;
|
|
|
|
|
}
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%.*s", bound_len, bound);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Assuming NAME[0 .. NAME_LEN-1] is the name of a range type, print
|
|
|
|
|
the value (if found) of the bound indicated by SUFFIX ("___L" or
|
2004-06-02 17:55:36 +08:00
|
|
|
|
"___U") according to the ___XD conventions. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_dynamic_range_bound (struct type *type, const char *name, int name_len,
|
|
|
|
|
const char *suffix, struct ui_file *stream)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
LONGEST B;
|
2017-10-14 10:45:14 +08:00
|
|
|
|
std::string name_buf (name, name_len);
|
|
|
|
|
name_buf += suffix;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2017-10-14 10:45:14 +08:00
|
|
|
|
if (get_int_var_value (name_buf.c_str (), B))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
ada_print_scalar (type, B, stream);
|
|
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "?");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-18 00:55:31 +08:00
|
|
|
|
/* Print RAW_TYPE as a range type, using any bound information
|
2014-01-16 00:00:05 +08:00
|
|
|
|
following the GNAT encoding (if available).
|
|
|
|
|
|
2023-06-04 04:43:57 +08:00
|
|
|
|
If BOUNDS_PREFERRED_P is nonzero, force the printing of the range
|
2014-01-16 00:00:05 +08:00
|
|
|
|
using its bounds. Otherwise, try printing the range without
|
|
|
|
|
printing the value of the bounds, if possible (this is only
|
|
|
|
|
considered a hint, not a guaranty). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2014-01-16 00:00:05 +08:00
|
|
|
|
print_range_type (struct type *raw_type, struct ui_file *stream,
|
2023-06-04 04:43:57 +08:00
|
|
|
|
int bounds_preferred_p)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
* gdbtypes.h (struct main_type): Change type of name,tag_name,
and fields.name members from char * to const char *. All uses updated.
(struct cplus_struct_type): Change type of fn_fieldlists.name member
from char * to const char *. All uses updated.
(type_name_no_tag): Update.
(lookup_unsigned_typename, lookup_signed_typename): Update.
* gdbtypes.c (type_name_no_tag): Change result type
from char * to const char *. All callers updated.
(lookup_unsigned_typename, lookup_signed_typename): Change type of
name parameter from char * to const char *.
* symtab.h (struct cplus_specific): Change type of demangled_name
member from char * to const char *. All uses updated.
(struct general_symbol_info): Change type of name and
mangled_lang.demangled_name members from char * to const char *.
All uses updated.
(symbol_get_demangled_name, symbol_natural_name): Update.
(symbol_demangled_name, symbol_search_name): Update.
* symtab.c (symbol_get_demangled_name): Change result type
from char * to const char *. All callers updated.
(symbol_natural_name, symbol_demangled_name): Ditto.
(symbol_search_name): Ditto.
(completion_list_add_name): Change type of symname,sym_text,
text,word parameters from char * to const char *.
(completion_list_objc_symbol): Change type of sym_text,
text,word parameters from char * to const char *.
* ada-lang.c (find_struct_field): Change type of name parameter
from char * to const char *.
(encoded_ordered_before): Similarly for N0,N1 parameters.
(old_renaming_is_invisible): Similarly for function_name parameter.
(ada_type_name): Change result type from char * to const char *.
All callers updated.
* ada-lang.h (ada_type_name): Update.
* buildsym.c (hashname): Change type of name parameter
from char * to const char *.
* buildsym.h (hashname): Update.
* dbxread.c (end_psymtab): Change type of include_list parameter
from char ** to const char **.
* dwarf2read.c (determine_prefix): Change result type
from char * to const char *. All callers updated.
* f-lang.c (find_common_for_function): Change type of name, funcname
parameters from char * to const char *.
* f-lang.c (find_common_for_function): Update.
* f-valprint.c (list_all_visible_commons): Change type of funcname
parameters from char * to const char *.
* gdbarch.sh (static_transform_name): Change type of name parameter
and result from char * to const char *.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* i386-sol2-tdep.c (i386_sol2_static_transform_name): Change type
of name parameter from char * to const char *.
* jv-lang.c (java_primitive_type_from_name): Ditto.
(java_demangled_signature_length): Similarly for signature parameter.
(java_demangled_signature_copy): Ditto.
(java_demangle_type_signature): Ditto.
* jv-lang.h (java_primitive_type_from_name): Update.
(java_demangle_type_signature): Update.
* objc-lang.c (specialcmp): Change type of a,b parameters
from char * to const char *.
* p-lang.c (is_pascal_string_type): Change type of arrayname parameter
from char * to const char *. All callers updated.
* p-lang.h (is_pascal_string_type): Update.
* solib-frv.c (find_canonical_descriptor_in_load_object): Change type
of name parameter from char * to const char *.
* sparc-sol2-tdep.c (sparc_sol2_static_transform_name): Ditto.
* utils.c (fprintf_symbol_filtered): Ditto.
* defs.h (fprintf_symbol_filtered): Update.
* sparc-tdep.h (sparc_sol2_static_transform_name): Update.
* stabsread.h (end_psymtab): Update.
* stack.c (find_frame_funname): Change type of funname parameter
from char ** to const char **.
* stack.h (find_frame_funname): Update.
* typeprint.c (type_print): Change type of varstring parameter
from char * to const char *.
* value.h (type_print): Update.
* xcoffread.c (xcoff_start_psymtab): Change type of filename parameter
from char * to const char *. All callers updated.
(xcoff_end_psymtab): Change type of include_list parameter
from char ** to const char **. All callers updated.
(swap_sym): Similarly for name parameter. All callers updated.
* coffread.c (patch_type): Add (char*) cast to xfree parameter.
Use xstrdup.
(process_coff_symbol): Use xstrdup.
* stabsread.c (stabs_method_name_from_physname): Renamed from
update_method_name_from_physname. Change result type from void
to char *. All callers updated.
(read_member_functions): In has_destructor case, store name in objfile
obstack instead of malloc space. In !has_stub case, fix mem leak.
2012-02-07 12:48:23 +08:00
|
|
|
|
const char *name;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
struct type *base_type;
|
* gdbtypes.h (struct main_type): Change type of name,tag_name,
and fields.name members from char * to const char *. All uses updated.
(struct cplus_struct_type): Change type of fn_fieldlists.name member
from char * to const char *. All uses updated.
(type_name_no_tag): Update.
(lookup_unsigned_typename, lookup_signed_typename): Update.
* gdbtypes.c (type_name_no_tag): Change result type
from char * to const char *. All callers updated.
(lookup_unsigned_typename, lookup_signed_typename): Change type of
name parameter from char * to const char *.
* symtab.h (struct cplus_specific): Change type of demangled_name
member from char * to const char *. All uses updated.
(struct general_symbol_info): Change type of name and
mangled_lang.demangled_name members from char * to const char *.
All uses updated.
(symbol_get_demangled_name, symbol_natural_name): Update.
(symbol_demangled_name, symbol_search_name): Update.
* symtab.c (symbol_get_demangled_name): Change result type
from char * to const char *. All callers updated.
(symbol_natural_name, symbol_demangled_name): Ditto.
(symbol_search_name): Ditto.
(completion_list_add_name): Change type of symname,sym_text,
text,word parameters from char * to const char *.
(completion_list_objc_symbol): Change type of sym_text,
text,word parameters from char * to const char *.
* ada-lang.c (find_struct_field): Change type of name parameter
from char * to const char *.
(encoded_ordered_before): Similarly for N0,N1 parameters.
(old_renaming_is_invisible): Similarly for function_name parameter.
(ada_type_name): Change result type from char * to const char *.
All callers updated.
* ada-lang.h (ada_type_name): Update.
* buildsym.c (hashname): Change type of name parameter
from char * to const char *.
* buildsym.h (hashname): Update.
* dbxread.c (end_psymtab): Change type of include_list parameter
from char ** to const char **.
* dwarf2read.c (determine_prefix): Change result type
from char * to const char *. All callers updated.
* f-lang.c (find_common_for_function): Change type of name, funcname
parameters from char * to const char *.
* f-lang.c (find_common_for_function): Update.
* f-valprint.c (list_all_visible_commons): Change type of funcname
parameters from char * to const char *.
* gdbarch.sh (static_transform_name): Change type of name parameter
and result from char * to const char *.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* i386-sol2-tdep.c (i386_sol2_static_transform_name): Change type
of name parameter from char * to const char *.
* jv-lang.c (java_primitive_type_from_name): Ditto.
(java_demangled_signature_length): Similarly for signature parameter.
(java_demangled_signature_copy): Ditto.
(java_demangle_type_signature): Ditto.
* jv-lang.h (java_primitive_type_from_name): Update.
(java_demangle_type_signature): Update.
* objc-lang.c (specialcmp): Change type of a,b parameters
from char * to const char *.
* p-lang.c (is_pascal_string_type): Change type of arrayname parameter
from char * to const char *. All callers updated.
* p-lang.h (is_pascal_string_type): Update.
* solib-frv.c (find_canonical_descriptor_in_load_object): Change type
of name parameter from char * to const char *.
* sparc-sol2-tdep.c (sparc_sol2_static_transform_name): Ditto.
* utils.c (fprintf_symbol_filtered): Ditto.
* defs.h (fprintf_symbol_filtered): Update.
* sparc-tdep.h (sparc_sol2_static_transform_name): Update.
* stabsread.h (end_psymtab): Update.
* stack.c (find_frame_funname): Change type of funname parameter
from char ** to const char **.
* stack.h (find_frame_funname): Update.
* typeprint.c (type_print): Change type of varstring parameter
from char * to const char *.
* value.h (type_print): Update.
* xcoffread.c (xcoff_start_psymtab): Change type of filename parameter
from char * to const char *. All callers updated.
(xcoff_end_psymtab): Change type of include_list parameter
from char ** to const char **. All callers updated.
(swap_sym): Similarly for name parameter. All callers updated.
* coffread.c (patch_type): Add (char*) cast to xfree parameter.
Use xstrdup.
(process_coff_symbol): Use xstrdup.
* stabsread.c (stabs_method_name_from_physname): Renamed from
update_method_name_from_physname. Change result type from void
to char *. All callers updated.
(read_member_functions): In has_destructor case, store name in objfile
obstack instead of malloc space. In !has_stub case, fix mem leak.
2012-02-07 12:48:23 +08:00
|
|
|
|
const char *subtype_info;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2010-05-18 00:55:31 +08:00
|
|
|
|
gdb_assert (raw_type != NULL);
|
2020-05-17 00:16:06 +08:00
|
|
|
|
name = raw_type->name ();
|
2010-05-18 00:55:31 +08:00
|
|
|
|
gdb_assert (name != NULL);
|
2009-06-30 01:28:59 +08:00
|
|
|
|
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (raw_type->code () == TYPE_CODE_RANGE)
|
2022-07-31 10:43:54 +08:00
|
|
|
|
base_type = raw_type->target_type ();
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
|
|
|
|
base_type = raw_type;
|
|
|
|
|
|
|
|
|
|
subtype_info = strstr (name, "___XD");
|
2009-06-30 01:28:59 +08:00
|
|
|
|
if (subtype_info == NULL)
|
2023-06-04 04:43:57 +08:00
|
|
|
|
print_range (raw_type, stream, bounds_preferred_p);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int prefix_len = subtype_info - name;
|
2015-10-14 02:40:50 +08:00
|
|
|
|
const char *bounds_str;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
int n;
|
|
|
|
|
|
|
|
|
|
subtype_info += 5;
|
|
|
|
|
bounds_str = strchr (subtype_info, '_');
|
|
|
|
|
n = 1;
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (*subtype_info == 'L')
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2004-06-02 17:55:36 +08:00
|
|
|
|
print_range_bound (base_type, bounds_str, &n, stream);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
subtype_info += 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
2004-06-02 17:55:36 +08:00
|
|
|
|
print_dynamic_range_bound (base_type, name, prefix_len, "___L",
|
2002-08-19 02:11:12 +08:00
|
|
|
|
stream);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " .. ");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (*subtype_info == 'U')
|
2004-06-02 17:55:36 +08:00
|
|
|
|
print_range_bound (base_type, bounds_str, &n, stream);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
2004-06-02 17:55:36 +08:00
|
|
|
|
print_dynamic_range_bound (base_type, name, prefix_len, "___U",
|
2002-08-19 02:11:12 +08:00
|
|
|
|
stream);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
2002-08-19 02:11:12 +08:00
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* Print enumerated type TYPE on STREAM. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-07-25 09:14:26 +08:00
|
|
|
|
print_enum_type (struct type *type, struct ui_file *stream)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2020-05-23 04:55:15 +08:00
|
|
|
|
int len = type->num_fields ();
|
2012-04-18 14:46:47 +08:00
|
|
|
|
int i;
|
|
|
|
|
LONGEST lastval;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "(");
|
2021-12-31 01:29:03 +08:00
|
|
|
|
stream->wrap_here (1);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
lastval = 0;
|
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
|
{
|
|
|
|
|
QUIT;
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (i)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ", ");
|
2021-12-31 01:29:03 +08:00
|
|
|
|
stream->wrap_here (4);
|
2021-08-30 23:49:49 +08:00
|
|
|
|
fputs_styled (ada_enum_name (type->field (i).name ()),
|
2020-02-23 01:02:42 +08:00
|
|
|
|
variable_name_style.style (), stream);
|
2021-09-27 04:38:02 +08:00
|
|
|
|
if (lastval != type->field (i).loc_enumval ())
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " => %s",
|
|
|
|
|
plongest (type->field (i).loc_enumval ()));
|
2021-09-27 04:38:02 +08:00
|
|
|
|
lastval = type->field (i).loc_enumval ();
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
lastval += 1;
|
|
|
|
|
}
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ")");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* Print simple (constrained) array type TYPE on STREAM. LEVEL is the
|
|
|
|
|
recursion (indentation) level, in case the element type itself has
|
2002-06-04 23:28:49 +08:00
|
|
|
|
nested structure, and SHOW is the number of levels of internal
|
2004-06-02 17:55:36 +08:00
|
|
|
|
structure to show (see ada_print_type). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_array_type (struct type *type, struct ui_file *stream, int show,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
int level, const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
int bitsize;
|
|
|
|
|
int n_indices;
|
[Ada] Enhance type printing for arrays with variable-sized elements
This change is relevant only for standard DWARF (as opposed to the GNAT
encodings extensions): at the time of writing it only makes a difference
with GCC patches that are to be integrated: see the patch series
submission at
<https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01353.html>.
Given the following Ada declarations:
subtype Small_Int is Natural range 0 .. 100;
type R_Type (L : Small_Int := 0) is record
S : String (1 .. L);
end record;
type A_Type is array (Natural range <>) of R_Type;
A : A_Type := (1 => (L => 0, S => ""),
2 => (L => 2, S => "ab"));
Before this change, we would get the following GDB session:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type <packed: 838-bit elements>
This is wrong: "a" is not a packed array. This output comes from the
fact that, because R_Type has a dynamic size (with a maximum), the
compiler has to describe in the debugging information the size allocated
for each array element (i.e. the stride, in DWARF parlance: see
DW_AT_byte_stride). Ada type printing currently assumes that arrays
with a stride are packed, hence the above output.
In practice, GNAT never performs bit-packing for arrays that contain
variable-sized elements. Leveraging this fact, this patch enhances type
printing so that ptype does not pretend that arrays are packed when they
have a stride and they contain dynamic elements. After this change, we
get the following expected output:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type
gdb/ChangeLog:
* ada-typeprint.c (print_array_type): Do not describe arrays as
packed when they embed dynamic elements.
gdb/testsuite/ChangeLog:
* gdb.ada/array_of_variable_length.exp: New testcase.
* gdb.ada/array_of_variable_length/foo.adb: New file.
* gdb.ada/array_of_variable_length/pck.adb: New file.
* gdb.ada/array_of_variable_length/pck.ads: New file.
Tested on x86_64-linux, no regression.
2015-09-15 17:56:03 +08:00
|
|
|
|
struct type *elt_type = NULL;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
* ada-lang.c (packed_array_type): Rename to...
(constrained_packed_array_type): ...and update comment.
(decode_packed_array, decode_constrained_packed_array): Ditto.
(decode_packed_array_type, decode_constrained_packed_array_type):
Ditto.
(ada_is_constrained_packed_array_type): New function.
(ada_is_unconstrained_packed_array_type): New function.
(decode_packed_array_bitsize): New function, extracted from
decode_packed_array_type.
(ada_type_of_array): Add support for unconstrained packed arrays.
(ada_coerce_to_simple_array_ptr, ada_coerce_to_simple_array)
(ada_array_bound_from_type, ada_array_bound, ada_array_length)
(ada_prefer_type, to_fixed_array_type, ada_evaluate_subexp): Resync.
* ada-lang.h (ada_is_packed_array_type,
ada_is_constrained_packed_array_type): Renaming.
* ada-valprint.c (ada_val_print_1): Resync.
* ada-typeprint.c (print_array_type, ada_print_type): Resync.
2009-11-20 06:42:48 +08:00
|
|
|
|
if (ada_is_constrained_packed_array_type (type))
|
2008-01-05 04:45:05 +08:00
|
|
|
|
type = ada_coerce_to_simple_array_type (type);
|
|
|
|
|
|
2002-06-04 23:28:49 +08:00
|
|
|
|
bitsize = 0;
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "array (");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2009-03-21 06:00:11 +08:00
|
|
|
|
if (type == NULL)
|
|
|
|
|
{
|
Introduce metadata style
This introduces a new "metadata" style and changes many places in gdb
to use it. The idea here is to let the user distinguish gdb output
from output that (conceptually at least) comes directly from the
inferior. The newly-styled category includes text that gdb
traditionally surrounds in "<...>", like "<unavailable>".
I only added a single test for this. In many cases this output is
difficult to test. Also, while developing this errors in the
implementation of the new printf formats showed up as regressions.
gdb/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* p-lang.c (pascal_printstr): Use metadata style.
* value.c (show_convenience): Use metadata style.
* valprint.c (valprint_check_validity, val_print_optimized_out)
(val_print_not_saved, val_print_unavailable)
(val_print_invalid_address, generic_val_print, val_print)
(value_check_printable, val_print_array_elements): Use metadata
style.
* ui-out.h (class ui_out) <field_fmt>: New overload.
<do_field_fmt>: Add style parameter.
* ui-out.c (ui_out::field_fmt): New overload.
* typeprint.c (type_print_unknown_return_type)
(val_print_not_allocated, val_print_not_associated): Use metadata
style.
* tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style
parameter.
* tui/tui-out.c (tui_ui_out::do_field_fmt): Update.
* tracepoint.c (tvariables_info_1): Use metadata style.
* stack.c (print_frame_arg, print_frame_info, print_frame)
(info_frame_command_core): Use metadata style.
* skip.c (info_skip_command): Use metadata style.
* rust-lang.c (rust_print_enum): Use metadata style.
* python/py-prettyprint.c (print_stack_unless_memory_error): Use
metadata style.
* python/py-framefilter.c (py_print_single_arg): Use metadata
style.
* printcmd.c (do_one_display, print_variable_and_value): Use
metadata style.
* p-valprint.c (pascal_val_print)
(pascal_object_print_value_fields): Use metadata style.
* p-typeprint.c (pascal_type_print_base): Use metadata style.
* mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style
parameter.
* mi/mi-out.c (mi_ui_out::do_field_fmt): Update.
* m2-valprint.c (m2_print_long_set): Use metadata style.
* m2-typeprint.c (m2_print_type): Use metadata style.
* infcmd.c (print_return_value_1): Use metadata style.
* gnu-v3-abi.c (print_one_vtable): Use metadata style.
* f-valprint.c (info_common_command_for_block): Use metadata
style.
* f-typeprint.c (f_type_print_base): Use metadata style.
* expprint.c (print_subexp_standard): Use metadata style.
* cp-valprint.c (cp_print_value_fields): Use metadata style.
* cli/cli-style.h (class cli_style_option): Add constructor.
(metadata_style): Declare.
* cli/cli-style.c (metadata_style): New global.
(_initialize_cli_style): Register metadata style.
* cli-out.h (class cli_ui_out) <do_field_fmt>: Add style
parameter.
* cli-out.c (cli_ui_out::do_field_fmt): Update.
* c-typeprint.c (c_type_print_base_struct_union)
(c_type_print_base_1): Use metadata style.
* breakpoint.c (watchpoint_value_print)
(print_one_breakpoint_location): Use metadata style.
* break-catch-syscall.c (print_one_catch_syscall): Use metadata
style.
* break-catch-sig.c (signal_catchpoint_print_one): Use metadata
style.
* ada-valprint.c (val_print_packed_array_elements, printstr)
(print_field_values, ada_val_print_ref, ada_val_print): Use
metadata style.
* ada-typeprint.c (print_array_type, ada_print_type): Use metadata
style.
* ada-tasks.c (print_ada_task_info, info_task): Use metadata
style.
* ada-lang.c (user_select_syms): Use metadata style.
gdb/testsuite/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* lib/gdb-utils.exp (style): Handle "metadata" argument.
* gdb.base/style.exp: Add metadata style test.
2019-04-03 10:00:18 +08:00
|
|
|
|
fprintf_styled (stream, metadata_style.style (),
|
|
|
|
|
_("<undecipherable array type>"));
|
2009-03-21 06:00:11 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2002-06-04 23:28:49 +08:00
|
|
|
|
n_indices = -1;
|
2011-07-02 02:27:12 +08:00
|
|
|
|
if (ada_is_simple_array_type (type))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2011-07-02 02:27:12 +08:00
|
|
|
|
struct type *range_desc_type;
|
|
|
|
|
struct type *arr_type;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2011-07-02 02:27:12 +08:00
|
|
|
|
range_desc_type = ada_find_parallel_type (type, "___XA");
|
|
|
|
|
ada_fixup_array_indexes_type (range_desc_type);
|
2010-05-18 00:55:31 +08:00
|
|
|
|
|
2011-07-02 02:27:12 +08:00
|
|
|
|
bitsize = 0;
|
|
|
|
|
if (range_desc_type == NULL)
|
|
|
|
|
{
|
2022-06-17 21:41:37 +08:00
|
|
|
|
for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY; )
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2011-07-02 02:27:12 +08:00
|
|
|
|
if (arr_type != type)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ", ");
|
2020-06-09 03:25:53 +08:00
|
|
|
|
print_range (arr_type->index_type (), stream,
|
2023-06-04 04:43:57 +08:00
|
|
|
|
0 /* bounds_preferred_p */);
|
2023-08-31 23:46:27 +08:00
|
|
|
|
if (arr_type->field (0).bitsize () > 0)
|
|
|
|
|
bitsize = arr_type->field (0).bitsize ();
|
2022-06-17 21:41:37 +08:00
|
|
|
|
/* A multi-dimensional array is represented using a
|
|
|
|
|
sequence of array types. If one of these types has a
|
|
|
|
|
name, then it is not another dimension of the outer
|
|
|
|
|
array, but rather the element type of the outermost
|
|
|
|
|
array. */
|
2022-07-31 10:43:54 +08:00
|
|
|
|
arr_type = arr_type->target_type ();
|
2022-06-17 21:41:37 +08:00
|
|
|
|
if (arr_type->name () != nullptr)
|
|
|
|
|
break;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2011-07-02 02:27:12 +08:00
|
|
|
|
int k;
|
2010-05-19 03:23:37 +08:00
|
|
|
|
|
2020-05-23 04:55:15 +08:00
|
|
|
|
n_indices = range_desc_type->num_fields ();
|
2011-07-02 02:27:12 +08:00
|
|
|
|
for (k = 0, arr_type = type;
|
|
|
|
|
k < n_indices;
|
2022-07-31 10:43:54 +08:00
|
|
|
|
k += 1, arr_type = arr_type->target_type ())
|
2011-07-02 02:27:12 +08:00
|
|
|
|
{
|
|
|
|
|
if (k > 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ", ");
|
2020-06-09 03:26:20 +08:00
|
|
|
|
print_range_type (range_desc_type->field (k).type (),
|
2023-06-04 04:43:57 +08:00
|
|
|
|
stream, 0 /* bounds_preferred_p */);
|
2023-08-31 23:46:27 +08:00
|
|
|
|
if (arr_type->field (0).bitsize () > 0)
|
|
|
|
|
bitsize = arr_type->field (0).bitsize ();
|
2011-07-02 02:27:12 +08:00
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-02 02:27:12 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int i, i0;
|
|
|
|
|
|
|
|
|
|
for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%s<>", i == i0 ? "" : ", ");
|
2011-07-02 02:27:12 +08:00
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
[Ada] Enhance type printing for arrays with variable-sized elements
This change is relevant only for standard DWARF (as opposed to the GNAT
encodings extensions): at the time of writing it only makes a difference
with GCC patches that are to be integrated: see the patch series
submission at
<https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01353.html>.
Given the following Ada declarations:
subtype Small_Int is Natural range 0 .. 100;
type R_Type (L : Small_Int := 0) is record
S : String (1 .. L);
end record;
type A_Type is array (Natural range <>) of R_Type;
A : A_Type := (1 => (L => 0, S => ""),
2 => (L => 2, S => "ab"));
Before this change, we would get the following GDB session:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type <packed: 838-bit elements>
This is wrong: "a" is not a packed array. This output comes from the
fact that, because R_Type has a dynamic size (with a maximum), the
compiler has to describe in the debugging information the size allocated
for each array element (i.e. the stride, in DWARF parlance: see
DW_AT_byte_stride). Ada type printing currently assumes that arrays
with a stride are packed, hence the above output.
In practice, GNAT never performs bit-packing for arrays that contain
variable-sized elements. Leveraging this fact, this patch enhances type
printing so that ptype does not pretend that arrays are packed when they
have a stride and they contain dynamic elements. After this change, we
get the following expected output:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type
gdb/ChangeLog:
* ada-typeprint.c (print_array_type): Do not describe arrays as
packed when they embed dynamic elements.
gdb/testsuite/ChangeLog:
* gdb.ada/array_of_variable_length.exp: New testcase.
* gdb.ada/array_of_variable_length/foo.adb: New file.
* gdb.ada/array_of_variable_length/pck.adb: New file.
* gdb.ada/array_of_variable_length/pck.ads: New file.
Tested on x86_64-linux, no regression.
2015-09-15 17:56:03 +08:00
|
|
|
|
elt_type = ada_array_element_type (type, n_indices);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ") of ");
|
2021-12-31 01:29:03 +08:00
|
|
|
|
stream->wrap_here (0);
|
[Ada] Enhance type printing for arrays with variable-sized elements
This change is relevant only for standard DWARF (as opposed to the GNAT
encodings extensions): at the time of writing it only makes a difference
with GCC patches that are to be integrated: see the patch series
submission at
<https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01353.html>.
Given the following Ada declarations:
subtype Small_Int is Natural range 0 .. 100;
type R_Type (L : Small_Int := 0) is record
S : String (1 .. L);
end record;
type A_Type is array (Natural range <>) of R_Type;
A : A_Type := (1 => (L => 0, S => ""),
2 => (L => 2, S => "ab"));
Before this change, we would get the following GDB session:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type <packed: 838-bit elements>
This is wrong: "a" is not a packed array. This output comes from the
fact that, because R_Type has a dynamic size (with a maximum), the
compiler has to describe in the debugging information the size allocated
for each array element (i.e. the stride, in DWARF parlance: see
DW_AT_byte_stride). Ada type printing currently assumes that arrays
with a stride are packed, hence the above output.
In practice, GNAT never performs bit-packing for arrays that contain
variable-sized elements. Leveraging this fact, this patch enhances type
printing so that ptype does not pretend that arrays are packed when they
have a stride and they contain dynamic elements. After this change, we
get the following expected output:
(gdb) ptype a
type = array (1 .. 2) of foo.r_type
gdb/ChangeLog:
* ada-typeprint.c (print_array_type): Do not describe arrays as
packed when they embed dynamic elements.
gdb/testsuite/ChangeLog:
* gdb.ada/array_of_variable_length.exp: New testcase.
* gdb.ada/array_of_variable_length/foo.adb: New file.
* gdb.ada/array_of_variable_length/pck.adb: New file.
* gdb.ada/array_of_variable_length/pck.ads: New file.
Tested on x86_64-linux, no regression.
2015-09-15 17:56:03 +08:00
|
|
|
|
ada_print_type (elt_type, "", stream, show == 0 ? 0 : show - 1, level + 1,
|
|
|
|
|
flags);
|
|
|
|
|
/* Arrays with variable-length elements are never bit-packed in practice but
|
|
|
|
|
compilers have to describe their stride so that we can properly fetch
|
|
|
|
|
individual elements. Do not say the array is packed in this case. */
|
|
|
|
|
if (bitsize > 0 && !is_dynamic_type (elt_type))
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " <packed: %d-bit elements>", bitsize);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print the choices encoded by field FIELD_NUM of variant-part TYPE on
|
2010-10-04 14:37:54 +08:00
|
|
|
|
STREAM, assuming that VAL_TYPE (if non-NULL) is the type of the
|
2010-11-23 08:58:04 +08:00
|
|
|
|
values. Return non-zero if the field is an encoding of
|
2010-10-04 14:37:54 +08:00
|
|
|
|
discriminant values, as in a standard variant record, and 0 if the
|
|
|
|
|
field is not so encoded (as happens with single-component variants
|
2020-03-11 22:29:51 +08:00
|
|
|
|
in types annotated with pragma Unchecked_Union). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
static int
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_choices (struct type *type, int field_num, struct ui_file *stream,
|
|
|
|
|
struct type *val_type)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
int have_output;
|
|
|
|
|
int p;
|
2021-08-30 23:49:49 +08:00
|
|
|
|
const char *name = type->field (field_num).name ();
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
have_output = 0;
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* Skip over leading 'V': NOTE soon to be obsolete. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
if (name[0] == 'V')
|
|
|
|
|
{
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (!ada_scan_number (name, 1, NULL, &p))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
goto Huh;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
p = 0;
|
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
2002-08-19 02:11:12 +08:00
|
|
|
|
switch (name[p])
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
default:
|
2010-10-04 14:37:54 +08:00
|
|
|
|
goto Huh;
|
|
|
|
|
case '_':
|
|
|
|
|
case '\0':
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " =>");
|
2010-10-04 14:37:54 +08:00
|
|
|
|
return 1;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
case 'S':
|
|
|
|
|
case 'R':
|
|
|
|
|
case 'O':
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (have_output)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " | ");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
have_output = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
switch (name[p])
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
case 'S':
|
|
|
|
|
{
|
|
|
|
|
LONGEST W;
|
2010-05-19 03:23:37 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (!ada_scan_number (name, p + 1, &W, &p))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
goto Huh;
|
|
|
|
|
ada_print_scalar (val_type, W, stream);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'R':
|
|
|
|
|
{
|
|
|
|
|
LONGEST L, U;
|
2010-05-19 03:23:37 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (!ada_scan_number (name, p + 1, &L, &p)
|
|
|
|
|
|| name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
goto Huh;
|
|
|
|
|
ada_print_scalar (val_type, L, stream);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " .. ");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
ada_print_scalar (val_type, U, stream);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 'O':
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "others");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
p += 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Huh:
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "? =>");
|
2010-10-04 14:37:54 +08:00
|
|
|
|
return 0;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-02-02 00:46:43 +08:00
|
|
|
|
/* A helper for print_variant_clauses that prints the members of
|
|
|
|
|
VAR_TYPE. DISCR_TYPE is the type of the discriminant (or nullptr
|
|
|
|
|
if not available). The discriminant is contained in OUTER_TYPE.
|
|
|
|
|
STREAM, LEVEL, SHOW, and FLAGS are the same as for
|
|
|
|
|
ada_print_type. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
print_variant_clauses (struct type *var_type, struct type *discr_type,
|
|
|
|
|
struct type *outer_type, struct ui_file *stream,
|
|
|
|
|
int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < var_type->num_fields (); i += 1)
|
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*swhen ", level, "");
|
2022-02-02 00:46:43 +08:00
|
|
|
|
if (print_choices (var_type, i, stream, discr_type))
|
|
|
|
|
{
|
|
|
|
|
if (print_record_field_types (var_type->field (i).type (),
|
|
|
|
|
outer_type, stream, show, level,
|
|
|
|
|
flags)
|
|
|
|
|
<= 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " null;");
|
2022-02-02 00:46:43 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
print_selected_record_field_types (var_type, outer_type, i, i,
|
|
|
|
|
stream, show, level, flags);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
/* Assuming that field FIELD_NUM of TYPE represents variants whose
|
|
|
|
|
discriminant is contained in OUTER_TYPE, print its components on STREAM.
|
|
|
|
|
LEVEL is the recursion (indentation) level, in case any of the fields
|
|
|
|
|
themselves have nested structure, and SHOW is the number of levels of
|
|
|
|
|
internal structure to show (see ada_print_type). For this purpose,
|
|
|
|
|
fields nested in a variant part are taken to be at the same level as
|
|
|
|
|
the fields immediately outside the variant part. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-07-25 09:14:26 +08:00
|
|
|
|
print_variant_clauses (struct type *type, int field_num,
|
|
|
|
|
struct type *outer_type, struct ui_file *stream,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2004-06-02 17:55:36 +08:00
|
|
|
|
struct type *var_type, *par_type;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
struct type *discr_type;
|
|
|
|
|
|
2020-06-09 03:26:20 +08:00
|
|
|
|
var_type = type->field (field_num).type ();
|
2002-06-04 23:28:49 +08:00
|
|
|
|
discr_type = ada_variant_discrim_type (var_type, outer_type);
|
|
|
|
|
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (var_type->code () == TYPE_CODE_PTR)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2022-07-31 10:43:54 +08:00
|
|
|
|
var_type = var_type->target_type ();
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (var_type == NULL || var_type->code () != TYPE_CODE_UNION)
|
2004-06-02 17:55:36 +08:00
|
|
|
|
return;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
par_type = ada_find_parallel_type (var_type, "___XVU");
|
|
|
|
|
if (par_type != NULL)
|
|
|
|
|
var_type = par_type;
|
|
|
|
|
|
2022-02-02 00:46:43 +08:00
|
|
|
|
print_variant_clauses (var_type, discr_type, outer_type, stream, show,
|
|
|
|
|
level + 4, flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* Assuming that field FIELD_NUM of TYPE is a variant part whose
|
2002-06-04 23:28:49 +08:00
|
|
|
|
discriminants are contained in OUTER_TYPE, print a description of it
|
2004-06-02 17:55:36 +08:00
|
|
|
|
on STREAM. LEVEL is the recursion (indentation) level, in case any of
|
|
|
|
|
the fields themselves have nested structure, and SHOW is the number of
|
|
|
|
|
levels of internal structure to show (see ada_print_type). For this
|
|
|
|
|
purpose, fields nested in a variant part are taken to be at the same
|
|
|
|
|
level as the fields immediately outside the variant part. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-07-25 09:14:26 +08:00
|
|
|
|
print_variant_part (struct type *type, int field_num, struct type *outer_type,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *stream, int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2019-12-04 04:31:21 +08:00
|
|
|
|
const char *variant
|
2020-06-09 03:26:20 +08:00
|
|
|
|
= ada_variant_discrim_name (type->field (field_num).type ());
|
2019-12-04 04:31:21 +08:00
|
|
|
|
if (*variant == '\0')
|
|
|
|
|
variant = "?";
|
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*scase %s is", level + 4, "", variant);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_variant_clauses (type, field_num, outer_type, stream, show,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
level + 4, flags);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*send case;", level + 4, "");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
/* Print a description on STREAM of the fields FLD0 through FLD1 in
|
|
|
|
|
record or union type TYPE, whose discriminants are in OUTER_TYPE.
|
|
|
|
|
LEVEL is the recursion (indentation) level, in case any of the
|
|
|
|
|
fields themselves have nested structure, and SHOW is the number of
|
|
|
|
|
levels of internal structure to show (see ada_print_type). Does
|
2010-11-23 08:58:04 +08:00
|
|
|
|
not print parent type information of TYPE. Returns 0 if no fields
|
2010-10-04 14:37:54 +08:00
|
|
|
|
printed, -1 for an incomplete type, else > 0. Prints each field
|
|
|
|
|
beginning on a new line, but does not put a new line at end. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static int
|
2010-10-04 14:37:54 +08:00
|
|
|
|
print_selected_record_field_types (struct type *type, struct type *outer_type,
|
|
|
|
|
int fld0, int fld1,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *stream, int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2010-10-04 14:37:54 +08:00
|
|
|
|
int i, flds;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
flds = 0;
|
|
|
|
|
|
2020-09-14 23:07:59 +08:00
|
|
|
|
if (fld0 > fld1 && type->is_stub ())
|
2002-06-04 23:28:49 +08:00
|
|
|
|
return -1;
|
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
for (i = fld0; i <= fld1; i += 1)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
QUIT;
|
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (ada_is_parent_field (type, i) || ada_is_ignored_field (type, i))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
;
|
|
|
|
|
else if (ada_is_wrapper_field (type, i))
|
2020-06-09 03:26:20 +08:00
|
|
|
|
flds += print_record_field_types (type->field (i).type (), type,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
stream, show, level, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else if (ada_is_variant_part (type, i))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_variant_part (type, i, outer_type, stream, show, level, flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
flds = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
flds += 1;
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*s", level + 4, "");
|
2020-06-09 03:26:20 +08:00
|
|
|
|
ada_print_type (type->field (i).type (),
|
2021-08-30 23:49:49 +08:00
|
|
|
|
type->field (i).name (),
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
stream, show - 1, level + 4, flags);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ";");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return flds;
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-25 03:40:31 +08:00
|
|
|
|
static void print_record_field_types_dynamic
|
|
|
|
|
(const gdb::array_view<variant_part> &parts,
|
|
|
|
|
int from, int to, struct type *type, struct ui_file *stream,
|
|
|
|
|
int show, int level, const struct type_print_options *flags);
|
|
|
|
|
|
|
|
|
|
/* Print the choices encoded by VARIANT on STREAM. LEVEL is the
|
|
|
|
|
indentation level. The type of the discriminant for VARIANT is
|
|
|
|
|
given by DISR_TYPE. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
print_choices (struct type *discr_type, const variant &variant,
|
|
|
|
|
struct ui_file *stream, int level)
|
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*swhen ", level, "");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
if (variant.is_default ())
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "others");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bool first = true;
|
|
|
|
|
for (const discriminant_range &range : variant.discriminants)
|
|
|
|
|
{
|
|
|
|
|
if (!first)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " | ");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
first = false;
|
|
|
|
|
|
|
|
|
|
ada_print_scalar (discr_type, range.low, stream);
|
|
|
|
|
if (range.low != range.high)
|
|
|
|
|
ada_print_scalar (discr_type, range.high, stream);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " =>");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print a single variant part, PART, on STREAM. TYPE is the
|
|
|
|
|
enclosing type. SHOW, LEVEL, and FLAGS are the usual type-printing
|
|
|
|
|
settings. This prints information about PART and the fields it
|
|
|
|
|
controls. It returns the index of the next field that should be
|
|
|
|
|
shown -- that is, one after the last field printed by this
|
|
|
|
|
call. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
print_variant_part (const variant_part &part,
|
|
|
|
|
struct type *type, struct ui_file *stream,
|
|
|
|
|
int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
|
|
|
|
{
|
|
|
|
|
struct type *discr_type = nullptr;
|
|
|
|
|
const char *name;
|
|
|
|
|
if (part.discriminant_index == -1)
|
|
|
|
|
name = "?";
|
|
|
|
|
else
|
|
|
|
|
{
|
2021-08-30 23:49:49 +08:00
|
|
|
|
name = type->field (part.discriminant_index).name ();;
|
2020-06-09 03:26:20 +08:00
|
|
|
|
discr_type = type->field (part.discriminant_index).type ();
|
2020-04-25 03:40:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*scase %s is", level + 4, "", name);
|
2020-04-25 03:40:31 +08:00
|
|
|
|
|
|
|
|
|
int last_field = -1;
|
|
|
|
|
for (const variant &variant : part.variants)
|
|
|
|
|
{
|
|
|
|
|
print_choices (discr_type, variant, stream, level + 8);
|
|
|
|
|
|
|
|
|
|
if (variant.first_field == variant.last_field)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " null;");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
print_record_field_types_dynamic (variant.parts,
|
|
|
|
|
variant.first_field,
|
|
|
|
|
variant.last_field, type, stream,
|
|
|
|
|
show, level + 8, flags);
|
|
|
|
|
last_field = variant.last_field;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*send case;", level + 4, "");
|
2020-04-25 03:40:31 +08:00
|
|
|
|
|
|
|
|
|
return last_field;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print some fields of TYPE to STREAM. SHOW, LEVEL, and FLAGS are
|
|
|
|
|
the usual type-printing settings. PARTS is the array of variant
|
|
|
|
|
parts that correspond to the range of fields to be printed. FROM
|
|
|
|
|
and TO are the range of fields to print. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
print_record_field_types_dynamic (const gdb::array_view<variant_part> &parts,
|
|
|
|
|
int from, int to,
|
|
|
|
|
struct type *type, struct ui_file *stream,
|
|
|
|
|
int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
|
|
|
|
{
|
|
|
|
|
int field = from;
|
|
|
|
|
|
|
|
|
|
for (const variant_part &part : parts)
|
|
|
|
|
{
|
|
|
|
|
if (part.variants.empty ())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
/* Print any non-varying fields. */
|
|
|
|
|
int first_varying = part.variants[0].first_field;
|
|
|
|
|
print_selected_record_field_types (type, type, field,
|
|
|
|
|
first_varying - 1, stream,
|
|
|
|
|
show, level, flags);
|
|
|
|
|
|
|
|
|
|
field = print_variant_part (part, type, stream, show, level, flags);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print any trailing fields that we were asked to print. */
|
|
|
|
|
print_selected_record_field_types (type, type, field, to - 1, stream, show,
|
|
|
|
|
level, flags);
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
/* Print a description on STREAM of all fields of record or union type
|
|
|
|
|
TYPE, as for print_selected_record_field_types, above. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
print_record_field_types (struct type *type, struct type *outer_type,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *stream, int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2010-10-04 14:37:54 +08:00
|
|
|
|
{
|
2020-05-07 23:32:25 +08:00
|
|
|
|
struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
|
2020-04-25 03:40:31 +08:00
|
|
|
|
if (prop != nullptr)
|
|
|
|
|
{
|
gdb: add accessors to struct dynamic_prop
Add setters, to ensure that the kind and value of the property are
always kept in sync (a caller can't forget one or the other). Add
getters, such that we can assert that when a caller accesses a data bit
of the property, the property is indeed of the corresponding kind.
Note that because of the way `struct dynamic_prop` is allocated
currently, we can't make the `m_kind` and `m_data` fields private. That
would make the type non-default-constructible, and we would have to call
the constructor when allocating them. However, I still prefixed them
with `m_` to indicate that they should not be accessed from outside the
class (and also to be able to use the name `kind` for the method).
gdb/ChangeLog:
* gdbtypes.h (struct dynamic_prop) <kind, set_undefined,
const_val, set_const_val, baton, set_locexpr, set_loclist,
set_addr_offset, variant_parts, set_variant_parts,
original_type, set_original_type>: New methods.
<kind>: Rename to...
<m_kind>: ... this. Update all users to use the new methods
instead.
<data>: Rename to...
<m_data>: ... this. Update all users to use the new methods
instead.
Change-Id: Ib72a8eb440dfeb1a5421d0933334230d7f2478f9
2020-07-13 10:58:51 +08:00
|
|
|
|
if (prop->kind () == PROP_TYPE)
|
2020-04-25 03:40:31 +08:00
|
|
|
|
{
|
gdb: add accessors to struct dynamic_prop
Add setters, to ensure that the kind and value of the property are
always kept in sync (a caller can't forget one or the other). Add
getters, such that we can assert that when a caller accesses a data bit
of the property, the property is indeed of the corresponding kind.
Note that because of the way `struct dynamic_prop` is allocated
currently, we can't make the `m_kind` and `m_data` fields private. That
would make the type non-default-constructible, and we would have to call
the constructor when allocating them. However, I still prefixed them
with `m_` to indicate that they should not be accessed from outside the
class (and also to be able to use the name `kind` for the method).
gdb/ChangeLog:
* gdbtypes.h (struct dynamic_prop) <kind, set_undefined,
const_val, set_const_val, baton, set_locexpr, set_loclist,
set_addr_offset, variant_parts, set_variant_parts,
original_type, set_original_type>: New methods.
<kind>: Rename to...
<m_kind>: ... this. Update all users to use the new methods
instead.
<data>: Rename to...
<m_data>: ... this. Update all users to use the new methods
instead.
Change-Id: Ib72a8eb440dfeb1a5421d0933334230d7f2478f9
2020-07-13 10:58:51 +08:00
|
|
|
|
type = prop->original_type ();
|
2020-05-07 23:32:25 +08:00
|
|
|
|
prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
|
2020-04-25 03:40:31 +08:00
|
|
|
|
}
|
gdb: add accessors to struct dynamic_prop
Add setters, to ensure that the kind and value of the property are
always kept in sync (a caller can't forget one or the other). Add
getters, such that we can assert that when a caller accesses a data bit
of the property, the property is indeed of the corresponding kind.
Note that because of the way `struct dynamic_prop` is allocated
currently, we can't make the `m_kind` and `m_data` fields private. That
would make the type non-default-constructible, and we would have to call
the constructor when allocating them. However, I still prefixed them
with `m_` to indicate that they should not be accessed from outside the
class (and also to be able to use the name `kind` for the method).
gdb/ChangeLog:
* gdbtypes.h (struct dynamic_prop) <kind, set_undefined,
const_val, set_const_val, baton, set_locexpr, set_loclist,
set_addr_offset, variant_parts, set_variant_parts,
original_type, set_original_type>: New methods.
<kind>: Rename to...
<m_kind>: ... this. Update all users to use the new methods
instead.
<data>: Rename to...
<m_data>: ... this. Update all users to use the new methods
instead.
Change-Id: Ib72a8eb440dfeb1a5421d0933334230d7f2478f9
2020-07-13 10:58:51 +08:00
|
|
|
|
gdb_assert (prop->kind () == PROP_VARIANT_PARTS);
|
|
|
|
|
print_record_field_types_dynamic (*prop->variant_parts (),
|
2020-05-23 04:55:15 +08:00
|
|
|
|
0, type->num_fields (),
|
2020-04-25 03:40:31 +08:00
|
|
|
|
type, stream, show, level, flags);
|
2020-05-23 04:55:15 +08:00
|
|
|
|
return type->num_fields ();
|
2020-04-25 03:40:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
2010-10-04 14:37:54 +08:00
|
|
|
|
return print_selected_record_field_types (type, outer_type,
|
2020-05-23 04:55:15 +08:00
|
|
|
|
0, type->num_fields () - 1,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
stream, show, level, flags);
|
2010-10-04 14:37:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
/* Print record type TYPE on STREAM. LEVEL is the recursion (indentation)
|
|
|
|
|
level, in case the element type itself has nested structure, and SHOW is
|
|
|
|
|
the number of levels of internal structure to show (see ada_print_type). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_record_type (struct type *type0, struct ui_file *stream, int show,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
int level, const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2002-08-19 02:11:12 +08:00
|
|
|
|
struct type *parent_type;
|
|
|
|
|
struct type *type;
|
|
|
|
|
|
2004-06-02 17:55:36 +08:00
|
|
|
|
type = ada_find_parallel_type (type0, "___XVE");
|
|
|
|
|
if (type == NULL)
|
|
|
|
|
type = type0;
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
parent_type = ada_parent_type (type);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (ada_type_name (parent_type) != NULL)
|
2011-07-02 02:27:35 +08:00
|
|
|
|
{
|
|
|
|
|
const char *parent_name = decoded_type_name (parent_type);
|
|
|
|
|
|
|
|
|
|
/* If we fail to decode the parent type name, then use the parent
|
|
|
|
|
type name as is. Not pretty, but should never happen except
|
|
|
|
|
when the debugging info is incomplete or incorrect. This
|
|
|
|
|
prevents a crash trying to print a NULL pointer. */
|
|
|
|
|
if (parent_name == NULL)
|
|
|
|
|
parent_name = ada_type_name (parent_type);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "new %s with record", parent_name);
|
2011-07-02 02:27:35 +08:00
|
|
|
|
}
|
2004-06-02 17:55:36 +08:00
|
|
|
|
else if (parent_type == NULL && ada_is_tagged_type (type, 0))
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "tagged record");
|
2004-12-21 18:03:55 +08:00
|
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "record");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
if (show < 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " ... end record");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int flds;
|
|
|
|
|
|
|
|
|
|
flds = 0;
|
|
|
|
|
if (parent_type != NULL && ada_type_name (parent_type) == NULL)
|
2002-08-19 02:11:12 +08:00
|
|
|
|
flds += print_record_field_types (parent_type, parent_type,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
stream, show, level, flags);
|
|
|
|
|
flds += print_record_field_types (type, type, stream, show, level,
|
|
|
|
|
flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
|
2002-06-04 23:28:49 +08:00
|
|
|
|
if (flds > 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*send record", level, "");
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else if (flds < 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, _(" <incomplete type> end record"));
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " null; end record");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Print the unchecked union type TYPE in something resembling Ada
|
2004-06-02 17:55:36 +08:00
|
|
|
|
format on STREAM. LEVEL is the recursion (indentation) level
|
2002-06-04 23:28:49 +08:00
|
|
|
|
in case the element type itself has nested structure, and SHOW is the
|
2004-06-02 17:55:36 +08:00
|
|
|
|
number of levels of internal structure to show (see ada_print_type). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
static void
|
2002-08-19 02:11:12 +08:00
|
|
|
|
print_unchecked_union_type (struct type *type, struct ui_file *stream,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
|
|
|
|
if (show < 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "record (?) is ... end record");
|
2020-05-23 04:55:15 +08:00
|
|
|
|
else if (type->num_fields () == 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "record (?) is null; end record");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "record (?) is\n%*scase ? is", level + 4, "");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-02-02 00:46:43 +08:00
|
|
|
|
print_variant_clauses (type, nullptr, type, stream, show, level + 8, flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "\n%*send case;\n%*send record",
|
|
|
|
|
level + 4, "", level, "");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2002-08-19 02:11:12 +08:00
|
|
|
|
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Print function or procedure type TYPE on STREAM. Make it a header
|
2004-06-02 17:55:36 +08:00
|
|
|
|
for function or procedure NAME if NAME is not null. */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
static void
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_func_type (struct type *type, struct ui_file *stream, const char *name,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2020-05-23 04:55:15 +08:00
|
|
|
|
int i, len = type->num_fields ();
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-07-31 10:43:54 +08:00
|
|
|
|
if (type->target_type () != NULL
|
|
|
|
|
&& type->target_type ()->code () == TYPE_CODE_VOID)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "procedure");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "function");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (name != NULL && name[0] != '\0')
|
2019-01-11 05:31:07 +08:00
|
|
|
|
{
|
2022-01-03 02:36:44 +08:00
|
|
|
|
gdb_puts (" ", stream);
|
2019-01-11 05:31:07 +08:00
|
|
|
|
fputs_styled (name, function_name_style.style (), stream);
|
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2002-08-19 02:11:12 +08:00
|
|
|
|
if (len > 0)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " (");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
for (i = 0; i < len; i += 1)
|
|
|
|
|
{
|
|
|
|
|
if (i > 0)
|
|
|
|
|
{
|
2022-01-03 02:36:44 +08:00
|
|
|
|
gdb_puts ("; ", stream);
|
2021-12-31 01:29:03 +08:00
|
|
|
|
stream->wrap_here (4);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "a%d: ", i + 1);
|
2020-06-09 03:26:20 +08:00
|
|
|
|
ada_print_type (type->field (i).type (), "", stream, -1, 0,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ")");
|
2002-08-19 02:11:12 +08:00
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2022-07-31 10:43:54 +08:00
|
|
|
|
if (type->target_type () == NULL)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " return <unknown return type>");
|
2022-07-31 10:43:54 +08:00
|
|
|
|
else if (type->target_type ()->code () != TYPE_CODE_VOID)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, " return ");
|
2022-07-31 10:43:54 +08:00
|
|
|
|
ada_print_type (type->target_type (), "", stream, 0, 0, flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Print a description of a type TYPE0.
|
|
|
|
|
Output goes to STREAM (via stdio).
|
2022-10-21 00:55:35 +08:00
|
|
|
|
If VARSTRING is a non-NULL, non-empty string, print as an Ada
|
|
|
|
|
variable/field declaration.
|
2004-06-02 17:55:36 +08:00
|
|
|
|
SHOW+1 is the maximum number of levels of internal type structure
|
2002-06-04 23:28:49 +08:00
|
|
|
|
to show (this applies to record types, enumerated types, and
|
|
|
|
|
array types).
|
|
|
|
|
SHOW is the number of levels of internal type structure to show
|
2004-06-02 17:55:36 +08:00
|
|
|
|
when there is a type name for the SHOWth deepest level (0th is
|
2002-06-04 23:28:49 +08:00
|
|
|
|
outer level).
|
|
|
|
|
When SHOW<0, no inner structure is shown.
|
2004-06-02 17:55:36 +08:00
|
|
|
|
LEVEL indicates level of recursion (for nested definitions). */
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
|
|
|
|
void
|
2010-06-14 16:26:57 +08:00
|
|
|
|
ada_print_type (struct type *type0, const char *varstring,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
struct ui_file *stream, int show, int level,
|
|
|
|
|
const struct type_print_options *flags)
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
Make "ptype INTERNAL_FUNCTION" in Ada print like other languages
Currently, printing the type of an internal function in Ada shows
double <>s, like:
(gdb) with language ada -- ptype $_isvoid
type = <<internal function>>
while all other languages print it with a single <>, like:
(gdb) with language c -- ptype $_isvoid
type = <internal function>
I don't think there's a reason that Ada needs to be different. We
currently print the double <>s because we take this path in
ada_print_type:
switch (type->code ())
{
default:
gdb_printf (stream, "<");
c_print_type (type, "", stream, show, level, language_ada, flags);
gdb_printf (stream, ">");
break;
... and the type's name already has the <>s.
Fix this by simply adding an early check for
TYPE_CODE_INTERNAL_FUNCTION.
Approved-By: Andrew Burgess <aburgess@redhat.com>
Approved-By: Tom Tromey <tom@tromey.com>
Change-Id: Ic2b6527b9240a367471431023f6e27e6daed5501
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30105
2023-02-10 19:55:00 +08:00
|
|
|
|
if (type0->code () == TYPE_CODE_INTERNAL_FUNCTION)
|
|
|
|
|
{
|
|
|
|
|
c_print_type (type0, "", stream, show, level,
|
|
|
|
|
language_ada, flags);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2004-10-08 17:40:12 +08:00
|
|
|
|
struct type *type = ada_check_typedef (ada_get_base_type (type0));
|
2020-11-05 00:17:58 +08:00
|
|
|
|
/* If we can decode the original type name, use it. However, there
|
|
|
|
|
are cases where the original type is an internally-generated type
|
|
|
|
|
with a name that can't be decoded (and whose encoded name might
|
|
|
|
|
not actually bear any relation to the type actually declared in
|
|
|
|
|
the sources). In that case, try using the name of the base type
|
|
|
|
|
in its place.
|
|
|
|
|
|
|
|
|
|
Note that we looked at the possibility of always using the name
|
|
|
|
|
of the base type. This does not always work, unfortunately, as
|
|
|
|
|
there are situations where it's the base type which has an
|
|
|
|
|
internally-generated name. */
|
|
|
|
|
const char *type_name = decoded_type_name (type0);
|
|
|
|
|
if (type_name == nullptr)
|
|
|
|
|
type_name = decoded_type_name (type);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
int is_var_decl = (varstring != NULL && varstring[0] != '\0');
|
|
|
|
|
|
|
|
|
|
if (type == NULL)
|
|
|
|
|
{
|
|
|
|
|
if (is_var_decl)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%.*s: ",
|
|
|
|
|
ada_name_prefix_len (varstring), varstring);
|
Introduce metadata style
This introduces a new "metadata" style and changes many places in gdb
to use it. The idea here is to let the user distinguish gdb output
from output that (conceptually at least) comes directly from the
inferior. The newly-styled category includes text that gdb
traditionally surrounds in "<...>", like "<unavailable>".
I only added a single test for this. In many cases this output is
difficult to test. Also, while developing this errors in the
implementation of the new printf formats showed up as regressions.
gdb/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* p-lang.c (pascal_printstr): Use metadata style.
* value.c (show_convenience): Use metadata style.
* valprint.c (valprint_check_validity, val_print_optimized_out)
(val_print_not_saved, val_print_unavailable)
(val_print_invalid_address, generic_val_print, val_print)
(value_check_printable, val_print_array_elements): Use metadata
style.
* ui-out.h (class ui_out) <field_fmt>: New overload.
<do_field_fmt>: Add style parameter.
* ui-out.c (ui_out::field_fmt): New overload.
* typeprint.c (type_print_unknown_return_type)
(val_print_not_allocated, val_print_not_associated): Use metadata
style.
* tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style
parameter.
* tui/tui-out.c (tui_ui_out::do_field_fmt): Update.
* tracepoint.c (tvariables_info_1): Use metadata style.
* stack.c (print_frame_arg, print_frame_info, print_frame)
(info_frame_command_core): Use metadata style.
* skip.c (info_skip_command): Use metadata style.
* rust-lang.c (rust_print_enum): Use metadata style.
* python/py-prettyprint.c (print_stack_unless_memory_error): Use
metadata style.
* python/py-framefilter.c (py_print_single_arg): Use metadata
style.
* printcmd.c (do_one_display, print_variable_and_value): Use
metadata style.
* p-valprint.c (pascal_val_print)
(pascal_object_print_value_fields): Use metadata style.
* p-typeprint.c (pascal_type_print_base): Use metadata style.
* mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style
parameter.
* mi/mi-out.c (mi_ui_out::do_field_fmt): Update.
* m2-valprint.c (m2_print_long_set): Use metadata style.
* m2-typeprint.c (m2_print_type): Use metadata style.
* infcmd.c (print_return_value_1): Use metadata style.
* gnu-v3-abi.c (print_one_vtable): Use metadata style.
* f-valprint.c (info_common_command_for_block): Use metadata
style.
* f-typeprint.c (f_type_print_base): Use metadata style.
* expprint.c (print_subexp_standard): Use metadata style.
* cp-valprint.c (cp_print_value_fields): Use metadata style.
* cli/cli-style.h (class cli_style_option): Add constructor.
(metadata_style): Declare.
* cli/cli-style.c (metadata_style): New global.
(_initialize_cli_style): Register metadata style.
* cli-out.h (class cli_ui_out) <do_field_fmt>: Add style
parameter.
* cli-out.c (cli_ui_out::do_field_fmt): Update.
* c-typeprint.c (c_type_print_base_struct_union)
(c_type_print_base_1): Use metadata style.
* breakpoint.c (watchpoint_value_print)
(print_one_breakpoint_location): Use metadata style.
* break-catch-syscall.c (print_one_catch_syscall): Use metadata
style.
* break-catch-sig.c (signal_catchpoint_print_one): Use metadata
style.
* ada-valprint.c (val_print_packed_array_elements, printstr)
(print_field_values, ada_val_print_ref, ada_val_print): Use
metadata style.
* ada-typeprint.c (print_array_type, ada_print_type): Use metadata
style.
* ada-tasks.c (print_ada_task_info, info_task): Use metadata
style.
* ada-lang.c (user_select_syms): Use metadata style.
gdb/testsuite/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* lib/gdb-utils.exp (style): Handle "metadata" argument.
* gdb.base/style.exp: Add metadata style test.
2019-04-03 10:00:18 +08:00
|
|
|
|
fprintf_styled (stream, metadata_style.style (), "<null type?>");
|
2002-06-04 23:28:49 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-15 01:46:38 +08:00
|
|
|
|
if (is_var_decl && type->code () != TYPE_CODE_FUNC)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%.*s: ",
|
|
|
|
|
ada_name_prefix_len (varstring), varstring);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
|
2011-07-02 02:27:25 +08:00
|
|
|
|
if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type))
|
2002-06-04 23:28:49 +08:00
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "%.*s",
|
|
|
|
|
ada_name_prefix_len (type_name), type_name);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ada_is_aligner_type (type))
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
ada_print_type (ada_aligned_type (type), "", stream, show, level, flags);
|
2011-07-02 02:27:25 +08:00
|
|
|
|
else if (ada_is_constrained_packed_array_type (type)
|
2020-05-15 01:46:38 +08:00
|
|
|
|
&& type->code () != TYPE_CODE_PTR)
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_array_type (type, stream, show, level, flags);
|
2002-06-04 23:28:49 +08:00
|
|
|
|
else
|
2020-05-15 01:46:38 +08:00
|
|
|
|
switch (type->code ())
|
2002-08-19 02:11:12 +08:00
|
|
|
|
{
|
|
|
|
|
default:
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "<");
|
Always pass an explicit language down to c_type_print
The next patch will want to do language->print_type(type, ...), to
print a type in a given language, avoiding a dependency on the current
language. That doesn't work correctly currently, however, because
most language implementations of language_defn::print_type call
c_print_type without passing down the language. There are two
overloads of c_print_type, one that takes a language, and one that
does not. The one that does not uses the current language, defeating
the point of calling language->print_type()...
This commit removes the c_print_type overload that does not take a
language, and adjusts the codebase throughout to always pass down a
language. In most places, there's already an enum language handy.
language_defn::print_type implementations naturally pass down
this->la_language. In a couple spots, like in ada-typeprint.c and
rust-lang.c there's no enum language handy, but the code is written
for a specific language, so we just hardcode the language.
In gnuv3_print_method_ptr, I wasn't sure whether we could hardcode C++
here, and we don't have an enum language handy, so I made it use the
current language, just like today. Can always be improved later.
Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b
2022-04-30 06:21:18 +08:00
|
|
|
|
c_print_type (type, "", stream, show, level, language_ada, flags);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ">");
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_PTR:
|
2010-12-29 16:01:32 +08:00
|
|
|
|
case TYPE_CODE_TYPEDEF:
|
2020-11-05 00:17:58 +08:00
|
|
|
|
/* An __XVL field is not truly a pointer, so don't print
|
|
|
|
|
"access" in this case. */
|
|
|
|
|
if (type->code () != TYPE_CODE_PTR
|
2022-10-21 00:55:35 +08:00
|
|
|
|
|| (varstring != nullptr
|
|
|
|
|
&& strstr (varstring, "___XVL") == nullptr))
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "access ");
|
2022-07-31 10:43:54 +08:00
|
|
|
|
ada_print_type (type->target_type (), "", stream, show, level,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_REF:
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "<ref> ");
|
2022-07-31 10:43:54 +08:00
|
|
|
|
ada_print_type (type->target_type (), "", stream, show, level,
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_ARRAY:
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_array_type (type, stream, show, level, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
2008-08-19 18:10:39 +08:00
|
|
|
|
case TYPE_CODE_BOOL:
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "(false, true)");
|
2008-08-19 18:10:39 +08:00
|
|
|
|
break;
|
2002-08-19 02:11:12 +08:00
|
|
|
|
case TYPE_CODE_INT:
|
Rewrite GNAT-encoded fixed point types in DWARF reader
gdb currently supports two different styles of fixed-point. The
original style, where fixed point types are "GNAT encoded", is handled
primarily in the Ada code. The newer style, encoded using DWARF, is
handled by the core of gdb.
This patch changes gdb to read the GNAT encodings in the DWARF reader
as well. This removes some code and unifies the two paths. As a
result, GNAT-encoded fixed-point now works a bit better.
One possible drawback of this change is that, if someone uses stabs,
then fixed-point might now stop working. I consider stabs to be fully
obsolete, though, so I don't intend to address this.
gdb/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* ada-lang.c (cast_from_gnat_encoded_fixed_point_type)
(cast_to_gnat_encoded_fixed_point_type): Remove.
(ada_value_cast, ada_evaluate_subexp): Update.
(gnat_encoded_fixed_point_type_info)
(ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Remove.
* ada-lang.h (ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Don't declare.
* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove.
(ada_print_type): Update.
* ada-valprint.c (ada_value_print_num): Update.
* dwarf2/read.c (ada_get_gnat_encoded_number)
(ada_get_gnat_encoded_ratio): New functions.
(finish_fixed_point_type): Use them. Add parameters.
(GNAT_FIXED_POINT_SUFFIX): New define.
(gnat_encoded_fixed_point_type_info): New function.
(read_base_type): Handle gnat encodings.
gdb/testsuite/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* gdb.ada/fixed_points.exp: Remove most special cases for minimal
encodings.
2021-03-03 04:08:24 +08:00
|
|
|
|
{
|
|
|
|
|
const char *name = ada_type_name (type);
|
|
|
|
|
|
|
|
|
|
if (!ada_is_range_type_name (name))
|
|
|
|
|
fprintf_styled (stream, metadata_style.style (),
|
|
|
|
|
_("<%s-byte integer>"),
|
2022-09-21 23:05:21 +08:00
|
|
|
|
pulongest (type->length ()));
|
Rewrite GNAT-encoded fixed point types in DWARF reader
gdb currently supports two different styles of fixed-point. The
original style, where fixed point types are "GNAT encoded", is handled
primarily in the Ada code. The newer style, encoded using DWARF, is
handled by the core of gdb.
This patch changes gdb to read the GNAT encodings in the DWARF reader
as well. This removes some code and unifies the two paths. As a
result, GNAT-encoded fixed-point now works a bit better.
One possible drawback of this change is that, if someone uses stabs,
then fixed-point might now stop working. I consider stabs to be fully
obsolete, though, so I don't intend to address this.
gdb/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* ada-lang.c (cast_from_gnat_encoded_fixed_point_type)
(cast_to_gnat_encoded_fixed_point_type): Remove.
(ada_value_cast, ada_evaluate_subexp): Update.
(gnat_encoded_fixed_point_type_info)
(ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Remove.
* ada-lang.h (ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Don't declare.
* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove.
(ada_print_type): Update.
* ada-valprint.c (ada_value_print_num): Update.
* dwarf2/read.c (ada_get_gnat_encoded_number)
(ada_get_gnat_encoded_ratio): New functions.
(finish_fixed_point_type): Use them. Add parameters.
(GNAT_FIXED_POINT_SUFFIX): New define.
(gnat_encoded_fixed_point_type_info): New function.
(read_base_type): Handle gnat encodings.
gdb/testsuite/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* gdb.ada/fixed_points.exp: Remove most special cases for minimal
encodings.
2021-03-03 04:08:24 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "range ");
|
2023-06-04 04:43:57 +08:00
|
|
|
|
print_range_type (type, stream, 1 /* bounds_preferred_p */);
|
Rewrite GNAT-encoded fixed point types in DWARF reader
gdb currently supports two different styles of fixed-point. The
original style, where fixed point types are "GNAT encoded", is handled
primarily in the Ada code. The newer style, encoded using DWARF, is
handled by the core of gdb.
This patch changes gdb to read the GNAT encodings in the DWARF reader
as well. This removes some code and unifies the two paths. As a
result, GNAT-encoded fixed-point now works a bit better.
One possible drawback of this change is that, if someone uses stabs,
then fixed-point might now stop working. I consider stabs to be fully
obsolete, though, so I don't intend to address this.
gdb/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* ada-lang.c (cast_from_gnat_encoded_fixed_point_type)
(cast_to_gnat_encoded_fixed_point_type): Remove.
(ada_value_cast, ada_evaluate_subexp): Update.
(gnat_encoded_fixed_point_type_info)
(ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Remove.
* ada-lang.h (ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Don't declare.
* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove.
(ada_print_type): Update.
* ada-valprint.c (ada_value_print_num): Update.
* dwarf2/read.c (ada_get_gnat_encoded_number)
(ada_get_gnat_encoded_ratio): New functions.
(finish_fixed_point_type): Use them. Add parameters.
(GNAT_FIXED_POINT_SUFFIX): New define.
(gnat_encoded_fixed_point_type_info): New function.
(read_base_type): Handle gnat encodings.
gdb/testsuite/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* gdb.ada/fixed_points.exp: Remove most special cases for minimal
encodings.
2021-03-03 04:08:24 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_RANGE:
|
Rewrite GNAT-encoded fixed point types in DWARF reader
gdb currently supports two different styles of fixed-point. The
original style, where fixed point types are "GNAT encoded", is handled
primarily in the Ada code. The newer style, encoded using DWARF, is
handled by the core of gdb.
This patch changes gdb to read the GNAT encodings in the DWARF reader
as well. This removes some code and unifies the two paths. As a
result, GNAT-encoded fixed-point now works a bit better.
One possible drawback of this change is that, if someone uses stabs,
then fixed-point might now stop working. I consider stabs to be fully
obsolete, though, so I don't intend to address this.
gdb/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* ada-lang.c (cast_from_gnat_encoded_fixed_point_type)
(cast_to_gnat_encoded_fixed_point_type): Remove.
(ada_value_cast, ada_evaluate_subexp): Update.
(gnat_encoded_fixed_point_type_info)
(ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Remove.
* ada-lang.h (ada_is_gnat_encoded_fixed_point_type)
(gnat_encoded_fixed_point_delta)
(gnat_encoded_fixed_point_scaling_factor): Don't declare.
* ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove.
(ada_print_type): Update.
* ada-valprint.c (ada_value_print_num): Update.
* dwarf2/read.c (ada_get_gnat_encoded_number)
(ada_get_gnat_encoded_ratio): New functions.
(finish_fixed_point_type): Use them. Add parameters.
(GNAT_FIXED_POINT_SUFFIX): New define.
(gnat_encoded_fixed_point_type_info): New function.
(read_base_type): Handle gnat encodings.
gdb/testsuite/ChangeLog
2021-03-02 Tom Tromey <tromey@adacore.com>
* gdb.ada/fixed_points.exp: Remove most special cases for minimal
encodings.
2021-03-03 04:08:24 +08:00
|
|
|
|
if (is_fixed_point_type (type))
|
2020-11-15 16:16:01 +08:00
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "<");
|
2020-11-15 16:16:01 +08:00
|
|
|
|
print_type_fixed_point (type, stream);
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, ">");
|
2020-11-15 16:16:01 +08:00
|
|
|
|
}
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else if (ada_is_modular_type (type))
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "mod %s",
|
|
|
|
|
int_string (ada_modulus (type), 10, 0, 0, 1));
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "range ");
|
2023-06-04 04:43:57 +08:00
|
|
|
|
print_range (type, stream, 1 /* bounds_preferred_p */);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_FLT:
|
Introduce metadata style
This introduces a new "metadata" style and changes many places in gdb
to use it. The idea here is to let the user distinguish gdb output
from output that (conceptually at least) comes directly from the
inferior. The newly-styled category includes text that gdb
traditionally surrounds in "<...>", like "<unavailable>".
I only added a single test for this. In many cases this output is
difficult to test. Also, while developing this errors in the
implementation of the new printf formats showed up as regressions.
gdb/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* p-lang.c (pascal_printstr): Use metadata style.
* value.c (show_convenience): Use metadata style.
* valprint.c (valprint_check_validity, val_print_optimized_out)
(val_print_not_saved, val_print_unavailable)
(val_print_invalid_address, generic_val_print, val_print)
(value_check_printable, val_print_array_elements): Use metadata
style.
* ui-out.h (class ui_out) <field_fmt>: New overload.
<do_field_fmt>: Add style parameter.
* ui-out.c (ui_out::field_fmt): New overload.
* typeprint.c (type_print_unknown_return_type)
(val_print_not_allocated, val_print_not_associated): Use metadata
style.
* tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style
parameter.
* tui/tui-out.c (tui_ui_out::do_field_fmt): Update.
* tracepoint.c (tvariables_info_1): Use metadata style.
* stack.c (print_frame_arg, print_frame_info, print_frame)
(info_frame_command_core): Use metadata style.
* skip.c (info_skip_command): Use metadata style.
* rust-lang.c (rust_print_enum): Use metadata style.
* python/py-prettyprint.c (print_stack_unless_memory_error): Use
metadata style.
* python/py-framefilter.c (py_print_single_arg): Use metadata
style.
* printcmd.c (do_one_display, print_variable_and_value): Use
metadata style.
* p-valprint.c (pascal_val_print)
(pascal_object_print_value_fields): Use metadata style.
* p-typeprint.c (pascal_type_print_base): Use metadata style.
* mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style
parameter.
* mi/mi-out.c (mi_ui_out::do_field_fmt): Update.
* m2-valprint.c (m2_print_long_set): Use metadata style.
* m2-typeprint.c (m2_print_type): Use metadata style.
* infcmd.c (print_return_value_1): Use metadata style.
* gnu-v3-abi.c (print_one_vtable): Use metadata style.
* f-valprint.c (info_common_command_for_block): Use metadata
style.
* f-typeprint.c (f_type_print_base): Use metadata style.
* expprint.c (print_subexp_standard): Use metadata style.
* cp-valprint.c (cp_print_value_fields): Use metadata style.
* cli/cli-style.h (class cli_style_option): Add constructor.
(metadata_style): Declare.
* cli/cli-style.c (metadata_style): New global.
(_initialize_cli_style): Register metadata style.
* cli-out.h (class cli_ui_out) <do_field_fmt>: Add style
parameter.
* cli-out.c (cli_ui_out::do_field_fmt): Update.
* c-typeprint.c (c_type_print_base_struct_union)
(c_type_print_base_1): Use metadata style.
* breakpoint.c (watchpoint_value_print)
(print_one_breakpoint_location): Use metadata style.
* break-catch-syscall.c (print_one_catch_syscall): Use metadata
style.
* break-catch-sig.c (signal_catchpoint_print_one): Use metadata
style.
* ada-valprint.c (val_print_packed_array_elements, printstr)
(print_field_values, ada_val_print_ref, ada_val_print): Use
metadata style.
* ada-typeprint.c (print_array_type, ada_print_type): Use metadata
style.
* ada-tasks.c (print_ada_task_info, info_task): Use metadata
style.
* ada-lang.c (user_select_syms): Use metadata style.
gdb/testsuite/ChangeLog
2019-10-01 Tom Tromey <tom@tromey.com>
* lib/gdb-utils.exp (style): Handle "metadata" argument.
* gdb.base/style.exp: Add metadata style test.
2019-04-03 10:00:18 +08:00
|
|
|
|
fprintf_styled (stream, metadata_style.style (),
|
|
|
|
|
_("<%s-byte float>"),
|
2022-09-21 23:05:21 +08:00
|
|
|
|
pulongest (type->length ()));
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_ENUM:
|
|
|
|
|
if (show < 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
|
gdb_printf (stream, "(...)");
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
|
|
|
|
print_enum_type (type, stream);
|
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_STRUCT:
|
2004-06-02 17:55:36 +08:00
|
|
|
|
if (ada_is_array_descriptor_type (type))
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_array_type (type, stream, show, level, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
else
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_record_type (type, stream, show, level, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_UNION:
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_unchecked_union_type (type, stream, show, level, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
case TYPE_CODE_FUNC:
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
print_func_type (type, stream, varstring, flags);
|
2002-08-19 02:11:12 +08:00
|
|
|
|
break;
|
|
|
|
|
}
|
2002-06-04 23:28:49 +08:00
|
|
|
|
}
|
2010-04-21 06:38:02 +08:00
|
|
|
|
|
|
|
|
|
/* Implement the la_print_typedef language method for Ada. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ada_print_typedef (struct type *type, struct symbol *new_symbol,
|
gdb, gdbserver, gdbsupport: fix leading space vs tabs issues
Many spots incorrectly use only spaces for indentation (for example,
there are a lot of spots in ada-lang.c). I've always found it awkward
when I needed to edit one of these spots: do I keep the original wrong
indentation, or do I fix it? What if the lines around it are also
wrong, do I fix them too? I probably don't want to fix them in the same
patch, to avoid adding noise to my patch.
So I propose to fix as much as possible once and for all (hopefully).
One typical counter argument for this is that it makes code archeology
more difficult, because git-blame will show this commit as the last
change for these lines. My counter counter argument is: when
git-blaming, you often need to do "blame the file at the parent commit"
anyway, to go past some other refactor that touched the line you are
interested in, but is not the change you are looking for. So you
already need a somewhat efficient way to do this.
Using some interactive tool, rather than plain git-blame, makes this
trivial. For example, I use "tig blame <file>", where going back past
the commit that changed the currently selected line is one keystroke.
It looks like Magit in Emacs does it too (though I've never used it).
Web viewers of Github and Gitlab do it too. My point is that it won't
really make archeology more difficult.
The other typical counter argument is that it will cause conflicts with
existing patches. That's true... but it's a one time cost, and those
are not conflicts that are difficult to resolve. I have also tried "git
rebase --ignore-whitespace", it seems to work well. Although that will
re-introduce the faulty indentation, so one needs to take care of fixing
the indentation in the patch after that (which is easy).
gdb/ChangeLog:
* aarch64-linux-tdep.c: Fix indentation.
* aarch64-ravenscar-thread.c: Fix indentation.
* aarch64-tdep.c: Fix indentation.
* aarch64-tdep.h: Fix indentation.
* ada-lang.c: Fix indentation.
* ada-lang.h: Fix indentation.
* ada-tasks.c: Fix indentation.
* ada-typeprint.c: Fix indentation.
* ada-valprint.c: Fix indentation.
* ada-varobj.c: Fix indentation.
* addrmap.c: Fix indentation.
* addrmap.h: Fix indentation.
* agent.c: Fix indentation.
* aix-thread.c: Fix indentation.
* alpha-bsd-nat.c: Fix indentation.
* alpha-linux-tdep.c: Fix indentation.
* alpha-mdebug-tdep.c: Fix indentation.
* alpha-nbsd-tdep.c: Fix indentation.
* alpha-obsd-tdep.c: Fix indentation.
* alpha-tdep.c: Fix indentation.
* amd64-bsd-nat.c: Fix indentation.
* amd64-darwin-tdep.c: Fix indentation.
* amd64-linux-nat.c: Fix indentation.
* amd64-linux-tdep.c: Fix indentation.
* amd64-nat.c: Fix indentation.
* amd64-obsd-tdep.c: Fix indentation.
* amd64-tdep.c: Fix indentation.
* amd64-windows-tdep.c: Fix indentation.
* annotate.c: Fix indentation.
* arc-tdep.c: Fix indentation.
* arch-utils.c: Fix indentation.
* arch/arm-get-next-pcs.c: Fix indentation.
* arch/arm.c: Fix indentation.
* arm-linux-nat.c: Fix indentation.
* arm-linux-tdep.c: Fix indentation.
* arm-nbsd-tdep.c: Fix indentation.
* arm-pikeos-tdep.c: Fix indentation.
* arm-tdep.c: Fix indentation.
* arm-tdep.h: Fix indentation.
* arm-wince-tdep.c: Fix indentation.
* auto-load.c: Fix indentation.
* auxv.c: Fix indentation.
* avr-tdep.c: Fix indentation.
* ax-gdb.c: Fix indentation.
* ax-general.c: Fix indentation.
* bfin-linux-tdep.c: Fix indentation.
* block.c: Fix indentation.
* block.h: Fix indentation.
* blockframe.c: Fix indentation.
* bpf-tdep.c: Fix indentation.
* break-catch-sig.c: Fix indentation.
* break-catch-syscall.c: Fix indentation.
* break-catch-throw.c: Fix indentation.
* breakpoint.c: Fix indentation.
* breakpoint.h: Fix indentation.
* bsd-uthread.c: Fix indentation.
* btrace.c: Fix indentation.
* build-id.c: Fix indentation.
* buildsym-legacy.h: Fix indentation.
* buildsym.c: Fix indentation.
* c-typeprint.c: Fix indentation.
* c-valprint.c: Fix indentation.
* c-varobj.c: Fix indentation.
* charset.c: Fix indentation.
* cli/cli-cmds.c: Fix indentation.
* cli/cli-decode.c: Fix indentation.
* cli/cli-decode.h: Fix indentation.
* cli/cli-script.c: Fix indentation.
* cli/cli-setshow.c: Fix indentation.
* coff-pe-read.c: Fix indentation.
* coffread.c: Fix indentation.
* compile/compile-cplus-types.c: Fix indentation.
* compile/compile-object-load.c: Fix indentation.
* compile/compile-object-run.c: Fix indentation.
* completer.c: Fix indentation.
* corefile.c: Fix indentation.
* corelow.c: Fix indentation.
* cp-abi.h: Fix indentation.
* cp-namespace.c: Fix indentation.
* cp-support.c: Fix indentation.
* cp-valprint.c: Fix indentation.
* cris-linux-tdep.c: Fix indentation.
* cris-tdep.c: Fix indentation.
* darwin-nat-info.c: Fix indentation.
* darwin-nat.c: Fix indentation.
* darwin-nat.h: Fix indentation.
* dbxread.c: Fix indentation.
* dcache.c: Fix indentation.
* disasm.c: Fix indentation.
* dtrace-probe.c: Fix indentation.
* dwarf2/abbrev.c: Fix indentation.
* dwarf2/attribute.c: Fix indentation.
* dwarf2/expr.c: Fix indentation.
* dwarf2/frame.c: Fix indentation.
* dwarf2/index-cache.c: Fix indentation.
* dwarf2/index-write.c: Fix indentation.
* dwarf2/line-header.c: Fix indentation.
* dwarf2/loc.c: Fix indentation.
* dwarf2/macro.c: Fix indentation.
* dwarf2/read.c: Fix indentation.
* dwarf2/read.h: Fix indentation.
* elfread.c: Fix indentation.
* eval.c: Fix indentation.
* event-top.c: Fix indentation.
* exec.c: Fix indentation.
* exec.h: Fix indentation.
* expprint.c: Fix indentation.
* f-lang.c: Fix indentation.
* f-typeprint.c: Fix indentation.
* f-valprint.c: Fix indentation.
* fbsd-nat.c: Fix indentation.
* fbsd-tdep.c: Fix indentation.
* findvar.c: Fix indentation.
* fork-child.c: Fix indentation.
* frame-unwind.c: Fix indentation.
* frame-unwind.h: Fix indentation.
* frame.c: Fix indentation.
* frv-linux-tdep.c: Fix indentation.
* frv-tdep.c: Fix indentation.
* frv-tdep.h: Fix indentation.
* ft32-tdep.c: Fix indentation.
* gcore.c: Fix indentation.
* gdb_bfd.c: Fix indentation.
* gdbarch.sh: Fix indentation.
* gdbarch.c: Re-generate
* gdbarch.h: Re-generate.
* gdbcore.h: Fix indentation.
* gdbthread.h: Fix indentation.
* gdbtypes.c: Fix indentation.
* gdbtypes.h: Fix indentation.
* glibc-tdep.c: Fix indentation.
* gnu-nat.c: Fix indentation.
* gnu-nat.h: Fix indentation.
* gnu-v2-abi.c: Fix indentation.
* gnu-v3-abi.c: Fix indentation.
* go32-nat.c: Fix indentation.
* guile/guile-internal.h: Fix indentation.
* guile/scm-cmd.c: Fix indentation.
* guile/scm-frame.c: Fix indentation.
* guile/scm-iterator.c: Fix indentation.
* guile/scm-math.c: Fix indentation.
* guile/scm-ports.c: Fix indentation.
* guile/scm-pretty-print.c: Fix indentation.
* guile/scm-value.c: Fix indentation.
* h8300-tdep.c: Fix indentation.
* hppa-linux-nat.c: Fix indentation.
* hppa-linux-tdep.c: Fix indentation.
* hppa-nbsd-nat.c: Fix indentation.
* hppa-nbsd-tdep.c: Fix indentation.
* hppa-obsd-nat.c: Fix indentation.
* hppa-tdep.c: Fix indentation.
* hppa-tdep.h: Fix indentation.
* i386-bsd-nat.c: Fix indentation.
* i386-darwin-nat.c: Fix indentation.
* i386-darwin-tdep.c: Fix indentation.
* i386-dicos-tdep.c: Fix indentation.
* i386-gnu-nat.c: Fix indentation.
* i386-linux-nat.c: Fix indentation.
* i386-linux-tdep.c: Fix indentation.
* i386-nto-tdep.c: Fix indentation.
* i386-obsd-tdep.c: Fix indentation.
* i386-sol2-nat.c: Fix indentation.
* i386-tdep.c: Fix indentation.
* i386-tdep.h: Fix indentation.
* i386-windows-tdep.c: Fix indentation.
* i387-tdep.c: Fix indentation.
* i387-tdep.h: Fix indentation.
* ia64-libunwind-tdep.c: Fix indentation.
* ia64-libunwind-tdep.h: Fix indentation.
* ia64-linux-nat.c: Fix indentation.
* ia64-linux-tdep.c: Fix indentation.
* ia64-tdep.c: Fix indentation.
* ia64-tdep.h: Fix indentation.
* ia64-vms-tdep.c: Fix indentation.
* infcall.c: Fix indentation.
* infcmd.c: Fix indentation.
* inferior.c: Fix indentation.
* infrun.c: Fix indentation.
* iq2000-tdep.c: Fix indentation.
* language.c: Fix indentation.
* linespec.c: Fix indentation.
* linux-fork.c: Fix indentation.
* linux-nat.c: Fix indentation.
* linux-tdep.c: Fix indentation.
* linux-thread-db.c: Fix indentation.
* lm32-tdep.c: Fix indentation.
* m2-lang.c: Fix indentation.
* m2-typeprint.c: Fix indentation.
* m2-valprint.c: Fix indentation.
* m32c-tdep.c: Fix indentation.
* m32r-linux-tdep.c: Fix indentation.
* m32r-tdep.c: Fix indentation.
* m68hc11-tdep.c: Fix indentation.
* m68k-bsd-nat.c: Fix indentation.
* m68k-linux-nat.c: Fix indentation.
* m68k-linux-tdep.c: Fix indentation.
* m68k-tdep.c: Fix indentation.
* machoread.c: Fix indentation.
* macrocmd.c: Fix indentation.
* macroexp.c: Fix indentation.
* macroscope.c: Fix indentation.
* macrotab.c: Fix indentation.
* macrotab.h: Fix indentation.
* main.c: Fix indentation.
* mdebugread.c: Fix indentation.
* mep-tdep.c: Fix indentation.
* mi/mi-cmd-catch.c: Fix indentation.
* mi/mi-cmd-disas.c: Fix indentation.
* mi/mi-cmd-env.c: Fix indentation.
* mi/mi-cmd-stack.c: Fix indentation.
* mi/mi-cmd-var.c: Fix indentation.
* mi/mi-cmds.c: Fix indentation.
* mi/mi-main.c: Fix indentation.
* mi/mi-parse.c: Fix indentation.
* microblaze-tdep.c: Fix indentation.
* minidebug.c: Fix indentation.
* minsyms.c: Fix indentation.
* mips-linux-nat.c: Fix indentation.
* mips-linux-tdep.c: Fix indentation.
* mips-nbsd-tdep.c: Fix indentation.
* mips-tdep.c: Fix indentation.
* mn10300-linux-tdep.c: Fix indentation.
* mn10300-tdep.c: Fix indentation.
* moxie-tdep.c: Fix indentation.
* msp430-tdep.c: Fix indentation.
* namespace.h: Fix indentation.
* nat/fork-inferior.c: Fix indentation.
* nat/gdb_ptrace.h: Fix indentation.
* nat/linux-namespaces.c: Fix indentation.
* nat/linux-osdata.c: Fix indentation.
* nat/netbsd-nat.c: Fix indentation.
* nat/x86-dregs.c: Fix indentation.
* nbsd-nat.c: Fix indentation.
* nbsd-tdep.c: Fix indentation.
* nios2-linux-tdep.c: Fix indentation.
* nios2-tdep.c: Fix indentation.
* nto-procfs.c: Fix indentation.
* nto-tdep.c: Fix indentation.
* objfiles.c: Fix indentation.
* objfiles.h: Fix indentation.
* opencl-lang.c: Fix indentation.
* or1k-tdep.c: Fix indentation.
* osabi.c: Fix indentation.
* osabi.h: Fix indentation.
* osdata.c: Fix indentation.
* p-lang.c: Fix indentation.
* p-typeprint.c: Fix indentation.
* p-valprint.c: Fix indentation.
* parse.c: Fix indentation.
* ppc-linux-nat.c: Fix indentation.
* ppc-linux-tdep.c: Fix indentation.
* ppc-nbsd-nat.c: Fix indentation.
* ppc-nbsd-tdep.c: Fix indentation.
* ppc-obsd-nat.c: Fix indentation.
* ppc-ravenscar-thread.c: Fix indentation.
* ppc-sysv-tdep.c: Fix indentation.
* ppc64-tdep.c: Fix indentation.
* printcmd.c: Fix indentation.
* proc-api.c: Fix indentation.
* producer.c: Fix indentation.
* producer.h: Fix indentation.
* prologue-value.c: Fix indentation.
* prologue-value.h: Fix indentation.
* psymtab.c: Fix indentation.
* python/py-arch.c: Fix indentation.
* python/py-bpevent.c: Fix indentation.
* python/py-event.c: Fix indentation.
* python/py-event.h: Fix indentation.
* python/py-finishbreakpoint.c: Fix indentation.
* python/py-frame.c: Fix indentation.
* python/py-framefilter.c: Fix indentation.
* python/py-inferior.c: Fix indentation.
* python/py-infthread.c: Fix indentation.
* python/py-objfile.c: Fix indentation.
* python/py-prettyprint.c: Fix indentation.
* python/py-registers.c: Fix indentation.
* python/py-signalevent.c: Fix indentation.
* python/py-stopevent.c: Fix indentation.
* python/py-stopevent.h: Fix indentation.
* python/py-threadevent.c: Fix indentation.
* python/py-tui.c: Fix indentation.
* python/py-unwind.c: Fix indentation.
* python/py-value.c: Fix indentation.
* python/py-xmethods.c: Fix indentation.
* python/python-internal.h: Fix indentation.
* python/python.c: Fix indentation.
* ravenscar-thread.c: Fix indentation.
* record-btrace.c: Fix indentation.
* record-full.c: Fix indentation.
* record.c: Fix indentation.
* reggroups.c: Fix indentation.
* regset.h: Fix indentation.
* remote-fileio.c: Fix indentation.
* remote.c: Fix indentation.
* reverse.c: Fix indentation.
* riscv-linux-tdep.c: Fix indentation.
* riscv-ravenscar-thread.c: Fix indentation.
* riscv-tdep.c: Fix indentation.
* rl78-tdep.c: Fix indentation.
* rs6000-aix-tdep.c: Fix indentation.
* rs6000-lynx178-tdep.c: Fix indentation.
* rs6000-nat.c: Fix indentation.
* rs6000-tdep.c: Fix indentation.
* rust-lang.c: Fix indentation.
* rx-tdep.c: Fix indentation.
* s12z-tdep.c: Fix indentation.
* s390-linux-tdep.c: Fix indentation.
* score-tdep.c: Fix indentation.
* ser-base.c: Fix indentation.
* ser-mingw.c: Fix indentation.
* ser-uds.c: Fix indentation.
* ser-unix.c: Fix indentation.
* serial.c: Fix indentation.
* sh-linux-tdep.c: Fix indentation.
* sh-nbsd-tdep.c: Fix indentation.
* sh-tdep.c: Fix indentation.
* skip.c: Fix indentation.
* sol-thread.c: Fix indentation.
* solib-aix.c: Fix indentation.
* solib-darwin.c: Fix indentation.
* solib-frv.c: Fix indentation.
* solib-svr4.c: Fix indentation.
* solib.c: Fix indentation.
* source.c: Fix indentation.
* sparc-linux-tdep.c: Fix indentation.
* sparc-nbsd-tdep.c: Fix indentation.
* sparc-obsd-tdep.c: Fix indentation.
* sparc-ravenscar-thread.c: Fix indentation.
* sparc-tdep.c: Fix indentation.
* sparc64-linux-tdep.c: Fix indentation.
* sparc64-nbsd-tdep.c: Fix indentation.
* sparc64-obsd-tdep.c: Fix indentation.
* sparc64-tdep.c: Fix indentation.
* stabsread.c: Fix indentation.
* stack.c: Fix indentation.
* stap-probe.c: Fix indentation.
* stubs/ia64vms-stub.c: Fix indentation.
* stubs/m32r-stub.c: Fix indentation.
* stubs/m68k-stub.c: Fix indentation.
* stubs/sh-stub.c: Fix indentation.
* stubs/sparc-stub.c: Fix indentation.
* symfile-mem.c: Fix indentation.
* symfile.c: Fix indentation.
* symfile.h: Fix indentation.
* symmisc.c: Fix indentation.
* symtab.c: Fix indentation.
* symtab.h: Fix indentation.
* target-float.c: Fix indentation.
* target.c: Fix indentation.
* target.h: Fix indentation.
* tic6x-tdep.c: Fix indentation.
* tilegx-linux-tdep.c: Fix indentation.
* tilegx-tdep.c: Fix indentation.
* top.c: Fix indentation.
* tracefile-tfile.c: Fix indentation.
* tracepoint.c: Fix indentation.
* tui/tui-disasm.c: Fix indentation.
* tui/tui-io.c: Fix indentation.
* tui/tui-regs.c: Fix indentation.
* tui/tui-stack.c: Fix indentation.
* tui/tui-win.c: Fix indentation.
* tui/tui-winsource.c: Fix indentation.
* tui/tui.c: Fix indentation.
* typeprint.c: Fix indentation.
* ui-out.h: Fix indentation.
* unittests/copy_bitwise-selftests.c: Fix indentation.
* unittests/memory-map-selftests.c: Fix indentation.
* utils.c: Fix indentation.
* v850-tdep.c: Fix indentation.
* valarith.c: Fix indentation.
* valops.c: Fix indentation.
* valprint.c: Fix indentation.
* valprint.h: Fix indentation.
* value.c: Fix indentation.
* value.h: Fix indentation.
* varobj.c: Fix indentation.
* vax-tdep.c: Fix indentation.
* windows-nat.c: Fix indentation.
* windows-tdep.c: Fix indentation.
* xcoffread.c: Fix indentation.
* xml-syscall.c: Fix indentation.
* xml-tdesc.c: Fix indentation.
* xstormy16-tdep.c: Fix indentation.
* xtensa-config.c: Fix indentation.
* xtensa-linux-nat.c: Fix indentation.
* xtensa-linux-tdep.c: Fix indentation.
* xtensa-tdep.c: Fix indentation.
gdbserver/ChangeLog:
* ax.cc: Fix indentation.
* dll.cc: Fix indentation.
* inferiors.h: Fix indentation.
* linux-low.cc: Fix indentation.
* linux-nios2-low.cc: Fix indentation.
* linux-ppc-ipa.cc: Fix indentation.
* linux-ppc-low.cc: Fix indentation.
* linux-x86-low.cc: Fix indentation.
* linux-xtensa-low.cc: Fix indentation.
* regcache.cc: Fix indentation.
* server.cc: Fix indentation.
* tracepoint.cc: Fix indentation.
gdbsupport/ChangeLog:
* common-exceptions.h: Fix indentation.
* event-loop.cc: Fix indentation.
* fileio.cc: Fix indentation.
* filestuff.cc: Fix indentation.
* gdb-dlfcn.cc: Fix indentation.
* gdb_string_view.h: Fix indentation.
* job-control.cc: Fix indentation.
* signals.cc: Fix indentation.
Change-Id: I4bad7ae6be0fbe14168b8ebafb98ffe14964a695
2020-11-02 23:26:14 +08:00
|
|
|
|
struct ui_file *stream)
|
2010-04-21 06:38:02 +08:00
|
|
|
|
{
|
|
|
|
|
type = ada_check_typedef (type);
|
* ada-lang.c (user_select_syms, ada_print_subexp): Pass flags
to type-printing functions.
* ada-lang.h (ada_print_type): Add argument.
* ada-typeprint.c (print_array_type, print_variant_clauses,
print_variant_part, print_selected_record_field_types,
print_record_field_types, print_unchecked_union_type,
print_func_type, ada_print_type): Add flags argument.
(ada_print_typedef): Update.
* c-exp.y (OPERATOR conversion_type_id): Update.
* c-lang.h (c_print_type, c_type_print_base): Update.
* c-typeprint.c (c_print_type, c_type_print_varspec_prefix,
c_type_print_modifier, c_type_print_args,
c_type_print_varspec_suffix, c_type_print_base): Add flags
argument.
* cp-valprint.c (cp_print_class_member): Update.
* dwarf2read.c (dwarf2_compute_name): Update.
* f-lang.h (f_print_type): Add argument.
* f-typeprint.c (f_print_type): Add flags argument.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update.
* go-lang.h (go_print_type): Add argument.
* go-typeprint.c (go_print_type): Add flags argument.
* jv-lang.h (java_print_type): Add argument.
* jv-typeprint.c (java_type_print_base, java_print_type): Add
flags argument.
* language.c (unk_lang_print_type): Add flags argument.
* language.h (struct language_defn) <la_print_type>: Add flags
argument.
(LA_PRINT_TYPE): Likewise.
* m2-lang.h (m2_print_type): Add argument.
* m2-typeprint.c (m2_print_type, m2_range, m2_typedef,
m2_array, m2_pointer, m2_ref, m2_procedure, m2_long_set,
m2_unbounded_array, m2_record_fields): Add flags argument.
* p-lang.h (pascal_print_type, pascal_type_print_base,
pascal_type_print_varspec_prefix): Add argument.
* p-typeprint.c (pascal_print_type,
pascal_type_print_varspec_prefix, pascal_print_func_args,
pascal_type_print_varspec_suffix, pascal_type_print_base): Add
flags argument.
* symmisc.c (print_symbol): Update.
* typeprint.c (type_print_raw_options, default_ptype_flags):
New globals.
(type_print): Update.
* typeprint.h (struct type_print_options): New.
(type_print_raw_options): Declare.
(c_type_print_varspec_suffix, c_type_print_args): Add argument.
2012-11-13 01:14:55 +08:00
|
|
|
|
ada_print_type (type, "", stream, 0, 0, &type_print_raw_options);
|
2010-04-21 06:38:02 +08:00
|
|
|
|
}
|