[PATCH v11 16/25] OAv2 merge: merging Object Attributes
Jan Beulich
jbeulich@suse.com
Thu Jan 8 14:11:43 GMT 2026
On 31.12.2025 00:05, Matthieu Longo wrote:
> The Object Ottributes merge process must handle both optional and
> required subsections. It also treats the first merge of the frozen set
> specially, as the OAv2 list in the input BFD serves as the accumulator
> for subsequent merges.
>
> ** Optional subsections
>
> Optional subsections are processed as if merging two ordered sets — by
> iterating linearly through both, checking whether an element of a given
> ordinality is present in the opposite set, and adding it to the
> accumulator. The added diffuculty with subsections and attributes lies
> in the fact that missing elements have default values, and these must be
> merged with existing ones to produce the final value to be stored.
>
> ** Required subsections
>
> Required subsections are processed slightly differently from the
> optional subsections, as they cannot be pruned since they are mandatory,
> hence an error will be raised by the linker if it is not recognized.
>
> For now, the subsection for PAuth ABI is the only one use case, and
> no merge is applied on the values. The values simply need to match.
> This implementation choice might be challenged in the future if required
> subsections can have the same diversity as optional subsections. If the
> case arises, the refactoring to handle this new behavior should consist
> in adding a new merge policy MERGE-EQUAL, or something similar. Some "if
> required" should be added in the optional subsections merge logic to
> error on any missing elements, or mismatch, and messages should also be
> rephrased to point out that the error is for a required subsection.
>
> ** Important note regarding support for testing
>
> In order to test this generic logic, AArch64's use cases are not
> offering enough coverage, so a "GNU testing namespace" which corresponds
> to the name of the subsection was introduced. It follows the following
> pattern:
> gnu_testing_<XXXXXX>_MERGE_<POLICY>
> with:
> - <XXXXXX>: an arbitrary name for your testing subsection.
> - <POLICY>: the name of the merging policy to apply on the values in
> the subsection. The currently supported merge policy are:
> * _MERGE_AND: bitwise AND applied on numerical values.
> * _MERGE_OR: bitwise OR applied on numerical values.
> * _MERGE_ADD: concatenates strings together with a '+' in-between.
> Note: "_MERGE_ADD" does not make really sense, and will very likely
> never be used for a real merge. Its only purpose is to test the
> correct handling of merges with strings.
> Any subsection name matching neither names supported by the backend, nor
> following the pattern corresponding GNU testing namespace will be considered
> unknown and its status set to obj_attr_subsection_v2_unknown. This will
> have for consequence the pruning of this subsection.
>
> Additionally, the first two tags in gnu_testing namespace, GNUTestTag_0
> and GNUTestTag_1, are known, and so have a name and can be initialized
> to the default value ('0' or NULL) depending on the encoding specified
> on the subsection. Any tags above 1 will be considered unknown, so will
> be default-initialized in the same way but its status will be set to
> obj_attr_v2_unknown. This behavior of the testing tags allows to test
> the pruning of unknown attributes.
> ---
> bfd/elf-attrs.c | 874 ++++++++++++++++++++++++++++++++++++++++++++-
> bfd/elf-attrs.h | 24 ++
> bfd/elf-bfd.h | 9 +
> bfd/elfxx-target.h | 8 +
> 4 files changed, 904 insertions(+), 11 deletions(-)
Okay with, again, ...
> +/* Append a new default-initialized attribute with the same key as AREF to the
> + given subsection. */
> +static void
> +oav2_subsection_append_attr_default (const struct bfd_link_info *info,
> + obj_attr_subsection_v2_t *s_abfd_missing,
> + const obj_attr_v2_t *a_ref)
> +{
> + obj_attr_v2_t *new_attr = oav2_attr_default (info, s_abfd_missing, a_ref);
> + LINKED_LIST_APPEND(obj_attr_v2_t) (s_abfd_missing, new_attr);
the style issue here (and elsewhere) addressed.
Jan
More information about the Binutils
mailing list