[PATCH v4 22/22] gas doc: update the documentation for OAv1 and OAv2
Jan Beulich
jbeulich@suse.com
Fri Jul 4 09:22:16 GMT 2025
On 03.07.2025 18:27, Matthieu Longo wrote:
> - amend the existing documentation on OAv1.
> - add a new section for OAv2 in the Object Attributes chapter.
> - add entries for the new directives.
This shouldn't come as a separate patch imo; at least the parts about new directives
would better be folded into wherever they're introduced.
Jan
> --- a/gas/doc/as.texi
> +++ b/gas/doc/as.texi
> @@ -4563,6 +4563,7 @@ Some machine configurations provide additional directives.
> * Func:: @code{.func}
> * Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
> @ifset ELF
> +* Gnu_subsection:: @code{.gnu_subsection @var{name}, @var{comprehension}, @var{encoding}}
> * Gnu_attribute:: @code{.gnu_attribute @var{tag},@var{value}}
> * Hidden:: @code{.hidden @var{names}}
> @end ifset
> @@ -5702,6 +5703,10 @@ partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
> @end ifset
>
> @ifset ELF
> +@node Gnu_subsection
> +@section @code{.gnu_subsection @var{name}, @var{comprehension}, @var{encoding}}
> +Record a @sc{gnu} object attribute subsection for this file. @xref{Object Attributes}
> +
> @node Gnu_attribute
> @section @code{.gnu_attribute @var{tag},@var{value}}
> Record a @sc{gnu} object attribute for this file. @xref{Object Attributes}.
> @@ -7911,6 +7916,25 @@ This information is useful during and after linking. At link time,
> time, tools like @command{gdb} can use it to process the linked file
> correctly.
>
> +Two versions of object attributes are currently in use:
> +@itemize @bullet{}
> +@item
> +Object Attributes version 1 (OAv1) used by: ARC, Arm, CSky, MIPS, msp430, m68k,
> +PowerPC, RISC-V, SPARC, S390, and TI C6X.
> +@item
> +Object Attributes version 2 (OAv2) used by: AArch64.
> +@end itemize
> +
> +@menu
> +* Object Attributes v1:: Object Attributes v1
> +* Object Attributes v2:: Object Attributes v2
> +* GNU Object Attributes:: @sc{gnu} Object Attributes
> +* Defining New Object Attributes:: Defining New Object Attributes
> +@end menu
> +
> +@node Object Attributes v1
> +@section Object Attributes v1
> +
> Compatibility information is recorded as a series of object attributes. Each
> attribute has a @dfn{vendor}, @dfn{tag}, and @dfn{value}. The vendor is a
> string, and indicates who sets the meaning of the tag. The tag is an integer,
> @@ -7918,13 +7942,51 @@ and indicates what property the attribute describes. The value may be a string
> or an integer, and indicates how the property affects this object. Missing
> attributes are the same as attributes with a zero value or empty string value.
>
> -Object attributes were developed as part of the ABI for the ARM Architecture.
> -The file format is documented in @cite{ELF for the ARM Architecture}.
> +Object Attributes v1 (OAv1) were developed as part of the ABI for the ARM
> +Architecture.
> +The file format is documented in @cite{Addenda to, and Errata in, the ABI for
> +the Arm® Architecture}.
>
> -@menu
> -* GNU Object Attributes:: @sc{gnu} Object Attributes
> -* Defining New Object Attributes:: Defining New Object Attributes
> -@end menu
> +@node Object Attributes v2
> +@section Object Attributes v2
> +
> +Object Attributes v2 (OAv2) is the successor of OAv1. OAv1's complexity makes
> +parsing and skipping subsections or attributes challenging, especially for the
> +main consumers, the linkers, which are responsible to merge them, and enforce
> +compatibility.
> +
> +To address these limitations, a new specification for object attributes was
> +proposed. Key design goals of OAv2 include:
> +@itemize @bullet{}
> +@item
> +Retaining successful aspects of OAv1.
> +@item
> +Defining the relationship between build attributes and the existing GNU program
> +properties.
> +@item
> +Separating architectural requirements from software ABI requirements.
> +@item
> +Simplifying the format to allow consumers to skip a subsection or attribute
> +that it does not understand without giving a warning message.
> +@end itemize
> +
> +OAv2 share common concepts of @dfn{vendor}, @dfn{tag} and @dfn{value} with OAv1,
> +and also introduce the new ones like @dfn{subsection} and @dfn{scope}.
> +Attributes with common properties are grouped into subsections. All the
> +attributes in a subsection share the same encoding, comprehension, and scope.
> +A subsection starting with the vendor name is considered public. The value of
> +an attribute may be a string or an integer depending on the encoding set on its
> +subsection.
> +
> +The @code{.gnu_subsection} directive creates a new subsection or switch to the
> +subsection if it has already been declared. The @code{.gnu_attribute} directive
> +records an object attribute in the current subsection.
> +Those directives are valid on all the architectures that support OAv2.
> +
> +Object attributes v2 were developed as part of the ABI for the AArch64
> +architecture.
> +The file format is documented in @cite{Build Attributes for the Arm® 64-bit
> +Architecture (AArch64)}
>
> @node GNU Object Attributes
> @section @sc{gnu} Object Attributes
> @@ -7940,7 +8002,7 @@ architecture-dependent ones.
>
> @subsection Common @sc{gnu} attributes
>
> -These attributes are valid on all architectures.
> +These attributes are valid on all the architectures that support OAv1.
>
> @table @r
> @item Tag_compatibility (32)
> diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
> index d7e9c95111d..d88fcdf2da7 100644
> --- a/gas/doc/c-aarch64.texi
> +++ b/gas/doc/c-aarch64.texi
> @@ -460,6 +460,29 @@ The AArch64 architecture uses @sc{ieee} floating-point numbers.
>
> @c AAAAAAAAAAAAAAAAAAAAAAAAA
>
> +@cindex @code{.aeabi_subsection} directive, AArch64
> +@item .aeabi_subsection @var{name}, @var{comprehension}, @var{encoding}
> +Create or switch the current object attributes subsection to @var{name}. Valid
> +values for @var{name} are following the pattern @code{[a-zA-Z0-9_-]+}.
> +
> +@var{comprehension} determines whether the subsection is @code{required} or
> +@code{optional}. An optional subsection can be skipped if it is not known by the
> +customer tool, unknown @code{required} subsection should generate an error and
> +stop the processing.
> +
> +@var{encoding} specifies the expected encoding of the attributes recorded in the
> +subsection. Currently supported values are @code{ULEB128} and @code{NTBS}
> +(null-terminated byte string).
> +
> +@cindex @code{.aeabi_attribute} @var{tag}, @var{value}
> +@item .aeabi_attribute @var{tag}, @var{value}
> +Create an attribute with the pair @var{tag}, @var{value} in the current
> +subsection. @var{tag} can either be an integer value, or a known named key.
> +@var{value} can either be an integer or a string.
> +
> +The exhaustive list of subsections and tags supported on AArch64 is documented
> +in @cite{Build Attributes for the Arm® 64-bit Architecture (AArch64)}.
> +
> @cindex @code{.arch} directive, AArch64
> @item .arch @var{name}
> Select the target architecture. Valid values for @var{name} are the same as
More information about the Binutils
mailing list