On 7/2/25 00:42, Richard Biener wrote:
> 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.
Thanks for the pointer to aligned. This part is more clear to me now,
after seeing how the type variants are handled there.
I think you're right, we should do similar for type_tag. I will try
it and include in the next version.
>
> Richard.
>
>> + return NULL_TREE;
>> +}
>> +
>> /* Handle the "nonstring" variable attribute. */
>>
>> static tree
>> --
>> 2.47.2
>>