On Tue, Jun 10, 2025 at 11:40 PM David Faust <david.fa...@oracle.com> wrote:
>
> Add two new c-family attributes, "btf_type_tag" and "btf_decl_tag"
> along with a simple shared handler for them.
>
> gcc/c-family/
>         * c-attribs.cc (c_common_attribute_table): Add btf_decl_tag and
>         btf_type_tag attributes.
>         (handle_btf_tag_attribute): New handler for both new attributes.
> ---
>  gcc/c-family/c-attribs.cc | 25 ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
> index 5a0e3d328ba..cc1efaeaaec 100644
> --- a/gcc/c-family/c-attribs.cc
> +++ b/gcc/c-family/c-attribs.cc
> @@ -189,6 +189,8 @@ static tree handle_fd_arg_attribute (tree *, tree, tree, 
> int, bool *);
>  static tree handle_flag_enum_attribute (tree *, tree, tree, int, bool *);
>  static tree handle_null_terminated_string_arg_attribute (tree *, tree, tree, 
> int, bool *);
>
> +static tree handle_btf_tag_attribute (tree *, tree, tree, int, bool *);
> +
>  /* Helper to define attribute exclusions.  */
>  #define ATTR_EXCL(name, function, type, variable)      \
>    { name, function, type, variable }
> @@ -640,7 +642,11 @@ const struct attribute_spec c_common_gnu_attributes[] =
>    { "flag_enum",             0, 0, false, true, false, false,
>                               handle_flag_enum_attribute, NULL },
>    { "null_terminated_string_arg", 1, 1, false, true, true, false,
> -                             handle_null_terminated_string_arg_attribute, 
> NULL}
> +                             handle_null_terminated_string_arg_attribute, 
> NULL},
> +  { "btf_type_tag",          1, 1, false, true, false, false,
> +                             handle_btf_tag_attribute, NULL},
> +  { "btf_decl_tag",          1, 1, true, false, false, false,
> +                             handle_btf_tag_attribute, NULL}
>  };
>
>  const struct scoped_attribute_specs c_common_gnu_attribute_table =
> @@ -5101,6 +5107,23 @@ handle_null_terminated_string_arg_attribute (tree 
> *node, tree name, tree args,
>    return NULL_TREE;
>  }
>
> +/* Handle the "btf_decl_tag" and "btf_type_tag" attributes.  */
> +
> +static tree
> +handle_btf_tag_attribute (tree * ARG_UNUSED (node), tree name, tree args,
> +                         int ARG_UNUSED (flags), bool *no_add_attrs)
> +{
> +  if (!args)
> +    *no_add_attrs = true;
> +  else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
> +    {
> +      error ("%qE attribute requires a string", name);
> +      *no_add_attrs = true;
> +    }
> +

So with respect to the dwarf2out patch discussion I think attribute
handling should
be similar to how we handle the aligned attribute which makes sure to
build a new
type variant to apply the attribute to if not ATTR_FLAG_TYPE_IN_PLACE.

Richard.

> +  return NULL_TREE;
> +}
> +
>  /* Handle the "nonstring" variable attribute.  */
>
>  static tree
> --
> 2.47.2
>

Reply via email to