[PATCH v9 01/19] bfd: rename parsing methods of object attribute v1 API

Matthieu Longo matthieu.longo@arm.com
Mon Oct 27 14:47:19 GMT 2025


On 2025-10-24 13:07, Jan Beulich wrote:
> On 01.09.2025 18:56, Matthieu Longo wrote:
>> This patch is a preparation for the introduction of object attributes
>> v2. It aims at:
>> - making clear what methods are used to parse OAv1
>> - adding more constaints on parameters type by using enums instead of
>> defines.
>> - hiding the attribute tag type behind a typedef.
>> - preparing the move of object attributes's parsing code to another
>>    file.
>>
>> Note: the name obj_attr_v1_process_attribute is exposed in the API.
>> Ideally, the version should not be part of the name, and be hidden
>> behind a macro. However, a later patch will unify the parsing of
>> OAv1 and OAv2, and will make the use of such a macro obsolete.
> 
> Okay, albeit with another minor request:
> 
>> --- a/gas/config/obj-elf.c
>> +++ b/gas/config/obj-elf.c
>> @@ -2075,7 +2075,7 @@ obj_elf_vtable_entry (int ignore ATTRIBUTE_UNUSED)
>>   #define skip_whitespace(str)  do { if (is_whitespace (*(str))) ++(str); } while (0)
>>   
>>   static inline int
>> -skip_past_char (char ** str, char c)
>> +skip_past_char (char **str, char c)
>>   {
>>     if (**str == c)
>>       {
>> @@ -2090,23 +2090,50 @@ skip_past_char (char ** str, char c)
>>   /* A list of attributes that have been explicitly set by the assembly code.
>>      VENDOR is the vendor id, BASE is the tag shifted right by the number
>>      of bits in MASK, and bit N of MASK is set if tag BASE+N has been set.  */
>> -struct recorded_attribute_info {
>> +typedef struct recorded_attribute_info {
>>     struct recorded_attribute_info *next;
>> -  int vendor;
>> +  obj_attr_vendor_t vendor;
>>     unsigned int base;
>>     unsigned long mask;
>> -};
>> -static struct recorded_attribute_info *recorded_attributes;
>> +} recorded_attribute_info_t;
>> +static recorded_attribute_info_t *recorded_attributes;
>> +
>> +static void
>> +oav1_attr_info_free (recorded_attribute_info_t *node)
>> +{
>> +  while (node != NULL)
>> +    {
>> +      recorded_attribute_info_t *next = node->next;
>> +      free (node);
>> +      node = next;
>> +    }
>> +}
>> +
>> +static void
>> +oav1_attr_info_init (void)
>> +{
>> +  /* Note: this "constructor" was added for symetry with oav1_attr_info_exit.
>> +     recorded_attributes is a static variable which is automatically initialized
>> +     to NULL.  There is no need to initialize it another time except for a
>> +     cosmetic reason.  */
>> +  recorded_attributes = NULL;
>> +}
> 
> "... for a cosmetic reason and to possibly help fuzzing."
> 
> Also, nit: "symmetry"
> 
> Jan

Fixed. Thanks.

Matthieu


More information about the Binutils mailing list