[PATCH v5 13/20] Merge of Object Attributes v2 during linkage (generic logic)
Matthieu Longo
matthieu.longo@arm.com
Thu Jul 10 11:07:33 GMT 2025
On 2025-07-10 09:14, Jan Beulich wrote:
> On 09.07.2025 18:47, Matthieu Longo wrote:
>> On 2025-07-09 15:29, Richard Earnshaw (lists) wrote:
>>> On 07/07/2025 17:49, Matthieu Longo wrote:
>>>> +/* Merge two subsections together (object attributes v2 only).
>>>> + The result is stored into subsec1. subsec2 is destroyed.
>>>> + Return true if the merge was successful, false otherwise.
>>>> + Note: subsec1 and subsec2 are expected to be sorted before the call to this
>>>> + function. */
>>>> +static bool
>>>> +oav2_subsection_destructive_merge (bfd *abfd,
>>>> + obj_attr_subsection_v2 *subsec1,
>>>> + obj_attr_subsection_v2 *subsec2)
>>>> +{
>>>> + BFD_ASSERT (subsec1->encoding == subsec2->encoding
>>>> + && subsec1->optional == subsec2->optional);
>>>> +
>>>> + bool success = true;
>>>> +
>>>> + success &= oav2_compact_tags (abfd, subsec1);
>>>> + success &= oav2_compact_tags (abfd, subsec2);
>>>> +
>>>> + obj_attr_v2 *a1 = subsec1->first_;
>>>> + obj_attr_v2 *a2 = subsec2->first_;
>>>> + while (a1 != NULL && a2 != NULL)
>>>> + {
>>>> + if (a1->tag < a2->tag)
>>>> + {} /* Nothing to do, a1 is already in subsec1. */
>>>> + else if (a1->tag > a2->tag)
>>>> + {
>>>> + /* a2 is missing in subsec1, add it. */
>>>> + obj_attr_v2 *previous = LINKED_LIST_REMOVE(obj_attr_v2) (subsec2, a2);
>>>> + LINKED_LIST_INSERT_BEFORE(obj_attr_v2) (subsec1, a2, a1);
>>>> + a2 = previous;
>>>> + }
>>>> + else
>>>> + {
>>>> + if (subsec1->encoding == OA_ENC_ULEB128
>>>> + && a1->vals.uint_val != a2->vals.uint_val)
>>>> + {
>>>> + success = false;
>>>> + _bfd_error_handler (_("%pB: error: found 2 subsections with the "
>>>
>>> In this case I'd put the opening parenthesis on the following line, so that you
>>> don't lose too much horizontal white space when correctly indenting ...
>>
>> Well, this one I am wondering if the medicine is not worse than the disease.
>>
>> _bfd_error_handler
>> (_("%pB: error: found 2 subsections with the same name '%s' and"
>> " found conflicting values (0x%x vs 0x%x) for object "
>> "attribute 'Tag_unknown_%u'"), abfd, subsec1->name,
>> a1->vals.uint_val, a2->vals.uint_val, a1->tag);
>>
>> I lost one line and more horizontal space, and I don't find that the
>> indentation is better than before but rather worse.
>
> In addition to what Richard said: The longer a statement gets, the more
> important it is for it to be reasonably easy to spot, at any position,
> how many pending open parentheses there are.
>
> Another nit here: Please generally prefer %#x and alike over 0x%x.
>
> Jan
The code formatting and the integer formatting using %#x is fixed in the
next revision.
Matthieu
More information about the Binutils
mailing list