From: Simon Marchi Date: Mon, 14 Sep 2020 15:08:01 +0000 (-0400) Subject: gdb: add type::has_varargs / type::set_has_varargs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1d6286ed048eb1997a0afea0f18cb9eb1789f386;p=binutils-gdb.git gdb: add type::has_varargs / type::set_has_varargs Add the `has_varargs` and `set_has_varargs` methods on `struct type`, in order to remove the `TYPE_VARARGS` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) : New methods. (TYPE_VARARGS): Use type::has_varargs, change all write call sites to use type::set_has_varargs. Change-Id: I898a1093ae40808b37a7c6fced7f6fa2aae604de --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 193d0c85e5f..e8fecf714cf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-09-14 Simon Marchi + + * gdbtypes.h (struct type) : New methods. + (TYPE_VARARGS): Use type::has_varargs, change all write call sites to + use type::set_has_varargs. + 2020-09-14 Simon Marchi * gdbtypes.h (TYPE_PROTOTYPED): Remove, replace all diff --git a/gdb/ctfread.c b/gdb/ctfread.c index 81490baecc1..0237b486253 100644 --- a/gdb/ctfread.c +++ b/gdb/ctfread.c @@ -1142,7 +1142,7 @@ add_stt_func (struct ctf_context *ccp, unsigned long idx) tid = ctf_lookup_by_symbol (ccp->fp, idx); ftype = get_tid_type (ccp->of, tid); if (finfo.ctc_flags & CTF_FUNC_VARARG) - TYPE_VARARGS (ftype) = 1; + ftype->set_has_varargs (true); ftype->set_num_fields (argc); /* If argc is 0, it has a "void" type. */ diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index f4f3a029a76..e61eda73de4 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -17707,7 +17707,8 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu) if (child_die->tag == DW_TAG_formal_parameter) nparams++; else if (child_die->tag == DW_TAG_unspecified_parameters) - TYPE_VARARGS (ftype) = 1; + ftype->set_has_varargs (true); + child_die = child_die->sibling; } diff --git a/gdb/eval.c b/gdb/eval.c index 7f9515b2c11..d87b8dae110 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -665,7 +665,7 @@ fake_method::fake_method (type_instance_flags flags, if (param_types[num_types - 1] == NULL) { --num_types; - TYPE_VARARGS (type) = 1; + type->set_has_varargs (true); } else if (check_typedef (param_types[num_types - 1])->code () == TYPE_CODE_VOID) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index ae3d92751b4..2ff458af908 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -552,7 +552,7 @@ lookup_function_type_with_arguments (struct type *type, if (param_types[nparams - 1] == NULL) { --nparams; - TYPE_VARARGS (fn) = 1; + fn->set_has_varargs (true); } else if (check_typedef (param_types[nparams - 1])->code () == TYPE_CODE_VOID) @@ -1556,7 +1556,7 @@ smash_to_method_type (struct type *type, struct type *self_type, type->set_fields (args); type->set_num_fields (nargs); if (varargs) - TYPE_VARARGS (type) = 1; + type->set_has_varargs (true); TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */ } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index abb67467042..e1b0d442f1c 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -219,7 +219,7 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags); /* * FIXME drow/2002-06-03: Only used for methods, but applies as well to functions. */ -#define TYPE_VARARGS(t) (TYPE_MAIN_TYPE (t)->flag_varargs) +#define TYPE_VARARGS(t) ((t)->has_varargs ()) /* * Identify a vector type. Gcc is handling this by adding an extra attribute to the array type. We slurp that in as a new flag of a @@ -828,7 +828,7 @@ struct main_type unsigned int m_flag_stub : 1; unsigned int m_flag_target_stub : 1; unsigned int m_flag_prototyped : 1; - unsigned int flag_varargs : 1; + unsigned int m_flag_varargs : 1; unsigned int flag_vector : 1; unsigned int flag_stub_supported : 1; unsigned int flag_gnu_ifunc : 1; @@ -1108,6 +1108,16 @@ struct type this->main_type->m_flag_prototyped = is_prototyped; } + bool has_varargs () const + { + return this->main_type->m_flag_varargs; + } + + void set_has_varargs (bool has_varargs) + { + this->main_type->m_flag_varargs = has_varargs; + } + /* * Return the dynamic property of the requested KIND from this type's list of dynamic properties. */ dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const;