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 >