https://gcc.gnu.org/g:b80df4142b2973fa7fa8ec0639d01856d4777ef1
commit r16-7682-gb80df4142b2973fa7fa8ec0639d01856d4777ef1 Author: Sandra Loosemore <[email protected]> Date: Fri Feb 20 01:11:57 2026 +0000 doc: Put attributes in their own index [PR88472] GCC has so many attributes nowadays that having a dedicated index for them seems long overdue. gcc/ChangeLog PR other/88472 * doc/extend.texi (Common Attributes): Change @cindex entries for attributes to @atindex. Add some additional @cindex entries. (AArch64 Attributes): Likewise. (AMD GCN Attributes): Likewise. (ARC Attributes): Likewise. (ARM Attributes): Likewise. (AVR Attributes): Likewise. (Blackfin Attributes): Likewise. (BPF Attributes): Likewise. (C-SKY Attributes): Likewise. (Epiphany Attributes): Likewise. (H8/300 Attributes): Likewise. (IA-64 Attributes): Likewise. (LoongArch Attributes): Likewise. (M32C Attributes): Likewise. (M32R/D Attributes): Likewise. (m68k Attributes): Likewise. (MicroBlaze Attributes): Likewise. (Microsoft Windows Attributes): Likewise. (MIPS Attributes): Likewise. (MSP430 Attributes): Likewise. (NDS32 Attributes): Likewise. (Nvidia PTX Attributes): Likewise. (PowerPC Attributes): Likewise. (RISC-V Attributes): Likewise. (RL78 Attributes): Likewise. (RX Attributes): Likewise. (S/390 Attributes): Likewise. (SH Attributes): Likewise. (Symbian OS Attributes): Likewise. (V850 Attributes): Likewise. (Visium Attributes): Likewise. (x86 Attributes): Likewise. (Xstormy16 Attributes): Likewise. (C++ Attributes): Likewise. * doc/gcc.texi: Define a new "at" index for attributes. (Attribute Index): New appendix. Diff: --- gcc/doc/extend.texi | 1029 ++++++++++++++++++++++++++++----------------------- gcc/doc/gcc.texi | 16 +- 2 files changed, 574 insertions(+), 471 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 4a96fd0a529f..a22ef39226a5 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1809,7 +1809,8 @@ directives, with names prefixed with @samp{omp::}, using the standard @c Every entry should start with a sentence that says where the attribute @c may appear. -@cindex @code{access} function attribute +@atindex @code{access} +@cindex functions that restrict access to pointer arguments @item access (@var{access-mode}, @var{ref-index}) @itemx access (@var{access-mode}, @var{ref-index}, @var{size-index}) This attribute applies to functions. @@ -1910,7 +1911,7 @@ that unconditionally manipulates a buffer via a pointer argument. See the documented later in this section, for more information and caveats. -@cindex @code{alias} attribute +@atindex @code{alias} @item alias ("@var{target}") This attribute applies to variables and functions. @@ -1950,7 +1951,8 @@ in a translation unit without a declaration of the alias with the attribute. This attribute requires assembler and object file support, and may not be available on all targets. -@cindex @code{aligned} attribute +@atindex @code{aligned} +@cindex alignment of functions and data @item aligned @itemx aligned (@var{alignment}) This attribute applies to functions, variables, typedefs, structs, and @@ -2051,7 +2053,8 @@ further information. Stack variables are not affected by linker restrictions; GCC can properly align them on any target. -@cindex @code{alloc_align} function attribute +@atindex @code{alloc_align} +@cindex alignment of allocated data @item alloc_align (@var{position}) The @code{alloc_align} attribute may be applied to a function that returns a pointer and takes at least one argument of an integer or @@ -2076,7 +2079,8 @@ void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1))); declares that @code{my_memalign} returns memory with minimum alignment given by parameter 1. -@cindex @code{alloc_size} attribute +@atindex @code{alloc_size} +@cindex size of objects @item alloc_size (@var{position}) @itemx alloc_size (@var{position-1}, @var{position-2}) The @code{alloc_size} attribute may be applied to a function that @@ -2125,7 +2129,9 @@ is given by the product of arguments 1 and 2, and similarly, that is a pointer to a function that returns an object whose size is given by argument 1 to the function. -@cindex @code{always_inline} function attribute +@atindex @code{always_inline} +@cindex inlining +@cindex function inlining @item always_inline The @code{always_inline} attribute applies to functions. @@ -2144,7 +2150,7 @@ where the function is used. Link-time optimization can inline functions across translation units, but only if an optimization level that normally enables inlining is additionally specified. -@cindex @code{artificial} function attribute +@atindex @code{artificial} @item artificial This attribute applies to functions. @@ -2155,7 +2161,7 @@ info format it either means marking the function as artificial or using the caller location for all instructions within the inlined body. -@cindex @code{assume} statement attribute +@atindex @code{assume} @item assume This is a statement attribute that can appear only as an attribute declaration. @@ -2181,7 +2187,8 @@ foo (int x, int y) @code{y} is not actually incremented and the compiler can but does not have to optimize it to just @code{return 42 + 42;}. -@cindex @code{assume_aligned} function attribute +@atindex @code{assume_aligned} +@cindex alignment of data @item assume_aligned (@var{alignment}) @itemx assume_aligned (@var{alignment}, @var{offset}) The @code{assume_aligned} attribute may be applied to a function that @@ -2205,7 +2212,7 @@ declares that @code{my_alloc1} returns 16-byte aligned pointers and that @code{my_alloc2} returns a pointer whose value modulo 32 is equal to 8. -@cindex @code{btf_decl_tag} attribute +@atindex @code{btf_decl_tag} @item btf_decl_tag This attribute can be applied to functions, variables, struct or union member declarations, and function parameter declarations. @@ -2242,7 +2249,7 @@ when compiled with @option{-gbtf} results in an additional associating the string @samp{__percpu} with the @code{BTF_KIND_VAR} record for the variable @code{foo}. -@cindex @code{btf_type_tag} type attribute +@atindex @code{btf_type_tag} @item btf_type_tag (@var{argument}) This attribute applies to types. @@ -2281,7 +2288,8 @@ Note that the BTF format currently only has a representation for type tags associated with pointer types. Type tags on non-pointer types may be silently skipped when generating BTF. -@cindex @code{cleanup} variable attribute +@atindex @code{cleanup} +@cindex cleanup functions @item cleanup (@var{cleanup_function}) This attribute applies to variables. @@ -2304,8 +2312,10 @@ does not allow the exception to be caught, only to perform an action. It is undefined what happens if @var{cleanup_function} does not return normally. -@cindex @code{cold} attribute -@cindex @code{hot} attribute +@atindex @code{cold} +@atindex @code{hot} +@cindex cold functions and code regions +@cindex hot functions and code regions @item cold @itemx hot @@ -2346,8 +2356,9 @@ annotated. This attribute is used in cases where @code{__builtin_expect} cannot be used, for instance with computed goto or @code{asm goto}. -@cindex @code{common} variable attribute -@cindex @code{nocommon} variable attribute +@atindex @code{common} +@atindex @code{nocommon} +@cindex common storage @opindex fcommon @opindex fno-common @item common @@ -2361,7 +2372,7 @@ opposite---to allocate space for it directly. These attributes override the default chosen by the @option{-fno-common} and @option{-fcommon} flags respectively. -@cindex @code{const} function attribute +@atindex @code{const} @cindex functions that have no side effects @item const This attribute applies to functions. @@ -2406,8 +2417,9 @@ from data that cannot, const functions should never take pointer or, in C++, reference arguments. Likewise, a function that calls a non-const function usually must not be const itself. -@cindex @code{constructor} function attribute -@cindex @code{destructor} function attribute +@atindex @code{constructor} +@atindex @code{destructor} +@cindex functions that are called on program startup or exit @item constructor @itemx destructor @itemx constructor (@var{priority}) @@ -2449,7 +2461,7 @@ supported is rejected with an error. Only a few targets (typically those not using ELF object format, or the GNU linker) reject this usage. -@cindex @code{copy} attribute +@atindex @code{copy} @item copy @itemx copy (@var{name}) The @code{copy} attribute can appear on function, variable, and type @@ -2499,7 +2511,8 @@ A @{ /* @r{@dots{}} */ @}; struct __attribute__ ((copy ( (struct A *)0)) B @{ /* @r{@dots{}} */ @}; @end smallexample -@cindex @code{counted_by} variable attribute +@atindex @code{counted_by} +@cindex flexible array members @item counted_by (@var{count}) The @code{counted_by} attribute may be attached to a C99 flexible array member or a pointer field of a structure. @@ -2609,7 +2622,8 @@ in @code{p->array}. Note, however, the above feature is not valid for the pointer field. -@cindex @code{deprecated} attribute +@atindex @code{deprecated} +@cindex deprecated entities @item deprecated @itemx deprecated (@var{msg}) This attribute can appear on function, variable, type, or enumerator @@ -2678,7 +2692,7 @@ Control characters in the @var{msg} string are replaced with escape sequences, and if the @option{-fmessage-length} option is set to 0 (its default value) then any newline characters are ignored. -@cindex @code{designated_init} type attribute +@atindex @code{designated_init} @item designated_init This attribute may only be applied to structure types. @@ -2691,8 +2705,9 @@ positional initialization will result in future breakage. GCC emits warnings based on this attribute by default; use @option{-Wno-designated-init} to suppress them. -@cindex @code{error} function attribute -@cindex @code{warning} function attribute +@atindex @code{error} +@atindex @code{warning} +@cindex functions that are supposed to be optimized away @item error ("@var{message}") @itemx warning ("@var{message}") This attribute applies to functions. @@ -2713,7 +2728,8 @@ when using these attributes the problem is diagnosed earlier and with exact location of the call even in presence of inline functions or when not emitting debugging information. -@cindex @code{expected_throw} function attribute +@atindex @code{expected_throw} +@cindex functions that are expected to throw exceptions @item expected_throw This attribute applies to functions. @@ -2726,7 +2742,7 @@ it's applied to @code{noreturn} functions and @samp{-fharden-control-flow-redundancy} is enabled, and @samp{-fhardcfr-check-noreturn-calls=not-always} is not overridden. -@cindex @code{externally_visible} attribute +@atindex @code{externally_visible} @item externally_visible This attribute applies to global variables and functions. @@ -2743,7 +2759,9 @@ produced by @command{gold}. For other linkers that cannot generate resolution file, explicit @code{externally_visible} attributes are still necessary. -@cindex @code{fallthrough} statement attribute +@atindex @code{fallthrough} +@cindex fallthrough in switch statements +@cindex switch statement fallthrough @item fallthrough This statement attribute can appear only as an attribute declaration. @@ -2772,9 +2790,10 @@ switch (cond) @} @end smallexample -@cindex @code{fd_arg} function attribute -@cindex @code{fd_arg_read} function attribute -@cindex @code{fd_arg_write} function attribute +@atindex @code{fd_arg} +@atindex @code{fd_arg_read} +@atindex @code{fd_arg_write} +@cindex functions that take file descriptor arguments @item fd_arg (@var{N}) @itemx fd_arg_read (@var{N}) @itemx fd_arg_write (@var{N}) @@ -2820,7 +2839,9 @@ that its enumerators are used in bitwise operations, so e.g. @option{-Wswitch} should not warn about a @code{case} that corresponds to a bitwise combination of enumerators. -@cindex @code{flatten} function attribute +@atindex @code{flatten} +@cindex inlining +@cindex function inlining @item flatten This attribute applies to functions. @@ -2832,8 +2853,9 @@ Functions declared with attribute @code{noinline} and similar are not inlined. Whether the function itself is considered for inlining depends on its size and the current inlining parameters. -@cindex @code{format} function attribute +@atindex @code{format} @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments +@cindex functions that have format string arguments @opindex Wformat @item format (@var{archetype}, @var{string-index}, @var{first-to-check}) The @code{format} attribute applies to functions. @@ -2926,7 +2948,8 @@ standard modes, the X/Open function @code{strfmon} is also checked as are @code{printf_unlocked} and @code{fprintf_unlocked}. @xref{C Dialect Options,,Options Controlling C Dialect}. -@cindex @code{format_arg} function attribute +@atindex @code{format_arg} +@cindex functions that have format string arguments @opindex Wformat-nonliteral @item format_arg (@var{string-index}) The @code{format_arg} attribute applies to functions. @@ -2993,7 +3016,9 @@ system documentation provide descriptions of @code{CFString}, @code{CFStringRefs} and associated functions. -@cindex @code{gnu_inline} function attribute +@atindex @code{gnu_inline} +@cindex inlining +@cindex function inlining @item gnu_inline This attribute applies to functions. @@ -3033,7 +3058,8 @@ In C++, this attribute does not depend on @code{extern} in any way, but it still requires the @code{inline} keyword to enable its special behavior. -@cindex @code{hardbool} type attribute +@atindex @code{hardbool} +@cindex hardened boolean types @item hardbool @itemx hardbool (@var{false_value}) @itemx hardbool (@var{false_value}, @var{true_value}) @@ -3099,7 +3125,7 @@ Ada Booleans defined with the same size and equivalent representation clauses, and with enumerations or other languages' integral types that correspond to C's chosen integral type. -@cindex @code{ifunc} function attribute +@atindex @code{ifunc} @cindex indirect functions @cindex functions that are dynamically resolved @item ifunc ("@var{resolver}") @@ -3193,8 +3219,10 @@ int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv"))); Indirect functions cannot be weak. Binutils version 2.20.1 or higher and GNU C Library version 2.11.1 are required to use this feature. -@cindex @code{interrupt_handler} function attribute -@cindex @code{interrupt} function attribute +@atindex @code{interrupt_handler} +@atindex @code{interrupt} +@cindex interrupt handlers +@cindex functions that handle interrupts @item interrupt @itemx interrupt_handler These attributes apply to functions. @@ -3205,7 +3233,7 @@ entry and exit sequences that differ from those from regular functions. The exact syntax and behavior are target-specific; refer to the following subsections for details. -@cindex @code{leaf} function attribute +@atindex @code{leaf} @item leaf This attribute applies to functions. @@ -3244,7 +3272,7 @@ units into one, for example, by using the link-time optimization. For this reason the attribute is not allowed on types to annotate indirect calls. -@cindex @code{malloc} function attribute +@atindex @code{malloc} @cindex functions that behave like malloc @item malloc @item malloc (@var{deallocator}) @@ -3363,7 +3391,8 @@ pointer. If this is not the case, the deallocator can be marked with a @option{-Wanalyzer-possible-null-argument} diagnostic for code paths in which the deallocator is called with null. -@cindex @code{may_alias} type attribute +@atindex @code{may_alias} +@cindex pointer aliasing @item may_alias The @code{may_alias} attribute applies to pointer type declarations. @@ -3406,7 +3435,7 @@ declaration, the above program would abort when compiled with @option{-fstrict-aliasing}, which is on by default at @option{-O2} or above. -@cindex @code{mode} attribute +@atindex @code{mode} @item mode (@var{mode}) This attribute can apply to a variable or type declaration. @@ -3421,7 +3450,9 @@ indicate the mode corresponding to a one-byte integer, @code{word} or @code{__word__} for the mode of a one-word integer, and @code{pointer} or @code{__pointer__} for the mode used to represent pointers. -@cindex @code{musttail} statement attribute +@atindex @code{musttail} +@cindex tail recursion +@cindex functions that return via tail call @item musttail This attribute can be applied to a @code{return} statement with a return-value expression that is a function call. @@ -3511,7 +3542,9 @@ It is not possible to avoid the warning in this way if the maybe-escaped variable is a function argument, because those are in scope for the whole function. -@cindex @code{naked} function attribute +@atindex @code{naked} +@cindex naked functions +@cindex functions that do not have prologue/epilogue code @item naked This attribute applies to functions. @@ -3527,14 +3560,16 @@ are not supported. Not all targets support this attribute. Those that do include ARC, ARM, AVR, BPF, C-SKY, MCORE, MSP430, NDS32, RISC-V, RL78, RX, and x86. -@cindex @code{no_icf} attribute +@atindex @code{no_icf} @item no_icf This attribute can be applied to functions or variables. It prevents the entity from being merged with another semantically equivalent function or variable. -@cindex @code{no_instrument_function} function attribute +@atindex @code{no_instrument_function} +@cindex functions that should not be instrumented +@cindex function instrumentation @opindex finstrument-functions @opindex p @opindex pg @@ -3555,7 +3590,7 @@ The @code{no_profile_instrument_function} attribute informs the compiler that it should not process any code instrumentation for profile-feedback-based optimization code instrumentation. -@cindex @code{no_reorder} attribute +@atindex @code{no_reorder} @item no_reorder This attribute applies to functions or variables. @@ -3568,6 +3603,7 @@ as the @option{-fno-toplevel-reorder} option, but only applies to the marked symbols. @cindex @code{no_sanitize} function attribute +@cindex functions that should not be sanitized @item no_sanitize ("@var{sanitize_option}") This attribute applies to functions. @@ -3583,7 +3619,8 @@ void __attribute__ ((no_sanitize ("alignment,object-size"))) g () @{ /* @r{Do something.} */; @} @end smallexample -@cindex @code{no_sanitize_address} function attribute +@atindex @code{no_sanitize_address} +@cindex functions that should not be sanitized @item no_sanitize_address @itemx no_address_safety_analysis This attribute applies to functions. @@ -3597,6 +3634,7 @@ in the function when compiling with the @option{-fsanitize=address} option. @code{no_sanitize_address}. @cindex @code{no_sanitize_coverage} function attribute +@cindex functions that should not be sanitized @item no_sanitize_coverage This attribute applies to functions. @@ -3604,7 +3642,8 @@ The @code{no_sanitize_coverage} attribute informs the compiler that it should not do coverage-guided fuzzing code instrumentation (@option{-fsanitize-coverage}). -@cindex @code{no_sanitize_thread} function attribute +@atindex @code{no_sanitize_thread} +@cindex functions that should not be sanitized @item no_sanitize_thread This attribute applies to functions. @@ -3612,7 +3651,8 @@ The @code{no_sanitize_thread} attribute informs the compiler that it should not instrument memory accesses in the function when compiling with the @option{-fsanitize=thread} option. -@cindex @code{no_sanitize_undefined} function attribute +@atindex @code{no_sanitize_undefined} +@cindex functions that should not be sanitized @item no_sanitize_undefined This attribute applies to functions. @@ -3620,7 +3660,7 @@ The @code{no_sanitize_undefined} attribute informs the compiler that it should not check for undefined behavior in the function when compiling with the @option{-fsanitize=undefined} option. -@cindex @code{no_split_stack} function attribute +@atindex @code{no_split_stack} @opindex fsplit-stack @item no_split_stack This attribute applies to functions. @@ -3630,7 +3670,9 @@ prologue which decides whether to split the stack. Functions with the @code{no_split_stack} attribute do not have that prologue, and thus may run with only a small amount of stack space available. -@cindex @code{no_stack_limit} function attribute +@atindex @code{no_stack_limit} +@cindex stack protection +@cindex functions that should not have stack limit checking @item no_stack_limit This attribute applies to functions. @@ -3638,13 +3680,15 @@ This attribute locally overrides the @option{-fstack-limit-register} and @option{-fstack-limit-symbol} command-line options; it has the effect of disabling stack limit checking in the function it applies to. -@cindex @code{no_stack_protector} function attribute +@atindex @code{no_stack_protector} +@cindex stack protection +@cindex functions that should not have stack protection @item no_stack_protector This attribute applies to functions. It prevents GCC from generating stack protection code for the function. -@cindex @code{noclone} function attribute +@atindex @code{noclone} @item noclone This attribute applies to functions. @@ -3653,7 +3697,8 @@ cloning---a mechanism that produces specialized copies of functions and which is (currently) performed by interprocedural constant propagation. -@cindex @code{noinit} variable attribute +@atindex @code{noinit} +@cindex variables that should not be initialized @item noinit This attribute applies to variables. @@ -3665,7 +3710,10 @@ This attribute is specific to ELF targets and relies on the linker script to place sections with the @code{.noinit} prefix in the right location. -@cindex @code{noinline} function attribute +@atindex @code{noinline} +@cindex inlining, suppressing +@cindex function inlining, suppressing +@cindex suppressing inlining @item noinline This attribute applies to functions. @@ -3689,7 +3737,7 @@ asm (""); (@pxref{Extended Asm}) in the called function, to serve as a special side effect. -@cindex @code{noipa} function attribute +@atindex @code{noipa} @item noipa This attribute applies to functions. @@ -3703,8 +3751,8 @@ existing and future optimizations employing interprocedural analysis, including those that do not have an attribute suitable for disabling them individually. -@cindex @code{nonnull} function attribute -@cindex functions with non-null pointer arguments +@atindex @code{nonnull} +@cindex functions that have non-null pointer arguments @item nonnull @itemx nonnull (@var{arg-index}, @dots{}) The @code{nonnull} attribute may be applied to a function that takes at @@ -3762,7 +3810,8 @@ my_memcpy (void *dest, const void *src, size_t len) __attribute__((nonnull)); @end smallexample -@cindex @code{nonnull_if_nonzero} function attribute +@atindex @code{nonnull_if_nonzero} +@cindex functions that have non-null pointer arguments @item nonnull_if_nonzero (@var{arg-index}, @var{arg2-index}) @itemx nonnull_if_nonzero (@var{arg-index}, @var{arg2-index}, @var{arg3-index}) This attribute may be applied to a function that takes at @@ -3806,7 +3855,9 @@ to call @code{my_memcpy2 (NULL, NULL, 0);} or used on declarations which have e.g.@: an exception for zero sizes, in which case null may be passed. -@cindex @code{nonstring} variable attribute +@atindex @code{nonstring} +@cindex nonstring character arrays +@cindex character arrays, non-null-terminated @item nonstring This attribute applies to variables or members of a struct, union, or class that have type array of @code{char}, @code{signed char}, or @@ -3844,7 +3895,7 @@ int f (struct Data *pd, const char *s) @} @end smallexample -@cindex @code{noplt} function attribute +@atindex @code{noplt} @item noplt This attribute applies to functions. @@ -3876,7 +3927,7 @@ in position-independent code. In position-dependent code, a few targets also convert calls to functions that are marked to not use the PLT to use the GOT instead. -@cindex @code{noreturn} function attribute +@atindex @code{noreturn} @cindex functions that never return @item noreturn This attribute applies to functions. @@ -3919,7 +3970,8 @@ restored before calling the @code{noreturn} function. It does not make sense for a @code{noreturn} function to have a return type other than @code{void}. -@cindex @code{nothrow} function attribute +@atindex @code{nothrow} +@cindex functions that do not throw exceptions @item nothrow This attribute applies to functions. @@ -3929,7 +3981,8 @@ the standard C library can be guaranteed not to throw an exception with the notable exceptions of @code{qsort} and @code{bsearch} that take function pointer arguments. -@cindex @code{null_terminated_string_arg} function attribute +@atindex @code{null_terminated_string_arg} +@cindex character arrays, null-terminated @item null_terminated_string_arg @itemx null_terminated_string_arg (@var{N}) The @code{null_terminated_string_arg} attribute may be applied to a @@ -3988,7 +4041,7 @@ the analyzer requires the first parameter to be non-null, and either be validly null-terminated, or validly readable up to the size specified by the second parameter. -@cindex @code{objc_nullability} variable attribute +@atindex @code{objc_nullability} @item objc_nullability (@var{nullability kind}) @r{(Objective-C and Objective-C++ only)} This attribute applies to pointer variables only. @@ -4016,7 +4069,7 @@ property setter may take the value @code{nil} (which perhaps causes the property to be reset in some manner to a default) but for which the property getter will never validly return @code{nil}. -@cindex @code{objc_root_class} type attribute +@atindex @code{objc_root_class} @item objc_root_class @r{(Objective-C and Objective-C++ only)} This attribute applies to Objective-C and Objective-C++ classes. @@ -4024,7 +4077,9 @@ It marks the class as being a root class, and thus allows the compiler to elide any warnings about a missing superclass and to make additional checks for mandatory methods as needed. -@cindex @code{optimize} function attribute +@atindex @code{optimize} +@cindex optimization, per-function +@cindex functions that are compiled with specific optimizations @item optimize (@var{level}, @dots{}) @item optimize (@var{string}, @dots{}) This attribute applies to functions. @@ -4056,7 +4111,9 @@ specified by the attribute necessarily has an effect on the function. The @code{optimize} attribute should be used for debugging purposes only. It is not suitable in production code. -@cindex @code{packed} attribute +@atindex @code{packed} +@cindex packed data +@cindex alignment of structure fields @item packed This attribute can be attached to a @code{struct}, @code{union}, or C++ @code{class} definition, to a member of one, or to an @code{enum} @@ -4112,7 +4169,7 @@ struct __attribute__ ((__packed__)) my_packed_struct @end smallexample @opindex fshort-enums -When attached to an @code{enum} definition, the @code{packed} attribute +When attached to an @code{enum} indicates that the smallest integral type should be used to represent the type. Specifying the @option{-fshort-enums} flag on the command line is equivalent to specifying the @code{packed} @@ -4123,8 +4180,9 @@ of an @code{enum}, @code{struct}, @code{union}, or @code{class}, not on a @code{typedef} that does not also define the enumerated type, structure, union, or class. -@cindex @code{patchable_function_entry} function attribute +@atindex @code{patchable_function_entry} @cindex extra NOP instructions at the function entry point +@cindex functions that have patchable entries @item patchable_function_entry This attribute applies to functions. @@ -4146,7 +4204,8 @@ instrumentation on all functions that are part of the instrumentation framework with the attribute @code{patchable_function_entry (0)} to prevent recursion. -@cindex @code{persistent} variable attribute +@atindex @code{persistent} +@cindex persistent data @item persistent This attribute applies to variables. @@ -4160,7 +4219,7 @@ script to place the sections with the @code{.persistent} prefix in the right location. Specifically, some type of non-volatile, writable memory is required. -@cindex @code{pure} function attribute +@atindex @code{pure} @cindex functions that have no side effects @item pure This attribute applies to functions. @@ -4211,7 +4270,7 @@ diagnosed. Because a pure function cannot have any observable side effects it does not make sense for such a function to return @code{void}. Declaring such a function is diagnosed. -@cindex @code{reproducible} function type attribute +@atindex @code{reproducible} @cindex functions that have no side effects @item reproducible This attribute applies to function types. @@ -4242,7 +4301,8 @@ Reproducible functions with pointer or reference arguments can store additional results through those pointers or references or references to pointers. -@cindex @code{retain} attribute +@atindex @code{retain} +@cindex linker garbage collection @item retain This attribute applies to functions and variables. @@ -4255,7 +4315,7 @@ or @code{-fdata-sections} options) are placed in new, unique sections. This additional functionality requires Binutils version 2.36 or later. -@cindex @code{returns_nonnull} function attribute +@atindex @code{returns_nonnull} @item returns_nonnull This attribute applies to functions returning a pointer type. @@ -4271,7 +4331,7 @@ mymalloc (size_t len) __attribute__((returns_nonnull)); lets the compiler optimize callers based on the knowledge that the return value will never be null. -@cindex @code{returns_twice} function attribute +@atindex @code{returns_twice} @cindex functions that return more than once @item returns_twice This attribute applies to functions. @@ -4284,7 +4344,9 @@ function. Examples of such functions are @code{setjmp} and @code{vfork}. The @code{longjmp}-like counterpart of such function, if any, might need to be marked with the @code{noreturn} attribute. -@cindex @code{scalar_storage_order} type attribute +@atindex @code{scalar_storage_order} +@cindex endianness +@cindex byte order @item scalar_storage_order ("@var{endianness}") This attribute applies to a @code{union} or @code{struct}. @@ -4329,9 +4391,10 @@ is not supported; that is to say, if a given scalar object can be accessed through distinct types that assign a different storage order to it, then the behavior is undefined. -@cindex @code{section} attribute +@atindex @code{section} @cindex functions in arbitrary sections @cindex variables in arbitrary sections +@cindex program sections @item section ("@var{section-name}") This attribute applies to functions and variables. @@ -4391,7 +4454,9 @@ attribute is not available on all platforms. If you need to map the entire contents of a module to a particular section, consider using the facilities of the linker instead. -@cindex @code{sentinel} function attribute +@atindex @code{sentinel} +@cindex variadic function sentinel +@cindex functions that have a null-terminated argument list @item sentinel @itemx sentinel (@var{position}) This attribute applies to functions. @@ -4422,7 +4487,9 @@ a copy that redefines NULL appropriately. The warnings for missing or incorrect sentinels are enabled with @option{-Wformat}. -@cindex @code{simd} function attribute +@atindex @code{simd} +@cindex SIMD function cloning +@cindex functions that have SIMD clones @item simd @itemx simd("@var{mask}") This attribute applies to functions. @@ -4445,7 +4512,9 @@ If the attribute is specified and @code{#pragma omp declare simd} is present on a declaration and the @option{-fopenmp} or @option{-fopenmp-simd} switch is specified, then the attribute is ignored. -@cindex @code{stack_protect} function attribute +@atindex @code{stack_protect} +@cindex stack protection +@cindex functions that should have stack protection @item stack_protect This attribute applies to functions. @@ -4453,7 +4522,8 @@ It adds stack protection code to the function it applies to if flags @option{-fstack-protector}, @option{-fstack-protector-strong} or @option{-fstack-protector-explicit} are set. -@cindex @code{strict_flex_array} variable attribute +@atindex @code{strict_flex_array} +@cindex flexible array members @item strict_flex_array (@var{level}) The @code{strict_flex_array} attribute can be attached to the trailing array field of a structure. @@ -4487,7 +4557,8 @@ The @code{strict_flex_array} attribute interacts with the @option{-Wstrict-flex-arrays} option. @xref{Warning Options}, for more information. -@cindex @code{strub} type attribute +@atindex @code{strub} +@cindex stack scrubbing @item strub This attribute applies to types, and may also appear in variable and function declarations. @@ -4753,7 +4824,8 @@ __attribute__ ((noipa)) void flop (void) @{@} inline __attribute__ ((noclone, always_inline)) void flip (void) @{@} @end smallexample -@cindex @code{symver} function attribute +@atindex @code{symver} +@cindex symbol versioning @item symver ("@var{name2}@@@var{nodename}") This attribute applies to functions. @@ -4808,7 +4880,9 @@ addition to creating a symbol version (as if @code{"@var{name2}@@@var{nodename}"} was used) the version is also used to resolve @var{name2} by the linker. -@cindex @code{tainted_args} function attribute +@atindex @code{tainted_args} +@cindex tainted arguments +@cindex functions that have tainted arguments @item tainted_args This attribute applies to functions. @@ -4829,7 +4903,8 @@ The analyzer pays particular attention to such functions when @option{-Wanalyzer-tainted-offset}, and @option{-Wanalyzer-tainted-size}. -@cindex @code{target} function attribute +@atindex @code{target} +@cindex target-specific code generation attributes @item target (@var{string}, @dots{}) This attribute applies to functions. @@ -4892,7 +4967,8 @@ function definition. @xref{Function Multiversioning} for more details. -@cindex @code{target_version} function attribute +@atindex @code{target_version} +@cindex function multiversioning @item target_version (@var{option}) This attribute applies to functions. @@ -4904,7 +4980,8 @@ version set. @xref{Function Multiversioning} for more details. -@cindex @code{target_clones} function attribute +@atindex @code{target_clones} +@cindex function multiversioning @item target_clones (@var{options}) This attribute applies to functions. @@ -4942,7 +5019,7 @@ the @code{target_version} attribute. @xref{Function Multiversioning} for more details. -@cindex @code{tls_model} variable attribute +@atindex @code{tls_model} @item tls_model ("@var{tls_model}") This attribute applies to variables. @@ -4955,7 +5032,8 @@ The @var{tls_model} argument should be one of @code{global-dynamic}, Not all targets support this attribute. -@cindex @code{transparent_union} type attribute +@atindex @code{transparent_union} +@cindex transparent unions @item transparent_union This attribute applies to @code{union} type definitions. @@ -5018,7 +5096,7 @@ pid_t wait (wait_status_ptr_t p) @} @end smallexample -@cindex @code{unavailable} attribute +@atindex @code{unavailable} @item unavailable @itemx unavailable (@var{msg}) The @code{unavailable} attribute can apply to functions, variables, types, @@ -5032,7 +5110,7 @@ interface. Other than emitting an error rather than a warning, the @code{unavailable} attribute behaves in the same manner as @code{deprecated}. -@cindex @code{uninitialized} variable attribute +@atindex @code{uninitialized} @item uninitialized This variable applies to variables with automatic storage. @@ -5050,7 +5128,7 @@ overhead. This attribute has no effect when the option @code{-ftrivial-auto-var-init} is not present. -@cindex @code{unsequenced} function type attribute +@atindex @code{unsequenced} @cindex functions that have no side effects @item unsequenced This type attribute can appear on both function declarations and declarations @@ -5086,7 +5164,8 @@ the @code{const} attribute, so during optimization @code{const} has precedence over @code{unsequenced} which has precedence over @code{reproducible}. -@cindex @code{unused} attribute +@atindex @code{unused} +@cindex unused entities @item unused This attribute can be attached to a function, variable, structure field, type declaration, or label. @@ -5111,7 +5190,8 @@ not normally appropriate to use it in human-written code, though it could be useful in cases where the code that jumps to the label is contained within an @code{#ifdef} conditional. -@cindex @code{used} attribute +@atindex @code{used} +@cindex used entities @item used The @code{used} attribute applies to functions and variables. @@ -5132,7 +5212,8 @@ When applied to a static data member of a C++ class template, the attribute also means that the member is instantiated if the class itself is instantiated. -@cindex @code{vector_size} attribute +@atindex @code{vector_size} +@cindex vector types @item vector_size (@var{bytes}) The @code{vector_size} attribute can be attached to type, variable, and function declarations. @@ -5198,7 +5279,9 @@ the @code{int}. @xref{Vector Extensions}, for details of manipulating objects of vector types. -@cindex @code{visibility} attribute +@atindex @code{visibility} +@cindex visibility of symbols +@cindex linker visibility @item visibility ("@var{visibility_type}") This attribute can be applied to functions, variables, and types. @@ -5315,6 +5398,7 @@ Otherwise the two shared objects are unable to use the same typeinfo node and exception handling will break. @cindex @code{warn_if_not_aligned} attribute +@cindex alignment of structure fields @item warn_if_not_aligned (@var{alignment}) This attribute applies to structure fields. @@ -5371,7 +5455,9 @@ has similar behavior to the first example above. This warning can be disabled by @option{-Wno-if-not-aligned}. -@cindex @code{warn_unused_result} function attribute +@atindex @code{warn_unused_result} +@cindex unused function result +@cindex functions whose return value must be used @item warn_unused_result This attribute applies to functions. @@ -5394,7 +5480,8 @@ int foo () @noindent results in warning on line 5. -@cindex @code{weak} attribute +@atindex @code{weak} +@cindex weak symbols @item weak This attribute applies to function and variable declarations. @@ -5407,7 +5494,8 @@ designates a variable it must also have the same size and alignment as the weak symbol. Weak symbols are supported for ELF targets, and also for a.out targets when using the GNU assembler and linker. -@cindex @code{weakref} attribute +@atindex @code{weakref} +@cindex weak symbols @item weakref @itemx weakref ("@var{target}") This attribute applies to function or variable declarations. @@ -5455,7 +5543,7 @@ performing a link with relocatable output (i.e.@: @code{ld -r}) on them. A declaration to which @code{weakref} is attached and that is associated with a named @code{target} must be @code{static}. -@cindex @code{zero_call_used_regs} function attribute +@atindex @code{zero_call_used_regs} @item zero_call_used_regs ("@var{choice}") This attribute applies to functions. @@ -5616,7 +5704,8 @@ AArch64 target. @table @code -@cindex @code{target} function attribute, AArch64 +@atindex @code{target}, AArch64 +@cindex AArch64 code generation attributes @item target (@var{options}) This attribute applies to functions. @@ -5676,7 +5765,7 @@ and @code{crypto} extensions, and tunes it for @code{cortex-a53}. These are the permitted options: @table @samp -@cindex @code{target("general-regs-only")} function attribute, AArch64 +@atindex @code{target("general-regs-only")}, AArch64 @item general-regs-only Indicates that no floating-point or Advanced SIMD registers should be used when generating code for this function. If the function explicitly @@ -5684,7 +5773,7 @@ uses floating-point code, then the compiler gives an error. This is the same behavior as that of the command-line option @option{-mgeneral-regs-only}. -@cindex @code{target("fix-cortex-a53-835769")} function attribute, AArch64 +@atindex @code{target("fix-cortex-a53-835769")}, AArch64 @item fix-cortex-a53-835769 Indicates that the workaround for the Cortex-A53 erratum 835769 should be applied to this function. To explicitly disable the workaround for this @@ -5692,13 +5781,13 @@ function specify the negated form: @code{no-fix-cortex-a53-835769}. This corresponds to the behavior of the command-line options @option{-mfix-cortex-a53-835769} and @option{-mno-fix-cortex-a53-835769}. -@cindex @code{target("cmodel=")} function attribute, AArch64 +@atindex @code{target("cmodel=")}, AArch64 @item cmodel= Indicates that code should be generated for a particular code model for this function. The behavior and permissible arguments are the same as for the command-line option @option{-mcmodel=}. -@cindex @code{target("strict-align")} function attribute, AArch64 +@atindex @code{target("strict-align")}, AArch64 @item strict-align @itemx no-strict-align @code{strict-align} indicates that the compiler should not assume that unaligned @@ -5707,7 +5796,7 @@ that aligned memory references are handled by the system, the inverse attribute @code{no-strict-align} can be specified. The behavior is same as for the command-line option @option{-mstrict-align} and @option{-mno-strict-align}. -@cindex @code{target("omit-leaf-frame-pointer")} function attribute, AArch64 +@atindex @code{target("omit-leaf-frame-pointer")}, AArch64 @item omit-leaf-frame-pointer Indicates that the frame pointer should be omitted for a leaf function call. To keep the frame pointer, the inverse attribute @@ -5715,31 +5804,31 @@ To keep the frame pointer, the inverse attribute the same behavior as the command-line options @option{-momit-leaf-frame-pointer} and @option{-mno-omit-leaf-frame-pointer}. -@cindex @code{target("tls-dialect=")} function attribute, AArch64 +@atindex @code{target("tls-dialect=")}, AArch64 @item tls-dialect= Specifies the TLS dialect to use for this function. The behavior and permissible arguments are the same as for the command-line option @option{-mtls-dialect=}. -@cindex @code{target("arch=")} function attribute, AArch64 +@atindex @code{target("arch=")}, AArch64 @item arch= Specifies the architecture version and architectural extensions to use for this function. The behavior and permissible arguments are the same as for the @option{-march=} command-line option. -@cindex @code{target("tune=")} function attribute, AArch64 +@atindex @code{target("tune=")}, AArch64 @item tune= Specifies the core for which to tune the performance of this function. The behavior and permissible arguments are the same as for the @option{-mtune=} command-line option. -@cindex @code{target("cpu=")} function attribute, AArch64 +@atindex @code{target("cpu=")}, AArch64 @item cpu= Specifies the core for which to tune the performance of this function and also whose architectural features to use. The behavior and valid arguments are the same as for the @option{-mcpu=} command-line option. -@cindex @code{target("sign-return-address")} function attribute, AArch64 +@atindex @code{target("sign-return-address")}, AArch64 @item sign-return-address Select the function scope on which return address signing will be applied. The behavior and permissible arguments are the same as for the command-line option @@ -5747,20 +5836,20 @@ behavior and permissible arguments are the same as for the command-line option attribute is deprecated. The @code{branch-protection} attribute should be used instead. -@cindex @code{target("branch-protection")} function attribute, AArch64 +@atindex @code{target("branch-protection")}, AArch64 @item branch-protection Select the function scope on which branch protection will be applied. The behavior and permissible arguments are the same as for the command-line option @option{-mbranch-protection=}. The default value is @code{none}. -@cindex @code{target("outline-atomics")} function attribute, AArch64 +@atindex @code{target("outline-atomics")}, AArch64 @item outline-atomics @itemx no-outline-atomics Enable or disable calls to out-of-line helpers to implement atomic operations. This corresponds to the behavior of the command-line options @option{-moutline-atomics} and @option{-mno-outline-atomics}. -@cindex @code{target("max-vectorization")} function attribute, AArch64 +@atindex @code{target("max-vectorization")}, AArch64 @item max-vectorization @itemx no-max-vectorization @code{max-vectorization} tells GCC's vectorizer to treat all vector @@ -5770,7 +5859,7 @@ this behavior. This corresponds to the behavior of the command-line options @option{-mmax-vectorization} and @option{-mno-max-vectorization}. -@cindex @code{target("indirect_return")} function attribute, AArch64 +@atindex @code{target("indirect_return")}, AArch64 @item indirect_return The @code{indirect_return} attribute can be applied to a function type to indicate that the function may return via an indirect branch instead @@ -5780,7 +5869,7 @@ threads, such as the POSIX @code{swapcontext} function. This attribute adds a @code{BTI J} instruction when BTI is enabled e.g. via @option{-mbranch-protection}. -@cindex @code{target("preserve_none")} function attribute, AArch64 +@atindex @code{target("preserve_none")}, AArch64 @item preserve_none Use this attribute to change the procedure call standard of the specified function to the preserve-none variant. @@ -5835,7 +5924,7 @@ architectural feature rules specified above. These attributes are supported by the AMD GCN back end: @table @code -@cindex @code{amdgpu_hsa_kernel} function attribute, AMD GCN +@atindex @code{amdgpu_hsa_kernel}, AMD GCN @item amdgpu_hsa_kernel This attribute applies to functions. @@ -5927,7 +6016,7 @@ OpenACC/OpenMP). These attributes are supported by the ARC back end: @table @code -@cindex @code{interrupt} function attribute, ARC +@atindex @code{interrupt}, ARC @item interrupt This attribute applies to functions. @@ -5947,9 +6036,9 @@ Permissible values for this parameter are: @w{@code{ilink1}} and @w{@code{ilink2}} for ARCv1 architecture, and @w{@code{ilink}} and @w{@code{firq}} for ARCv2 architecture. -@cindex @code{long_call} function attribute, ARC -@cindex @code{medium_call} function attribute, ARC -@cindex @code{short_call} function attribute, ARC +@atindex @code{long_call}, ARC +@atindex @code{medium_call}, ARC +@atindex @code{short_call}, ARC @cindex indirect calls, ARC @item long_call @itemx medium_call @@ -5972,7 +6061,7 @@ attribute will always be close enough to be called with a conditional branch-and-link instruction, which has a 21-bit offset from the call site. -@cindex @code{jli_always} function attribute, ARC +@atindex @code{jli_always}, ARC @item jli_always This attribute applies to functions. @@ -5981,14 +6070,14 @@ instruction. The @code{jli} instruction makes use of a table stored into @code{.jlitab} section, which holds the location of the functions which are addressed using this instruction. -@cindex @code{jli_fixed} function attribute, ARC +@atindex @code{jli_fixed}, ARC @item jli_fixed This attribute applies to functions. Identical to @code{jli_always} above, but the location of the function in the @code{jli} table is known and given as an attribute parameter. -@cindex @code{secure_call} function attribute, ARC +@atindex @code{secure_call}, ARC @item secure_call This attribute applies to functions. @@ -5996,7 +6085,7 @@ It allows you to mark secure-code functions that are callable from normal mode. The location of the secure call function into the @code{sjli} table needs to be passed as argument. -@cindex @code{aux} variable attribute, ARC +@atindex @code{aux}, ARC @item aux This attribute applies to variables. @@ -6005,7 +6094,7 @@ auxiliary register space from C. The auxiliary register number is given via attribute argument. @item uncached -@cindex @code{uncached} type attribute, ARC +@atindex @code{uncached}, ARC This attribute applies to types. Declaring objects with the @code{uncached} type attribute @@ -6023,7 +6112,7 @@ These attributes are supported for ARM targets: @table @code -@cindex @code{general-regs-only} function attribute, ARM +@atindex @code{general-regs-only}, ARM @item general-regs-only This attribute applies to functions. @@ -6033,7 +6122,7 @@ uses floating-point code, then the compiler gives an error. This is the same behavior as that of the command-line option @option{-mgeneral-regs-only}. -@cindex @code{interrupt} function attribute, ARM +@atindex @code{interrupt}, ARM @item interrupt This attribute applies to functions. @@ -6056,15 +6145,15 @@ Permissible values for this parameter are: @code{IRQ}, @code{FIQ}, On ARMv7-M the interrupt type is ignored, and the attribute means the function may be called with a word-aligned stack pointer. -@cindex @code{isr} function attribute, ARM +@atindex @code{isr}, ARM @item isr This attribute applies to functions. Use this attribute on ARM to write Interrupt Service Routines. This is an alias to the @code{interrupt} attribute above. -@cindex @code{long_call} function attribute, ARM -@cindex @code{short_call} function attribute, ARM +@atindex @code{long_call}, ARM +@atindex @code{short_call}, ARM @cindex indirect calls, ARM @item long_call @itemx short_call @@ -6081,7 +6170,7 @@ calling sequence. The @code{short_call} attribute always places the offset to the function from the call site into the @samp{BL} instruction directly. -@cindex @code{pcs} function attribute, ARM +@atindex @code{pcs}, ARM @item pcs This attribute applies to functions. @@ -6104,7 +6193,7 @@ double f2d (float) __attribute__((pcs("aapcs"))); Variadic functions always use the @code{"aapcs"} calling convention and the compiler rejects attempts to specify an alternative. -@cindex @code{target} function attribute +@atindex @code{target}, ARM @item target (@var{options}) This attribute applies to functions. @@ -6114,24 +6203,24 @@ allows specification of target-specific compilation options. On ARM, the following options are allowed: @table @samp -@cindex @code{target("thumb")} function attribute, ARM +@atindex @code{target("thumb")}, ARM @item thumb Force code generation in the Thumb (T16/T32) ISA, depending on the architecture level. -@cindex @code{target("arm")} function attribute, ARM +@atindex @code{target("arm")}, ARM @item arm Force code generation in the ARM (A32) ISA. Functions from different modes can be inlined in the caller's mode. -@cindex @code{target("fpu=")} function attribute, ARM +@atindex @code{target("fpu=")}, ARM @item fpu= Specifies the fpu for which to tune the performance of this function. The behavior and permissible arguments are the same as for the @option{-mfpu=} command-line option. -@cindex @code{arch=} function attribute, ARM +@atindex @code{arch=}, ARM @item arch= Specifies the architecture version and architectural extensions to use for this function. The behavior and permissible arguments are the same as @@ -6167,7 +6256,7 @@ without modifying an existing @option{-march=} or @option{-mcpu} option. @end table -@cindex @code{notshared} type attribute, ARM +@atindex @code{notshared}, ARM @item notshared This attributes applies to class types. @@ -6201,8 +6290,8 @@ most Symbian OS code uses @code{__declspec}.) These attributes are supported by the AVR back end: @table @code -@cindex @code{signal} function attribute, AVR -@cindex @code{interrupt} function attribute, AVR +@atindex @code{signal}, AVR +@atindex @code{interrupt}, AVR @item signal @itemx interrupt These attributes apply to functions. @@ -6247,8 +6336,8 @@ ISR (ADC_vect, ISR_NOBLOCK) // Uses the "interrupt" attribute. When both @code{signal} and @code{interrupt} are specified for the same function, then @code{signal} is silently ignored. -@cindex @code{signal(@var{num})} function attribute, AVR -@cindex @code{interrupt(@var{num})} function attribute, AVR +@atindex @code{signal(@var{num})}, AVR +@atindex @code{interrupt(@var{num})}, AVR @item signal(@var{num}) @itemx interrupt(@var{num}) These attributes apply to functions. @@ -6293,7 +6382,7 @@ is similar to the @code{ISR_ALIASOF} macro provided by AVR-LibC, but without the overhead introduced by @code{ISR_ALIASOF}. -@cindex @code{noblock} function attribute, AVR +@atindex @code{noblock}, AVR @item noblock This attribute applies to functions. @@ -6304,7 +6393,7 @@ and @code{noblock} together has the same effect like using the @code{interrupt} attribute. Using the @code{noblock} attribute without @code{signal} has no effect. -@cindex @code{no_gccisr} function attribute, AVR +@atindex @code{no_gccisr}, AVR @item no_gccisr This attribute applies to functions. @@ -6337,8 +6426,8 @@ expects (parts of) the prologue code as outlined above to be present. To disable @code{__gcc_isr} generation for the whole compilation unit, use option @option{-mno-gas-isr-prologues}, @pxref{AVR Options}. -@cindex @code{OS_main} function attribute, AVR -@cindex @code{OS_task} function attribute, AVR +@atindex @code{OS_main}, AVR +@atindex @code{OS_task}, AVR @item OS_main @itemx OS_task This attribute applies to functions. @@ -6367,7 +6456,7 @@ or a frame pointer whereas @code{OS_main} and @code{OS_task} do this as needed. @end itemize -@cindex @code{progmem} variable attribute, AVR +@atindex @code{progmem}, AVR @item progmem This attribute applies to variables. @@ -6443,7 +6532,7 @@ at all. @end table -@cindex @code{io} variable attribute, AVR +@atindex @code{io}, AVR @item io @itemx io (@var{addr}) This attribute applies to variables. @@ -6469,7 +6558,7 @@ Example: extern volatile int porta __attribute__((io)); @end smallexample -@cindex @code{io_low} variable attribute, AVR +@atindex @code{io_low}, AVR @item io_low @itemx io_low (@var{addr}) The @code{io_low} attribute applies to variables. @@ -6479,7 +6568,7 @@ compiler that the object lies in the lower half of the I/O area, allowing the use of @code{cbi}, @code{sbi}, @code{sbic} and @code{sbis} instructions. -@cindex @code{address} variable attribute, AVR +@atindex @code{address}, AVR @item address (@var{addr}) This attribute applies to variables. @@ -6505,7 +6594,7 @@ will be compiled to a_symbol = 1234 @end smallexample -@cindex @code{absdata} variable attribute, AVR +@atindex @code{absdata}, AVR @item absdata This attribute applies to variables. @@ -6545,7 +6634,7 @@ These attributes are supported by the Blackfin back end: @table @code -@cindex @code{exception_handler} function attribute +@atindex @code{exception_handler}, Blackfin @cindex exception handler functions, Blackfin @item exception_handler This attribute applies to functions. @@ -6555,7 +6644,7 @@ is an exception handler. The compiler generates function entry and exit sequences suitable for use in an exception handler when this attribute is present. -@cindex @code{interrupt_handler} function attribute, Blackfin +@atindex @code{interrupt_handler}, Blackfin @item interrupt_handler This attribute applies to functions. @@ -6564,7 +6653,7 @@ indicate that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. -@cindex @code{kspisusp} function attribute, Blackfin +@atindex @code{kspisusp}, Blackfin @cindex User stack pointer in interrupts on the Blackfin @item kspisusp This attribute applies to functions. @@ -6573,7 +6662,7 @@ When used together with @code{interrupt_handler}, @code{exception_handler} or @code{nmi_handler}, code is generated to load the stack pointer from the USP register in the function prologue. -@cindex @code{l1_text} function attribute, Blackfin +@atindex @code{l1_text}, Blackfin @item l1_text This attribute applies to functions. @@ -6582,7 +6671,7 @@ SRAM@. The function is put into a specific section named @code{.l1.text}. With @option{-mfdpic}, function calls with a such function as the callee or caller uses inlined PLT. -@cindex @code{l2} attribute, Blackfin +@atindex @code{l2}, Blackfin @item l2 This attribute applies to functions and variables. @@ -6597,8 +6686,8 @@ Variables with @code{l2} attribute are put into the specific section named @code{.l2.data}. @cindex indirect calls, Blackfin -@cindex @code{longcall} function attribute, Blackfin -@cindex @code{shortcall} function attribute, Blackfin +@atindex @code{longcall}, Blackfin +@atindex @code{shortcall}, Blackfin @item longcall @itemx shortcall This attribute applies to functions. @@ -6610,7 +6699,7 @@ require a different (more expensive) calling sequence. The enough for the shorter calling sequence to be used. These attributes override the @option{-mlongcall} switch. -@cindex @code{nesting} function attribute, Blackfin +@atindex @code{nesting}, Blackfin @cindex Allow nesting in an interrupt handler on the Blackfin processor @item nesting This attribute applies to functions. @@ -6619,7 +6708,7 @@ Use this attribute together with @code{interrupt_handler}, @code{exception_handler} or @code{nmi_handler} to indicate that the function entry code should enable nested interrupts or exceptions. -@cindex @code{nmi_handler} function attribute, Blackfin +@atindex @code{nmi_handler}, Blackfin @cindex NMI handler functions on the Blackfin processor @item nmi_handler This attribute applies to functions. @@ -6629,7 +6718,7 @@ is an NMI handler. The compiler generates function entry and exit sequences suitable for use in an NMI handler when this attribute is present. -@cindex @code{saveall} function attribute, Blackfin +@atindex @code{saveall}, Blackfin @cindex save all registers on the Blackfin @item saveall This attribute applies to functions. @@ -6638,9 +6727,9 @@ It indicates that all registers except the stack pointer should be saved in the prologue regardless of whether they are used or not. -@cindex @code{l1_data} variable attribute, Blackfin -@cindex @code{l1_data_A} variable attribute, Blackfin -@cindex @code{l1_data_B} variable attribute, Blackfin +@atindex @code{l1_data}, Blackfin +@atindex @code{l1_data_A}, Blackfin +@atindex @code{l1_data_B}, Blackfin @item l1_data @itemx l1_data_A @itemx l1_data_B @@ -6660,7 +6749,7 @@ attribute are put into the specific section named @code{.l1.data.B}. These attributes are supported by the BPF back end: @table @code -@cindex @code{kernel helper}, function attribute, BPF +@atindex @code{kernel helper}, BPF @item kernel_helper This attribute applies to functions. @@ -6673,7 +6762,7 @@ int bpf_probe_read (void *dst, int size, const void *unsafe_ptr) __attribute__ ((kernel_helper (4))); @end smallexample -@cindex @code{preserve_access_index} type attribute, BPF +@atindex @code{preserve_access_index}, BPF @item preserve_access_index This attribute applies to types. @@ -6692,8 +6781,8 @@ wrapping every such access with @code{__builtin_preserve_access_index}. These attributes are supported by the C-SKY back end: @table @code -@cindex @code{interrupt} function attribute, C-SKY -@cindex @code{isr} function attribute, C-SKY +@atindex @code{interrupt}, C-SKY +@atindex @code{isr}, C-SKY @item interrupt @itemx isr These attributes apply to functions. @@ -6715,7 +6804,7 @@ are ignored with a warning otherwise. @xref{C-SKY Options}. These attributes are supported by the Epiphany back end: @table @code -@cindex @code{disinterrupt} function attribute, Epiphany +@atindex @code{disinterrupt}, Epiphany @item disinterrupt This attribute applies to functions. @@ -6723,7 +6812,7 @@ It causes the compiler to emit instructions to disable interrupts for the duration of the given function. -@cindex @code{forwarder_section} function attribute, Epiphany +@atindex @code{forwarder_section}, Epiphany @item forwarder_section This attribute applies to functions. @@ -6733,7 +6822,7 @@ reached by a branch instruction, so generate a local memory trampoline to transfer control. The single parameter identifies the section where the trampoline is placed. -@cindex @code{interrupt} function attribute, Epiphany +@atindex @code{interrupt}, Epiphany @item interrupt This attribute applies to functions. @@ -6776,8 +6865,8 @@ void __attribute__ ((interrupt ("dma0, dma1"), external_dma_handler (); @end smallexample -@cindex @code{long_call} function attribute, Epiphany -@cindex @code{short_call} function attribute, Epiphany +@atindex @code{long_call}, Epiphany +@atindex @code{short_call}, Epiphany @cindex indirect calls, Epiphany @item long_call @itemx short_call @@ -6796,7 +6885,7 @@ command-line switch and @code{#pragma long_calls} settings. These attributes are available for H8/300 targets: @table @code -@cindex @code{function_vector} function attribute, H8/300 +@atindex @code{function_vector}, H8/300 @item function_vector This attribute applies to functions. @@ -6807,7 +6896,7 @@ the function vector has a limited size (maximum 128 entries on the H8/300 and 64 entries on the H8/300H and H8S) and shares space with the interrupt vector. -@cindex @code{interrupt_handler} function attribute, H8/300 +@atindex @code{interrupt_handler}, H8/300 @item interrupt_handler This attribute applies to functions. @@ -6816,7 +6905,7 @@ indicate that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. -@cindex @code{saveall} function attribute, H8/300 +@atindex @code{saveall}, H8/300 @cindex save all registers on the H8/300, H8/300H, and H8S @item saveall This attribute applies to functions. @@ -6825,7 +6914,7 @@ Use it on the H8/300, H8/300H, and H8S to indicate that all registers except the stack pointer should be saved in the prologue regardless of whether they are used or not. -@cindex @code{monitor} function attribute, H8/300 +@atindex @code{monitor}, H8/300 @item monitor This attribute applies to functions. @@ -6833,7 +6922,7 @@ Use it to indicate a monitor function. It tells GCC to generate entry and exit sequences that disable interrupts during execution of the function. -@cindex @code{OS_Task} function attribute, H8/300 +@atindex @code{OS_Task}, H8/300 @item OS_Task This attribute applies to functions. @@ -6841,7 +6930,7 @@ Use it to disable the normal register and stack save and restore sequences on function entry and exit. The function epilogue generated by GCC includes only a return instruction. -@cindex @code{eightbit_data} variable attribute, H8/300 +@atindex @code{eightbit_data}, H8/300 @cindex eight-bit data on the H8/300, H8/300H, and H8S @item eightbit_data This attribute applies to variable declarations. @@ -6853,7 +6942,7 @@ The compiler generates more efficient code for certain operations on data in the eight-bit data area. Note the eight-bit data area is limited to 256 bytes of data. -@cindex @code{tiny_data} variable attribute, H8/300 +@atindex @code{tiny_data}, H8/300 @cindex tiny data section on the H8/300H and H8S @item tiny_data This attribute applies to variable declarations. @@ -6871,7 +6960,7 @@ slightly under 32KB of data. These attributes are supported on IA-64 targets: @table @code -@cindex @code{syscall_linkage} function attribute, IA-64 +@atindex @code{syscall_linkage}, IA-64 @item syscall_linkage This attribute applies to functions. @@ -6881,7 +6970,7 @@ to restart a system call after an interrupt without having to save/restore the input registers. This also prevents kernel data from leaking into application code. -@cindex @code{version_id} attribute, IA-64 +@atindex @code{version_id}, IA-64 @item version_id This attribute applies to global variables or functions. @@ -6897,7 +6986,7 @@ extern int foo () __attribute__((version_id ("20040821"))); @noindent Calls to @code{foo} are mapped to calls to @code{foo@{20040821@}}. -@cindex @code{model} variable attribute, IA-64 +@atindex @code{model}, IA-64 @item model (@var{model-name}) This attribute applies to variables. @@ -6917,9 +7006,7 @@ The following attributes are supported by the LoongArch back end: @table @code -@cindex @code{target (option,...)} loongarch function attribute target -@item target (option,...) -@cindex @code{target} LoongArch function attribute +@atindex @code{target}, LoongArch @item target (@var{options}) This attribute applies to functions. @@ -6947,7 +7034,7 @@ is valid and compiles function @code{foo} for LA64V1.1 with @code{lasx}. These are the permitted options: @table @samp -@cindex @code{target("strict-align")} function attribute, LoongArch +@atindex @code{target("strict-align")}, LoongArch @item strict-align @itemx no-strict-align @code{strict-align} indicates that the compiler should not assume that unaligned @@ -6956,25 +7043,25 @@ that aligned memory references are handled by the system, the inverse attribute @code{no-strict-align} can be specified. The behavior is same as for the command-line option @option{-mstrict-align} and @option{-mno-strict-align}. -@cindex @code{target("cmodel=")} function attribute, LoongArch +@atindex @code{target("cmodel=")}, LoongArch @item cmodel= Indicates that code should be generated for a particular code model for this function. The behavior and permissible arguments are the same as for the command-line option @option{-mcmodel=}. -@cindex @code{target("arch=")} function attribute, LoongArch +@atindex @code{target("arch=")}, LoongArch @item arch= Specifies the architecture version and architectural extensions to use for this function. The behavior and permissible arguments are the same as for the @option{-march=} command-line option. -@cindex @code{target("tune=")} function attribute, LoongArch +@atindex @code{target("tune=")}, LoongArch @item tune= Specifies the core for which to tune the performance of this function. The behavior and permissible arguments are the same as for the @option{-mtune=} command-line option. -@cindex @code{target("lsx")} function attribute, LoongArch +@atindex @code{target("lsx")}, LoongArch @item lsx @itemx no-lsx @code{lsx} indicates that vector instruction generation is allowed @@ -6982,7 +7069,7 @@ command-line option. The behavior is same as for the command-line option @option{-mlsx} and @option{-mno-lsx}. -@cindex @code{target("lasx")} function attribute, LoongArch +@atindex @code{target("lasx")}, LoongArch @item lasx @itemx no-lasx @code{lasx} indicates that lasx instruction generation is allowed (not allowed) @@ -7019,7 +7106,7 @@ But the following method cannot perform 128-bit vectorization. $ gcc test.c -o test.s -O2 -mlasx -mno-lasx @end smallexample -@cindex @code{target("recipe")} function attribute, LoongArch +@atindex @code{target("recipe")}, LoongArch @item recipe @itemx no-recipe @code{recipe} indicates that frecipe.@{s/d@} and frsqrt.@{s/d@} @@ -7027,7 +7114,7 @@ instruction generation is allowed (not allowed) when compiling the function. The behavior is same as for the command-line options @option{-mrecipe} and @option{-mno-recipe}. -@cindex @code{target("div32")} function attribute, LoongArch +@atindex @code{target("div32")}, LoongArch @item div32 @itemx no-div32 @code{div32} determines whether div.w[u] and mod.w[u] instructions on @@ -7036,7 +7123,7 @@ are evaluated based only on the lower 32 bits of the input registers. The behavior is same as for the command-line options @option{-mdiv32} and @option{-mno-div32}. -@cindex @code{target("lam-bh")} function attribute, LoongArch +@atindex @code{target("lam-bh")}, LoongArch @item lam-bh @itemx no-lam-bh @code{lam-bh} indicates that am@{swap/add@}[_db].@{b/h@} instruction generation @@ -7044,7 +7131,7 @@ is allowed (not allowed) when compiling the function. The behavior is same as for the command-line options @option{-mlam-bh} and @option{-mno-lam-bh}. -@cindex @code{target("lamcas")} function attribute, LoongArch +@atindex @code{target("lamcas")}, LoongArch @item lamcas @itemx no-lamcas @code{lamcas} indicates that amcas[_db].@{b/h/w/d@} instruction generation @@ -7052,7 +7139,7 @@ is allowed (not allowed) when compiling the function. The behavior is same as for the command-line options @option{-mlamcas} and @option{-mno-lamcas}. -@cindex @code{target("scq")} function attribute, LoongArch +@atindex @code{target("scq")}, LoongArch @item scq @itemx no-scq @code{scq} indicates that sc.q instruction generation is allowed (not allowed) @@ -7060,7 +7147,7 @@ when compiling the function. The behavior is same as for the command-line options @option{-mscq} and @option{-mno-scq}. -@cindex @code{target("ld-seq-sa")} function attribute, LoongArch +@atindex @code{target("ld-seq-sa")}, LoongArch @item ld-seq-sa @itemx no-ld-seq-sa @code{ld-seq-sa} indicates that same-address load-load barriers (dbar 0x700) @@ -7084,7 +7171,7 @@ attribute, it is not inlined if the code model of the caller function is different from the code model of the callee function. -@cindex @code{target_clones (string,...)} LoongArch function attribute +@atindex @code{target_clones}, LoongArch @item target_clones (@var{options}) This attribute applies to functions. @@ -7177,7 +7264,7 @@ than that of @samp{lsx;priority=1}. Note that the option values on the GCC command line are not considered when calculating the priority. -@cindex @code{target_version} LoongArch function attribute +@atindex @code{target_version}, LoongArch @item target_version (@var{option}) This attribute applies to functions. @@ -7228,7 +7315,7 @@ foo (int a) @} @end smallexample -@cindex @code{model} variable attribute, LoongArch +@atindex @code{model}, LoongArch @item model("@var{name}") This attribute applies to variables. @@ -7246,7 +7333,7 @@ specially. Currently the only supported values of @var{name} are These attributes are supported by the M32C back end: @table @code -@cindex @code{bank_switch} function attribute, M32C +@atindex @code{bank_switch}, M32C @item bank_switch This attribute applies to functions. @@ -7254,7 +7341,7 @@ When added to an interrupt handler with the M32C port, causes the prologue and epilogue to use bank switching to preserve the registers rather than saving them on the stack. -@cindex @code{fast_interrupt} function attribute, M32C +@atindex @code{fast_interrupt}, M32C @item fast_interrupt This attribute applies to functions. @@ -7263,7 +7350,7 @@ function is a fast interrupt handler. This is just like the @code{interrupt} attribute, except that @code{freit} is used to return instead of @code{reit}. -@cindex @code{function_vector} function attribute, M16C/M32C +@atindex @code{function_vector}, M16C/M32C @item function_vector This attribute applies to functions. @@ -7301,7 +7388,7 @@ then be sure to write this declaration in both files. This attribute is ignored for R8C target. -@cindex @code{interrupt} function attribute, M32C +@atindex @code{interrupt}, M32C @item interrupt This attribute applies to functions. @@ -7317,7 +7404,7 @@ when this attribute is present. These attributes are supported by the M32R/D back end: @table @code -@cindex @code{interrupt} function attribute, M32R/D +@atindex @code{interrupt}, M32R/D @item interrupt This attribute applies to functions. @@ -7326,7 +7413,7 @@ that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. -@cindex @code{model} attribute, M32R/D +@atindex @code{model}, M32R/D @cindex function addressability on the M32R/D @cindex variable addressability on the M32R/D @item model (@var{model-name}) @@ -7357,8 +7444,8 @@ generates the much slower @code{seth/add3/jl} instruction sequence). These attributes are supported by the m68k back end: @table @code -@cindex @code{interrupt} function attribute, m68k -@cindex @code{interrupt_handler} function attribute, m68k +@atindex @code{interrupt}, m68k +@atindex @code{interrupt_handler}, m68k @item interrupt @itemx interrupt_handler These attributes apply to functions. @@ -7368,7 +7455,7 @@ The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. Either name may be used. -@cindex @code{interrupt_thread} function attribute, fido +@atindex @code{interrupt_thread}, fido @item interrupt_thread This attribute applies to functions. @@ -7385,7 +7472,7 @@ instruction. This attribute is available only on fido. These attributes are supported on MicroBlaze targets: @table @code -@cindex @code{save_volatiles} function attribute, MicroBlaze +@atindex @code{save_volatiles}, MicroBlaze @item save_volatiles This attribute applies to functions. @@ -7395,7 +7482,7 @@ registers) are saved in the function prologue. If the function is a leaf function, only volatiles used by the function are saved. A normal function return is generated instead of a return from interrupt. -@cindex @code{break_handler} function attribute, MicroBlaze +@atindex @code{break_handler}, MicroBlaze @cindex break handler functions @item break_handler This attribute applies to functions. @@ -7410,8 +7497,8 @@ the @code{rtbd} instead of @code{rtsd}. void f () __attribute__ ((break_handler)); @end smallexample -@cindex @code{interrupt_handler} function attribute, MicroBlaze -@cindex @code{fast_interrupt} function attribute, MicroBlaze +@atindex @code{interrupt_handler}, MicroBlaze +@atindex @code{fast_interrupt}, MicroBlaze @item interrupt_handler @itemx fast_interrupt These attributes apply to functions. @@ -7427,12 +7514,18 @@ using @code{rtid} instead of @code{rtsd}. @node Microsoft Windows Attributes @subsubsection Microsoft Windows Attributes -The following attributes are available on Microsoft Windows and Symbian OS -targets. +@cindex @code{__declspec} +On Microsoft Windows and Symbian OS targets, GCC supports the +@code{__declspec} keyword in addition to @code{__attribute__} and +the standard C or C++ attribute syntax, for compatibility with other +compilers. The @code{__declspec} syntax +supported by GCC is limited and should only be used as explicitly +documented in this section. + +The following attributes are available on Microsoft Windows and Symbian OS: @table @code -@cindex @code{dllexport} attribute -@cindex @code{__declspec(dllexport)} +@atindex @code{dllexport}, Microsoft Windows @item dllexport This attribute can be applied to functions, variables, and C++ classes. @@ -7469,8 +7562,7 @@ including the symbol in the DLL's export table such as using a @file{.def} file with an @code{EXPORTS} section or, with GNU ld, using the @option{--export-all} linker flag. -@cindex @code{dllimport} attribute -@cindex @code{__declspec(dllimport)} +@atindex @code{dllimport}, Microsoft Windows @item dllimport This attribute applies to functions, variables, and C++ classes. @@ -7525,7 +7617,7 @@ this case, the address of a stub function in the import lib is referenced. On Microsoft Windows targets, the attribute can be disabled for functions by setting the @option{-mnop-fun-dllimport} flag. -@cindex @code{selectany} variable attribute +@atindex @code{selectany}, Microsoft Windows @item selectany This attribute applies to variables. @@ -7548,7 +7640,7 @@ targets. You can use @code{__declspec (selectany)} as a synonym for @code{__attribute__ ((selectany))} for compatibility with other compilers. -@cindex @code{shared} variable attribute +@atindex @code{shared}, Microsoft Windows @item shared This attribute applies to variables. @@ -7584,7 +7676,7 @@ The @code{shared} attribute is only available on Microsoft Windows@. These attributes are supported by the MIPS back end: @table @code -@cindex @code{interrupt} function attribute, MIPS +@atindex @code{interrupt}, MIPS @item interrupt This attribute applies to functions. @@ -7604,14 +7696,14 @@ all interrupts from sw0 up to and including the specified interrupt vector. You can use the following attributes to modify the behavior of an interrupt handler: @table @code -@cindex @code{use_shadow_register_set} function attribute, MIPS +@atindex @code{use_shadow_register_set}, MIPS @item use_shadow_register_set Assume that the handler uses a shadow register set, instead of the main general-purpose registers. An optional argument @code{intstack} is supported to indicate that the shadow register set contains a valid stack pointer. -@cindex @code{keep_interrupts_masked} function attribute, MIPS +@atindex @code{keep_interrupts_masked}, MIPS @item keep_interrupts_masked This attribute applies to functions. @@ -7619,7 +7711,7 @@ It tells GCC to keep interrupts masked for the whole function. Without this attribute, GCC tries to reenable interrupts for as much of the function as it can. -@cindex @code{use_debug_exception_return} function attribute, MIPS +@atindex @code{use_debug_exception_return}, MIPS @item use_debug_exception_return This attribute applies to functions. @@ -7648,10 +7740,10 @@ void __attribute__ ((interrupt("vector=hw3"))) v9 (); @end smallexample @cindex indirect calls, MIPS -@cindex @code{long_call} function attribute, MIPS -@cindex @code{short_call} function attribute, MIPS -@cindex @code{near} function attribute, MIPS -@cindex @code{far} function attribute, MIPS +@atindex @code{long_call}, MIPS +@atindex @code{short_call}, MIPS +@atindex @code{near}, MIPS +@atindex @code{far}, MIPS @item long_call @itemx short_call @itemx near @@ -7668,8 +7760,8 @@ attributes are synonyms, and have the opposite effect; they specify that non-PIC calls should be made using the more efficient @code{jal} instruction. -@cindex @code{mips16} function attribute, MIPS -@cindex @code{nomips16} function attribute, MIPS +@atindex @code{mips16}, MIPS +@atindex @code{nomips16}, MIPS @item mips16 @itemx nomips16 @@ -7689,8 +7781,8 @@ not that within individual functions. Mixed MIPS16 and non-MIPS16 code may interact badly with some GCC extensions such as @code{__builtin_apply} (@pxref{Constructing Calls}). -@cindex @code{micromips} function attribute -@cindex @code{nomicromips} function attribute +@atindex @code{micromips}, MIPS +@atindex @code{nomicromips}, MIPS @item micromips, MIPS @itemx nomicromips, MIPS This attribute applies to functions. @@ -7710,7 +7802,7 @@ not that within individual functions. Mixed microMIPS and non-microMIPS code may interact badly with some GCC extensions such as @code{__builtin_apply} (@pxref{Constructing Calls}). -@cindex @code{nocompression} function attribute, MIPS +@atindex @code{nocompression}, MIPS @item nocompression This attribute applies to functions. @@ -7719,7 +7811,7 @@ to locally turn off MIPS16 and microMIPS code generation. This attribute overrides the @option{-mips16} and @option{-mmicromips} options on the command line (@pxref{MIPS Options}). -@cindex @code{use_hazard_barrier_return} function attribute, MIPS +@atindex @code{use_hazard_barrier_return}, MIPS @item use_hazard_barrier_return This attribute applies to functions. @@ -7728,7 +7820,7 @@ return that clears all execution and instruction hazards while returning, instead of generating a normal return instruction. @item code_readable -@cindex @code{code_readable} function attribute, MIPS +@atindex @code{code_readable}, MIPS This attribute applies to functions. For MIPS targets that support PC-relative addressing modes, this attribute @@ -7753,7 +7845,7 @@ If there is no argument supplied, the default of @code{"yes"} applies. These attributes are supported by the MSP430 back end: @table @code -@cindex @code{critical} function attribute, MSP430 +@atindex @code{critical}, MSP430 @item critical This attribute applies to functions. @@ -7766,7 +7858,7 @@ The MSP430 hardware ensures that interrupts are disabled on entry to on exit. The @code{critical} attribute is therefore redundant on @code{interrupt} functions. -@cindex @code{interrupt} function attribute, MSP430 +@atindex @code{interrupt}, MSP430 @item interrupt This attribute applies to functions. @@ -7784,7 +7876,7 @@ match up with appropriate entries in the linker script. By default the names @code{watchdog} for vector 26, @code{nmi} for vector 30 and @code{reset} for vector 31 are recognized. -@cindex @code{reentrant} function attribute, MSP430 +@atindex @code{reentrant}, MSP430 @item reentrant This attribute applies to functions. @@ -7793,7 +7885,7 @@ upon exit. Reentrant functions cannot also have the @code{naked} or @code{critical} attributes. They can have the @code{interrupt} attribute. -@cindex @code{wakeup} function attribute, MSP430 +@atindex @code{wakeup}, MSP430 @item wakeup This attribute only applies to interrupt functions. It is silently ignored if applied to a non-interrupt function. @@ -7802,9 +7894,9 @@ A wakeup interrupt function rouses the processor from any low-power state that it might be in when the function exits. -@cindex @code{lower} attribute, MSP430 -@cindex @code{upper} attribute, MSP430 -@cindex @code{either} attribute, MSP430 +@atindex @code{lower}, MSP430 +@atindex @code{upper}, MSP430 +@atindex @code{either}, MSP430 @item lower @itemx upper @itemx either @@ -7857,7 +7949,7 @@ is used, and the @code{.lower} prefix is not added. These attributes are supported by the NDS32 back end: @table @code -@cindex @code{exception} function attribute +@atindex @code{exception}, NDS32 @cindex exception handler functions, NDS32 @item exception This attribute applies to functions. @@ -7866,7 +7958,7 @@ Use this attribute on the NDS32 target to indicate that the specified function is an exception handler. The compiler will generate corresponding sections for use in an exception handler. -@cindex @code{interrupt} function attribute, NDS32 +@atindex @code{interrupt}, NDS32 @item interrupt This attribute applies to functions. @@ -7875,28 +7967,28 @@ is an interrupt handler. The compiler generates corresponding sections for use in an interrupt handler. You can use the following attributes to modify the behavior: @table @code -@cindex @code{nested} function attribute, NDS32 +@atindex @code{nested}, NDS32 @item nested This interrupt service routine is interruptible. -@cindex @code{not_nested} function attribute, NDS32 +@atindex @code{not_nested}, NDS32 @item not_nested This interrupt service routine is not interruptible. -@cindex @code{nested_ready} function attribute, NDS32 +@atindex @code{nested_ready}, NDS32 @item nested_ready This interrupt service routine is interruptible after @code{PSW.GIE} (global interrupt enable) is set. This allows interrupt service routine to finish some short critical code before enabling interrupts. -@cindex @code{save_all} function attribute, NDS32 +@atindex @code{save_all}, NDS32 @item save_all The system will help save all registers into stack before entering interrupt handler. -@cindex @code{partial_save} function attribute, NDS32 +@atindex @code{partial_save}, NDS32 @item partial_save The system will help save caller registers into stack before entering interrupt handler. @end table -@cindex @code{reset} function attribute, NDS32 +@atindex @code{reset}, NDS32 @cindex reset handler functions @item reset This attribute applies to functions. @@ -7906,10 +7998,10 @@ is a reset handler. The compiler will generate corresponding sections for use in a reset handler. You can use the following attributes to provide extra exception handling: @table @code -@cindex @code{nmi} function attribute, NDS32 +@atindex @code{nmi}, NDS32 @item nmi Provide a user-defined function to handle NMI exception. -@cindex @code{warm} function attribute, NDS32 +@atindex @code{warm}, NDS32 @item warm Provide a user-defined function to handle warm reset exception. @end table @@ -7921,7 +8013,7 @@ Provide a user-defined function to handle warm reset exception. These attributes are supported by the Nvidia PTX back end: @table @code -@cindex @code{kernel} function attribute, Nvidia PTX +@atindex @code{kernel}, Nvidia PTX @item kernel This attribute applies to functions. @@ -7932,7 +8024,7 @@ By default functions are only callable only from other PTX functions. Kernel functions must have @code{void} return type. -@cindex @code{shared} variable attribute, Nvidia PTX +@atindex @code{shared}, Nvidia PTX @item shared This attribute applies to variables. @@ -7949,8 +8041,8 @@ These attributes are supported by the PowerPC back end: @table @code @cindex indirect calls, PowerPC -@cindex @code{longcall} function attribute, PowerPC -@cindex @code{shortcall} function attribute, PowerPC +@atindex @code{longcall}, PowerPC +@atindex @code{shortcall}, PowerPC @item longcall @itemx shortcall These attributes apply to functions. @@ -7966,7 +8058,7 @@ the @code{#pragma longcall} setting. @xref{RS/6000 and PowerPC Options}, for more information on whether long calls are necessary. -@cindex @code{target} function attribute +@atindex @code{target}, PowerPC @item target (@var{options}) This attribute applies to functions. @@ -7976,53 +8068,53 @@ allows specification of target-specific compilation options. On the PowerPC, the following options are allowed: @table @samp -@cindex @code{target("altivec")} function attribute, PowerPC +@atindex @code{target("altivec")}, PowerPC @item altivec @itemx no-altivec Generate code that uses (does not use) AltiVec instructions. In 32-bit code, you cannot enable AltiVec instructions unless @option{-mabi=altivec} is used on the command line. -@cindex @code{target("cmpb")} function attribute, PowerPC +@atindex @code{target("cmpb")}, PowerPC @item cmpb @itemx no-cmpb Generate code that uses (does not use) the compare bytes instruction implemented on the POWER6 processor and other processors that support the PowerPC V2.05 architecture. -@cindex @code{target("dlmzb")} function attribute, PowerPC +@atindex @code{target("dlmzb")}, PowerPC @item dlmzb @itemx no-dlmzb Generate code that uses (does not use) the string-search @samp{dlmzb} instruction on the IBM 405, 440, 464 and 476 processors. This instruction is generated by default when targeting those processors. -@cindex @code{target("fprnd")} function attribute, PowerPC +@atindex @code{target("fprnd")}, PowerPC @item fprnd @itemx no-fprnd Generate code that uses (does not use) the FP round to integer instructions implemented on the POWER5+ processor and other processors that support the PowerPC V2.03 architecture. -@cindex @code{target("hard-dfp")} function attribute, PowerPC +@atindex @code{target("hard-dfp")}, PowerPC @item hard-dfp @itemx no-hard-dfp Generate code that uses (does not use) the decimal floating-point instructions implemented on some POWER processors. -@cindex @code{target("isel")} function attribute, PowerPC +@atindex @code{target("isel")}, PowerPC @item isel @itemx no-isel Generate code that uses (does not use) ISEL instruction. -@cindex @code{target("mfcrf")} function attribute, PowerPC +@atindex @code{target("mfcrf")}, PowerPC @item mfcrf @itemx no-mfcrf Generate code that uses (does not use) the move from condition register field instruction implemented on the POWER4 processor and other processors that support the PowerPC V2.01 architecture. -@cindex @code{target("mulhw")} function attribute, PowerPC +@atindex @code{target("mulhw")}, PowerPC @item mulhw @itemx no-mulhw Generate code that uses (does not use) the half-word multiply and @@ -8030,20 +8122,20 @@ multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors. These instructions are generated by default when targeting those processors. -@cindex @code{target("multiple")} function attribute, PowerPC +@atindex @code{target("multiple")}, PowerPC @item multiple @itemx no-multiple Generate code that uses (does not use) the load multiple word instructions and the store multiple word instructions. -@cindex @code{target("update")} function attribute, PowerPC +@atindex @code{target("update")}, PowerPC @item update @itemx no-update Generate code that uses (does not use) the load or store instructions that update the base register to the address of the calculated memory location. -@cindex @code{target("popcntb")} function attribute, PowerPC +@atindex @code{target("popcntb")}, PowerPC @item popcntb @itemx no-popcntb Generate code that uses (does not use) the popcount and double-precision @@ -8051,42 +8143,42 @@ FP reciprocal estimate instruction implemented on the POWER5 processor and other processors that support the PowerPC V2.02 architecture. -@cindex @code{target("popcntd")} function attribute, PowerPC +@atindex @code{target("popcntd")}, PowerPC @item popcntd @itemx no-popcntd Generate code that uses (does not use) the popcount instruction implemented on the POWER7 processor and other processors that support the PowerPC V2.06 architecture. -@cindex @code{target("powerpc-gfxopt")} function attribute, PowerPC +@atindex @code{target("powerpc-gfxopt")}, PowerPC @item powerpc-gfxopt @itemx no-powerpc-gfxopt Generate code that uses (does not use) the optional PowerPC architecture instructions in the Graphics group, including floating-point select. -@cindex @code{target("powerpc-gpopt")} function attribute, PowerPC +@atindex @code{target("powerpc-gpopt")}, PowerPC @item powerpc-gpopt @itemx no-powerpc-gpopt Generate code that uses (does not use) the optional PowerPC architecture instructions in the General Purpose group, including floating-point square root. -@cindex @code{target("recip-precision")} function attribute, PowerPC +@atindex @code{target("recip-precision")}, PowerPC @item recip-precision @itemx no-recip-precision Assume (do not assume) that the reciprocal estimate instructions provide higher-precision estimates than is mandated by the PowerPC ABI. -@cindex @code{target("string")} function attribute, PowerPC +@atindex @code{target("string")}, PowerPC @item string @itemx no-string Generate code that uses (does not use) the load string instructions and the store string word instructions to save multiple registers and do small block moves. -@cindex @code{target("vsx")} function attribute, PowerPC +@atindex @code{target("vsx")}, PowerPC @item vsx @itemx no-vsx Generate code that uses (does not use) vector/scalar (VSX) @@ -8095,7 +8187,7 @@ more direct access to the VSX instruction set. In 32-bit code, you cannot enable VSX or AltiVec instructions unless @option{-mabi=altivec} is used on the command line. -@cindex @code{target("friz")} function attribute, PowerPC +@atindex @code{target("friz")}, PowerPC @item friz @itemx no-friz Generate (do not generate) the @code{friz} instruction when the @@ -8104,32 +8196,32 @@ rounding a floating-point value to 64-bit integer and back to floating point. The @code{friz} instruction does not return the same value if the floating-point number is too large to fit in an integer. -@cindex @code{target("avoid-indexed-addresses")} function attribute, PowerPC +@atindex @code{target("avoid-indexed-addresses")}, PowerPC @item avoid-indexed-addresses @itemx no-avoid-indexed-addresses Generate code that tries to avoid (not avoid) the use of indexed load or store instructions. -@cindex @code{target("paired")} function attribute, PowerPC +@atindex @code{target("paired")}, PowerPC @item paired @itemx no-paired Generate code that uses (does not use) the generation of PAIRED simd instructions. -@cindex @code{target("longcall")} function attribute, PowerPC +@atindex @code{target("longcall")}, PowerPC @item longcall @itemx no-longcall Generate code that assumes (does not assume) that all calls are far away so that a longer more expensive calling sequence is required. -@cindex @code{target("cpu=@var{CPU}")} function attribute, PowerPC +@atindex @code{target("cpu=@var{CPU}")}, PowerPC @item cpu=@var{CPU} Specify the architecture to generate code for when compiling the function. If you select the @code{target("cpu=power7")} attribute when generating 32-bit code, VSX and AltiVec instructions are not generated unless you use the @option{-mabi=altivec} option on the command line. -@cindex @code{target("tune=@var{TUNE}")} function attribute, PowerPC +@atindex @code{target("tune=@var{TUNE}")}, PowerPC @item tune=@var{TUNE} Specify the architecture to tune for when compiling the function. If you do not specify the @code{target("tune=@var{TUNE}")} attribute and @@ -8142,8 +8234,8 @@ On the PowerPC, the inliner does not inline a function that has different target options than the caller, unless the callee has a subset of the target options of the caller. -@cindex @code{ms_struct} attribute, PowerPC -@cindex @code{gcc_struct} attribute, PowerPC +@atindex @code{ms_struct}, PowerPC +@atindex @code{gcc_struct}, PowerPC @item ms_struct @itemx gcc_struct These attributes can be applied to variables and struct declarations. @@ -8151,7 +8243,7 @@ These attributes can be applied to variables and struct declarations. For full documentation of the struct attributes please see the documentation in @ref{x86 Attributes}. -@cindex @code{altivec} attribute, PowerPC +@atindex @code{altivec}, PowerPC @item altivec The @code{altivec} attribute applies to variables and types. @@ -8177,7 +8269,7 @@ These attributes mainly are intended to support the @code{__vector}, These attributes are supported by the RISC-V back end: @table @code -@cindex @code{interrupt} function attribute, RISC-V +@atindex @code{interrupt}, RISC-V @item interrupt This attribute applies to functions. @@ -8196,7 +8288,7 @@ Permissible values for this parameter are @code{supervisor}, @code{machine}, and @code{rnmi}. If there is no parameter, then it defaults to @code{machine}. -@cindex @code{riscv_vector_cc} function attribute, RISC-V +@atindex @code{riscv_vector_cc}, RISC-V @item riscv_vector_cc This attribute applies to functions. @@ -8208,7 +8300,7 @@ void foo() __attribute__((riscv_vector_cc)); [[riscv::vector_cc]] void foo(); // For C++11 and C23 @end smallexample -@cindex @code{target} function attribute +@atindex @code{target}, RISC-V @item target (@var{options}) This attribute applies to functions. @@ -8221,7 +8313,7 @@ similar command-line options (@pxref{RISC-V Options}), but on a per-function basis. @table @samp -@cindex @code{target("arch=")} function attribute, RISC-V +@atindex @code{target("arch=")}, RISC-V @item arch= Specifies the architecture version and architectural extensions to use for this function. The behavior and permissible arguments are the same as @@ -8231,19 +8323,19 @@ like @code{arch=+zba} means enable @code{zba} extension. Multiple extension can be enabled by separating them with a comma. For example: @code{arch=+zba,+zbb}. -@cindex @code{target("tune=")} function attribute, RISC-V +@atindex @code{target("tune=")}, RISC-V @item tune= Specifies the core for which to tune the performance of this function. The behavior and permissible arguments are the same as for the @option{-mtune=} command-line option. -@cindex @code{target("cpu=")} function attribute, RISC-V +@atindex @code{target("cpu=")}, RISC-V @item cpu= Specifies the core for which to tune the performance of this function and also whose architectural features to use. The behavior and valid arguments are the same as for the @option{-mcpu=} command-line option. -@cindex @code{target("max-vectorization")} function attribute, RISC-V +@atindex @code{target("max-vectorization")}, RISC-V @item max-vectorization @itemx no-max-vectorization @code{max-vectorization} tells GCC's vectorizer to treat all vector @@ -8291,8 +8383,8 @@ and @code{zbb} extensions and tunes it for @code{rocket}. These attributes are supported by the RL78 back end: @table @code -@cindex @code{interrupt} function attribute, RL78 -@cindex @code{brk_interrupt} function attribute, RL78 +@atindex @code{interrupt}, RL78 +@atindex @code{brk_interrupt}, RL78 @item interrupt @itemx brk_interrupt These attributes apply to functions. @@ -8306,7 +8398,7 @@ Use @code{brk_interrupt} instead of @code{interrupt} for handlers intended to be used with the @code{BRK} opcode (i.e.@: those that must end with @code{RETB} instead of @code{RETI}). -@cindex @code{saddr} variable attribute, RL78 +@atindex @code{saddr}, RL78 @item saddr This attribute applies to variables. @@ -8322,7 +8414,7 @@ which can be accessed more efficiently than the default memory region. These attributes are supported by the RX back end: @table @code -@cindex @code{fast_interrupt} function attribute, RX +@atindex @code{fast_interrupt}, RX @item fast_interrupt This attribute applies to functions. @@ -8331,7 +8423,7 @@ function is a fast interrupt handler. This is just like the @code{interrupt} attribute, except that @code{freit} is used to return instead of @code{reit}. -@cindex @code{interrupt} function attribute, RX +@atindex @code{interrupt}, RX @item interrupt This attribute applies to functions. @@ -8362,7 +8454,7 @@ void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default"))) txd1_handler (); @end smallexample -@cindex @code{vector} function attribute, RX +@atindex @code{vector}, RX @item vector This attribute applies to functions. @@ -8378,7 +8470,7 @@ function (i.e.@: it retains the normal C function calling ABI). See the These attributes are supported on the S/390: @table @code -@cindex @code{hotpatch} function attribute, S/390 +@atindex @code{hotpatch}, S/390 @item hotpatch (@var{halfwords-before-function-label},@var{halfwords-after-function-label}) This attribute applies to functions. @@ -8393,7 +8485,7 @@ both arguments the maximum allowed value is 1000000. If both arguments are zero, hotpatching is disabled. -@cindex @code{target} function attribute +@atindex @code{target}, S/390 @item target (@var{options}) This attribute applies to functions. @@ -8447,7 +8539,7 @@ does not undefine the @code{__VEC__} macro. These attributes are supported on the SH family of processors: @table @code -@cindex @code{function_vector} function attribute, SH +@atindex @code{function_vector}, SH @cindex calling functions through the function vector on SH2A @item function_vector This attribute applies to functions. @@ -8467,7 +8559,7 @@ saves at least 8 bytes of code; and if other successive calls are being made to the same function, it saves 2 bytes of code per each of these calls. -@cindex @code{interrupt_handler} function attribute, SH +@atindex @code{interrupt_handler}, SH @item interrupt_handler This attribute applies to functions. @@ -8475,7 +8567,7 @@ It indicates that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. -@cindex @code{nosave_low_regs} function attribute, SH +@atindex @code{nosave_low_regs}, SH @item nosave_low_regs This attribute applies to functions. @@ -8484,14 +8576,14 @@ function should not save and restore registers R0..R7. This can be used on SH3* and SH4* targets that have a second R0..R7 register bank for non-reentrant interrupt handlers. -@cindex @code{renesas} function attribute, SH +@atindex @code{renesas}, SH @item renesas This attribute applies to functions. On SH targets this attribute specifies that the function or struct follows the Renesas ABI. -@cindex @code{resbank} function attribute, SH +@atindex @code{resbank}, SH @item resbank This attribute applies to functions. @@ -8506,7 +8598,7 @@ vector table address offset are saved into a register bank. Register banks are stacked in first-in last-out (FILO) sequence. Restoration from the bank is executed by issuing a RESBANK instruction. -@cindex @code{sp_switch} function attribute, SH +@atindex @code{sp_switch}, SH @item sp_switch This attribute applies to functions. @@ -8521,7 +8613,7 @@ void f () __attribute__ ((interrupt_handler, sp_switch ("alt_stack"))); @end smallexample -@cindex @code{trap_exit} function attribute, SH +@atindex @code{trap_exit}, SH @item trap_exit This attribute applies to functions. @@ -8529,7 +8621,7 @@ Use this attribute on the SH for an @code{interrupt_handler} to return using @code{trapa} instead of @code{rte}. This attribute expects an integer argument specifying the trap number to be used. -@cindex @code{trapa_handler} function attribute, SH +@atindex @code{trapa_handler}, SH @item trapa_handler This attribute applies to functions. @@ -8549,8 +8641,8 @@ but it does not save and restore all registers. The V850 back end supports these attributes: @table @code -@cindex @code{interrupt} function attribute, V850 -@cindex @code{interrupt_handler} function attribute, V850 +@atindex @code{interrupt}, V850 +@atindex @code{interrupt_handler}, V850 @item interrupt @itemx interrupt_handler This attribute applies to functions. @@ -8560,21 +8652,21 @@ that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when either attribute is present. -@cindex @code{sda} variable attribute, V850 +@atindex @code{sda}, V850 @item sda This attribute applies to variables. Use it to explicitly place a variable in the small data area, which can hold up to 64 kilobytes. -@cindex @code{tda} variable attribute, V850 +@atindex @code{tda}, V850 @item tda This attribute applies to variables. Use it to explicitly place a variable in the tiny data area, which can hold up to 256 bytes in total. -@cindex @code{zda} variable attribute, V850 +@atindex @code{zda}, V850 @item zda This attribute applies to variables. @@ -8588,7 +8680,7 @@ of memory. These attributes are supported by the Visium back end: @table @code -@cindex @code{interrupt} function attribute, Visium +@atindex @code{interrupt}, Visium @item interrupt This attribute applies to functions. @@ -8604,7 +8696,7 @@ when this attribute is present. These attributes are supported by the x86 back end: @table @code -@cindex @code{cdecl} function attribute, x86-32 +@atindex @code{cdecl}, x86-32 @cindex functions that pop the argument stack on x86-32 @opindex mrtd @item cdecl @@ -8615,7 +8707,7 @@ assume that the calling function pops off the stack space used to pass arguments. This is useful to override the effects of the @option{-mrtd} switch. -@cindex @code{fastcall} function attribute, x86-32 +@atindex @code{fastcall}, x86-32 @cindex functions that pop the argument stack on x86-32 @item fastcall This attribute applies to functions. @@ -8627,7 +8719,7 @@ and other typed arguments are passed on the stack. The called function pops the arguments off the stack. If the number of arguments is variable all arguments are pushed on the stack. -@cindex @code{thiscall} function attribute, x86-32 +@atindex @code{thiscall}, x86-32 @cindex functions that pop the argument stack on x86-32 @item thiscall This attribute applies to functions. @@ -8642,8 +8734,8 @@ The @code{thiscall} attribute is intended for C++ non-static member functions. As a GCC extension, this calling convention can be used for C functions and for static member methods. -@cindex @code{ms_abi} function attribute, x86 -@cindex @code{sysv_abi} function attribute, x86 +@atindex @code{ms_abi}, x86 +@atindex @code{sysv_abi}, x86 @item ms_abi @itemx sysv_abi These attributes apply to functions. @@ -8659,7 +8751,7 @@ is the System V ELF ABI. Note, the @code{ms_abi} attribute for Microsoft Windows 64-bit targets currently requires the @option{-maccumulate-outgoing-args} option. -@cindex @code{callee_pop_aggregate_return} function attribute, x86 +@atindex @code{callee_pop_aggregate_return}, x86 @item callee_pop_aggregate_return (@var{number}) This attribute applies to functions. @@ -8674,7 +8766,7 @@ stack for hidden pointer. However, on x86-32 Microsoft Windows targets, the compiler assumes that the caller pops the stack for hidden pointer. -@cindex @code{ms_hook_prologue} function attribute, x86 +@atindex @code{ms_hook_prologue}, x86 @item ms_hook_prologue This attribute applies to functions. @@ -8683,7 +8775,7 @@ this function attribute to make GCC generate the ``hot-patching'' function prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2 and newer. -@cindex @code{regparm} function attribute, x86 +@atindex @code{regparm}, x86 @cindex functions that are passed arguments in registers on x86-32 @item regparm (@var{number}) This attribute applies to functions. @@ -8705,7 +8797,7 @@ safe since the loaders there save EAX, EDX and ECX. (Lazy binding can be disabled with the linker or the loader if desired, to avoid the problem.) -@cindex @code{sseregparm} function attribute, x86 +@atindex @code{sseregparm}, x86 @item sseregparm This attribute applies to functions. @@ -8715,7 +8807,7 @@ SSE registers instead of on the stack. Functions that take a variable number of arguments continue to pass all of their floating-point arguments on the stack. -@cindex @code{force_align_arg_pointer} function attribute, x86 +@atindex @code{force_align_arg_pointer}, x86 @item force_align_arg_pointer This attribute applies to functions. @@ -8725,7 +8817,7 @@ prologue and epilogue that realigns the run-time stack if necessary. This supports mixing legacy codes that run with a 4-byte aligned stack with modern codes that keep a 16-byte stack for SSE compatibility. -@cindex @code{stdcall} function attribute, x86-32 +@atindex @code{stdcall}, x86-32 @cindex functions that pop the argument stack on x86-32 @item stdcall This attribute applies to functions. @@ -8734,7 +8826,7 @@ On x86-32 targets, the @code{stdcall} attribute causes the compiler to assume that the called function pops off the stack space used to pass arguments, unless it takes a variable number of arguments. -@cindex @code{no_callee_saved_registers} function attribute, x86 +@atindex @code{no_callee_saved_registers}, x86 @item no_callee_saved_registers This attribute applies to functions. @@ -8745,7 +8837,7 @@ attribute can be used for a function called from the interrupt handler assembly stub which will preserve all registers and return from interrupt. -@cindex @code{preserve_none} function attribute, x86 +@atindex @code{preserve_none}, x86 @item preserve_none This attribute applies to functions. @@ -8754,7 +8846,7 @@ on x86-64, r12, r13, r14, r15, rdi and rsi registers are used for integer parameter passing and this calling convention is subject to change. -@cindex @code{no_caller_saved_registers} function attribute, x86 +@atindex @code{no_caller_saved_registers}, x86 @item no_caller_saved_registers This attribute applies to functions. @@ -8768,7 +8860,7 @@ the EFLAGS register. Since GCC doesn't preserve YMM nor ZMM registers, with AVX enabled. Note that MMX and x87 registers aren't preserved by @code{no_caller_saved_registers} attribute. -@cindex @code{interrupt} function attribute, x86 +@atindex @code{interrupt}, x86 @item interrupt This attribute applies to functions. @@ -8832,7 +8924,7 @@ Exception handlers should only be used for exceptions that push an error code; you should use an interrupt handler in other cases. The system will crash if the wrong kind of handler is used. -@cindex @code{target} function attribute +@atindex @code{target}, x86 @item target (@var{options}) This attribute applies to functions. @@ -8841,592 +8933,592 @@ allows specification of target-specific compilation options. On the x86, the following options are allowed: @table @samp -@cindex @code{target("3dnow")} function attribute, x86 +@atindex @code{target("3dnow")}, x86 @item 3dnow @itemx no-3dnow Enable/disable the generation of the 3DNow!@: instructions. -@cindex @code{target("3dnowa")} function attribute, x86 +@atindex @code{target("3dnowa")}, x86 @item 3dnowa @itemx no-3dnowa Enable/disable the generation of the enhanced 3DNow!@: instructions. -@cindex @code{target("abm")} function attribute, x86 +@atindex @code{target("abm")}, x86 @item abm @itemx no-abm Enable/disable the generation of the advanced bit instructions. -@cindex @code{target("adx")} function attribute, x86 +@atindex @code{target("adx")}, x86 @item adx @itemx no-adx Enable/disable the generation of the ADX instructions. -@cindex @code{target("aes")} function attribute, x86 +@atindex @code{target("aes")}, x86 @item aes @itemx no-aes Enable/disable the generation of the AES instructions. -@cindex @code{target("avx")} function attribute, x86 +@atindex @code{target("avx")}, x86 @item avx @itemx no-avx Enable/disable the generation of the AVX instructions. -@cindex @code{target("avx2")} function attribute, x86 +@atindex @code{target("avx2")}, x86 @item avx2 @itemx no-avx2 Enable/disable the generation of the AVX2 instructions. -@cindex @code{target("avx512bitalg")} function attribute, x86 +@atindex @code{target("avx512bitalg")}, x86 @item avx512bitalg @itemx no-avx512bitalg Enable/disable the generation of the AVX512BITALG instructions. -@cindex @code{target("avx512bw")} function attribute, x86 +@atindex @code{target("avx512bw")}, x86 @item avx512bw @itemx no-avx512bw Enable/disable the generation of the AVX512BW instructions. -@cindex @code{target("avx512cd")} function attribute, x86 +@atindex @code{target("avx512cd")}, x86 @item avx512cd @itemx no-avx512cd Enable/disable the generation of the AVX512CD instructions. -@cindex @code{target("avx512dq")} function attribute, x86 +@atindex @code{target("avx512dq")}, x86 @item avx512dq @itemx no-avx512dq Enable/disable the generation of the AVX512DQ instructions. -@cindex @code{target("avx512er")} function attribute, x86 +@atindex @code{target("avx512er")}, x86 @item avx512er @itemx no-avx512er Enable/disable the generation of the AVX512ER instructions. -@cindex @code{target("avx512f")} function attribute, x86 +@atindex @code{target("avx512f")}, x86 @item avx512f @itemx no-avx512f Enable/disable the generation of the AVX512F instructions. -@cindex @code{target("avx512ifma")} function attribute, x86 +@atindex @code{target("avx512ifma")}, x86 @item avx512ifma @itemx no-avx512ifma Enable/disable the generation of the AVX512IFMA instructions. -@cindex @code{target("avx512vbmi")} function attribute, x86 +@atindex @code{target("avx512vbmi")}, x86 @item avx512vbmi @itemx no-avx512vbmi Enable/disable the generation of the AVX512VBMI instructions. -@cindex @code{target("avx512vbmi2")} function attribute, x86 +@atindex @code{target("avx512vbmi2")}, x86 @item avx512vbmi2 @itemx no-avx512vbmi2 Enable/disable the generation of the AVX512VBMI2 instructions. -@cindex @code{target("avx512vl")} function attribute, x86 +@atindex @code{target("avx512vl")}, x86 @item avx512vl @itemx no-avx512vl Enable/disable the generation of the AVX512VL instructions. -@cindex @code{target("avx512vnni")} function attribute, x86 +@atindex @code{target("avx512vnni")}, x86 @item avx512vnni @itemx no-avx512vnni Enable/disable the generation of the AVX512VNNI instructions. -@cindex @code{target("avx512vpopcntdq")} function attribute, x86 +@atindex @code{target("avx512vpopcntdq")}, x86 @item avx512vpopcntdq @itemx no-avx512vpopcntdq Enable/disable the generation of the AVX512VPOPCNTDQ instructions. -@cindex @code{target("bmi")} function attribute, x86 +@atindex @code{target("bmi")}, x86 @item bmi @itemx no-bmi Enable/disable the generation of the BMI instructions. -@cindex @code{target("bmi2")} function attribute, x86 +@atindex @code{target("bmi2")}, x86 @item bmi2 @itemx no-bmi2 Enable/disable the generation of the BMI2 instructions. -@cindex @code{target("cldemote")} function attribute, x86 +@atindex @code{target("cldemote")}, x86 @item cldemote @itemx no-cldemote Enable/disable the generation of the CLDEMOTE instructions. -@cindex @code{target("clflushopt")} function attribute, x86 +@atindex @code{target("clflushopt")}, x86 @item clflushopt @itemx no-clflushopt Enable/disable the generation of the CLFLUSHOPT instructions. -@cindex @code{target("clwb")} function attribute, x86 +@atindex @code{target("clwb")}, x86 @item clwb @itemx no-clwb Enable/disable the generation of the CLWB instructions. -@cindex @code{target("clzero")} function attribute, x86 +@atindex @code{target("clzero")}, x86 @item clzero @itemx no-clzero Enable/disable the generation of the CLZERO instructions. -@cindex @code{target("crc32")} function attribute, x86 +@atindex @code{target("crc32")}, x86 @item crc32 @itemx no-crc32 Enable/disable the generation of the CRC32 instructions. -@cindex @code{target("cx16")} function attribute, x86 +@atindex @code{target("cx16")}, x86 @item cx16 @itemx no-cx16 Enable/disable the generation of the CMPXCHG16B instructions. -@cindex @code{target("default")} function attribute, x86 +@atindex @code{target("default")}, x86 @item default @xref{Function Multiversioning}, where it is used to specify the default function version. -@cindex @code{target("f16c")} function attribute, x86 +@atindex @code{target("f16c")}, x86 @item f16c @itemx no-f16c Enable/disable the generation of the F16C instructions. -@cindex @code{target("fma")} function attribute, x86 +@atindex @code{target("fma")}, x86 @item fma @itemx no-fma Enable/disable the generation of the FMA instructions. -@cindex @code{target("fma4")} function attribute, x86 +@atindex @code{target("fma4")}, x86 @item fma4 @itemx no-fma4 Enable/disable the generation of the FMA4 instructions. -@cindex @code{target("fsgsbase")} function attribute, x86 +@atindex @code{target("fsgsbase")}, x86 @item fsgsbase @itemx no-fsgsbase Enable/disable the generation of the FSGSBASE instructions. -@cindex @code{target("fxsr")} function attribute, x86 +@atindex @code{target("fxsr")}, x86 @item fxsr @itemx no-fxsr Enable/disable the generation of the FXSR instructions. -@cindex @code{target("gfni")} function attribute, x86 +@atindex @code{target("gfni")}, x86 @item gfni @itemx no-gfni Enable/disable the generation of the GFNI instructions. -@cindex @code{target("hle")} function attribute, x86 +@atindex @code{target("hle")}, x86 @item hle @itemx no-hle Enable/disable the generation of the HLE instruction prefixes. -@cindex @code{target("lwp")} function attribute, x86 +@atindex @code{target("lwp")}, x86 @item lwp @itemx no-lwp Enable/disable the generation of the LWP instructions. -@cindex @code{target("lzcnt")} function attribute, x86 +@atindex @code{target("lzcnt")}, x86 @item lzcnt @itemx no-lzcnt Enable/disable the generation of the LZCNT instructions. -@cindex @code{target("mmx")} function attribute, x86 +@atindex @code{target("mmx")}, x86 @item mmx @itemx no-mmx Enable/disable the generation of the MMX instructions. -@cindex @code{target("movbe")} function attribute, x86 +@atindex @code{target("movbe")}, x86 @item movbe @itemx no-movbe Enable/disable the generation of the MOVBE instructions. -@cindex @code{target("movdir64b")} function attribute, x86 +@atindex @code{target("movdir64b")}, x86 @item movdir64b @itemx no-movdir64b Enable/disable the generation of the MOVDIR64B instructions. -@cindex @code{target("movdiri")} function attribute, x86 +@atindex @code{target("movdiri")}, x86 @item movdiri @itemx no-movdiri Enable/disable the generation of the MOVDIRI instructions. -@cindex @code{target("mwait")} function attribute, x86 +@atindex @code{target("mwait")}, x86 @item mwait @itemx no-mwait Enable/disable the generation of the MWAIT and MONITOR instructions. -@cindex @code{target("mwaitx")} function attribute, x86 +@atindex @code{target("mwaitx")}, x86 @item mwaitx @itemx no-mwaitx Enable/disable the generation of the MWAITX instructions. -@cindex @code{target("pclmul")} function attribute, x86 +@atindex @code{target("pclmul")}, x86 @item pclmul @itemx no-pclmul Enable/disable the generation of the PCLMUL instructions. -@cindex @code{target("pconfig")} function attribute, x86 +@atindex @code{target("pconfig")}, x86 @item pconfig @itemx no-pconfig Enable/disable the generation of the PCONFIG instructions. -@cindex @code{target("pku")} function attribute, x86 +@atindex @code{target("pku")}, x86 @item pku @itemx no-pku Enable/disable the generation of the PKU instructions. -@cindex @code{target("popcnt")} function attribute, x86 +@atindex @code{target("popcnt")}, x86 @item popcnt @itemx no-popcnt Enable/disable the generation of the POPCNT instruction. -@cindex @code{target("prfchw")} function attribute, x86 +@atindex @code{target("prfchw")}, x86 @item prfchw @itemx no-prfchw Enable/disable the generation of the PREFETCHW instruction. -@cindex @code{target("ptwrite")} function attribute, x86 +@atindex @code{target("ptwrite")}, x86 @item ptwrite @itemx no-ptwrite Enable/disable the generation of the PTWRITE instructions. -@cindex @code{target("rdpid")} function attribute, x86 +@atindex @code{target("rdpid")}, x86 @item rdpid @itemx no-rdpid Enable/disable the generation of the RDPID instructions. -@cindex @code{target("rdrnd")} function attribute, x86 +@atindex @code{target("rdrnd")}, x86 @item rdrnd @itemx no-rdrnd Enable/disable the generation of the RDRND instructions. -@cindex @code{target("rdseed")} function attribute, x86 +@atindex @code{target("rdseed")}, x86 @item rdseed @itemx no-rdseed Enable/disable the generation of the RDSEED instructions. -@cindex @code{target("rtm")} function attribute, x86 +@atindex @code{target("rtm")}, x86 @item rtm @itemx no-rtm Enable/disable the generation of the RTM instructions. -@cindex @code{target("sahf")} function attribute, x86 +@atindex @code{target("sahf")}, x86 @item sahf @itemx no-sahf Enable/disable the generation of the SAHF instructions. -@cindex @code{target("sgx")} function attribute, x86 +@atindex @code{target("sgx")}, x86 @item sgx @itemx no-sgx Enable/disable the generation of the SGX instructions. -@cindex @code{target("sha")} function attribute, x86 +@atindex @code{target("sha")}, x86 @item sha @itemx no-sha Enable/disable the generation of the SHA instructions. -@cindex @code{target("shstk")} function attribute, x86 +@atindex @code{target("shstk")}, x86 @item shstk @itemx no-shstk Enable/disable the shadow stack built-in functions from CET. -@cindex @code{target("sse")} function attribute, x86 +@atindex @code{target("sse")}, x86 @item sse @itemx no-sse Enable/disable the generation of the SSE instructions. -@cindex @code{target("sse2")} function attribute, x86 +@atindex @code{target("sse2")}, x86 @item sse2 @itemx no-sse2 Enable/disable the generation of the SSE2 instructions. -@cindex @code{target("sse3")} function attribute, x86 +@atindex @code{target("sse3")}, x86 @item sse3 @itemx no-sse3 Enable/disable the generation of the SSE3 instructions. -@cindex @code{target("sse4")} function attribute, x86 +@atindex @code{target("sse4")}, x86 @item sse4 @itemx no-sse4 Enable/disable the generation of the SSE4 instructions (both SSE4.1 and SSE4.2). -@cindex @code{target("sse4.1")} function attribute, x86 +@atindex @code{target("sse4.1")}, x86 @item sse4.1 @itemx no-sse4.1 Enable/disable the generation of the SSE4.1 instructions. -@cindex @code{target("sse4.2")} function attribute, x86 +@atindex @code{target("sse4.2")}, x86 @item sse4.2 @itemx no-sse4.2 Enable/disable the generation of the SSE4.2 instructions. -@cindex @code{target("sse4a")} function attribute, x86 +@atindex @code{target("sse4a")}, x86 @item sse4a @itemx no-sse4a Enable/disable the generation of the SSE4A instructions. -@cindex @code{target("ssse3")} function attribute, x86 +@atindex @code{target("ssse3")}, x86 @item ssse3 @itemx no-ssse3 Enable/disable the generation of the SSSE3 instructions. -@cindex @code{target("tbm")} function attribute, x86 +@atindex @code{target("tbm")}, x86 @item tbm @itemx no-tbm Enable/disable the generation of the TBM instructions. -@cindex @code{target("vaes")} function attribute, x86 +@atindex @code{target("vaes")}, x86 @item vaes @itemx no-vaes Enable/disable the generation of the VAES instructions. -@cindex @code{target("vpclmulqdq")} function attribute, x86 +@atindex @code{target("vpclmulqdq")}, x86 @item vpclmulqdq @itemx no-vpclmulqdq Enable/disable the generation of the VPCLMULQDQ instructions. -@cindex @code{target("waitpkg")} function attribute, x86 +@atindex @code{target("waitpkg")}, x86 @item waitpkg @itemx no-waitpkg Enable/disable the generation of the WAITPKG instructions. -@cindex @code{target("wbnoinvd")} function attribute, x86 +@atindex @code{target("wbnoinvd")}, x86 @item wbnoinvd @itemx no-wbnoinvd Enable/disable the generation of the WBNOINVD instructions. -@cindex @code{target("xop")} function attribute, x86 +@atindex @code{target("xop")}, x86 @item xop @itemx no-xop Enable/disable the generation of the XOP instructions. -@cindex @code{target("xsave")} function attribute, x86 +@atindex @code{target("xsave")}, x86 @item xsave @itemx no-xsave Enable/disable the generation of the XSAVE instructions. -@cindex @code{target("xsavec")} function attribute, x86 +@atindex @code{target("xsavec")}, x86 @item xsavec @itemx no-xsavec Enable/disable the generation of the XSAVEC instructions. -@cindex @code{target("xsaveopt")} function attribute, x86 +@atindex @code{target("xsaveopt")}, x86 @item xsaveopt @itemx no-xsaveopt Enable/disable the generation of the XSAVEOPT instructions. -@cindex @code{target("xsaves")} function attribute, x86 +@atindex @code{target("xsaves")}, x86 @item xsaves @itemx no-xsaves Enable/disable the generation of the XSAVES instructions. -@cindex @code{target("amx-tile")} function attribute, x86 +@atindex @code{target("amx-tile")}, x86 @item amx-tile @itemx no-amx-tile Enable/disable the generation of the AMX-TILE instructions. -@cindex @code{target("amx-int8")} function attribute, x86 +@atindex @code{target("amx-int8")}, x86 @item amx-int8 @itemx no-amx-int8 Enable/disable the generation of the AMX-INT8 instructions. -@cindex @code{target("amx-bf16")} function attribute, x86 +@atindex @code{target("amx-bf16")}, x86 @item amx-bf16 @itemx no-amx-bf16 Enable/disable the generation of the AMX-BF16 instructions. -@cindex @code{target("uintr")} function attribute, x86 +@atindex @code{target("uintr")}, x86 @item uintr @itemx no-uintr Enable/disable the generation of the UINTR instructions. -@cindex @code{target("hreset")} function attribute, x86 +@atindex @code{target("hreset")}, x86 @item hreset @itemx no-hreset Enable/disable the generation of the HRESET instruction. -@cindex @code{target("kl")} function attribute, x86 +@atindex @code{target("kl")}, x86 @item kl @itemx no-kl Enable/disable the generation of the KEYLOCKER instructions. -@cindex @code{target("widekl")} function attribute, x86 +@atindex @code{target("widekl")}, x86 @item widekl @itemx no-widekl Enable/disable the generation of the WIDEKL instructions. -@cindex @code{target("avxvnni")} function attribute, x86 +@atindex @code{target("avxvnni")}, x86 @item avxvnni @itemx no-avxvnni Enable/disable the generation of the AVXVNNI instructions. -@cindex @code{target("avxifma")} function attribute, x86 +@atindex @code{target("avxifma")}, x86 @item avxifma @itemx no-avxifma Enable/disable the generation of the AVXIFMA instructions. -@cindex @code{target("avxvnniint8")} function attribute, x86 +@atindex @code{target("avxvnniint8")}, x86 @item avxvnniint8 @itemx no-avxvnniint8 Enable/disable the generation of the AVXVNNIINT8 instructions. -@cindex @code{target("avxneconvert")} function attribute, x86 +@atindex @code{target("avxneconvert")}, x86 @item avxneconvert @itemx no-avxneconvert Enable/disable the generation of the AVXNECONVERT instructions. -@cindex @code{target("cmpccxadd")} function attribute, x86 +@atindex @code{target("cmpccxadd")}, x86 @item cmpccxadd @itemx no-cmpccxadd Enable/disable the generation of the CMPccXADD instructions. -@cindex @code{target("amx-fp16")} function attribute, x86 +@atindex @code{target("amx-fp16")}, x86 @item amx-fp16 @itemx no-amx-fp16 Enable/disable the generation of the AMX-FP16 instructions. -@cindex @code{target("prefetchi")} function attribute, x86 +@atindex @code{target("prefetchi")}, x86 @item prefetchi @itemx no-prefetchi Enable/disable the generation of the PREFETCHI instructions. -@cindex @code{target("raoint")} function attribute, x86 +@atindex @code{target("raoint")}, x86 @item raoint @itemx no-raoint Enable/disable the generation of the RAOINT instructions. -@cindex @code{target("amx-complex")} function attribute, x86 +@atindex @code{target("amx-complex")}, x86 @item amx-complex @itemx no-amx-complex Enable/disable the generation of the AMX-COMPLEX instructions. -@cindex @code{target("avxvnniint16")} function attribute, x86 +@atindex @code{target("avxvnniint16")}, x86 @item avxvnniint16 @itemx no-avxvnniint16 Enable/disable the generation of the AVXVNNIINT16 instructions. -@cindex @code{target("sm3")} function attribute, x86 +@atindex @code{target("sm3")}, x86 @item sm3 @itemx no-sm3 Enable/disable the generation of the SM3 instructions. -@cindex @code{target("sha512")} function attribute, x86 +@atindex @code{target("sha512")}, x86 @item sha512 @itemx no-sha512 Enable/disable the generation of the SHA512 instructions. -@cindex @code{target("sm4")} function attribute, x86 +@atindex @code{target("sm4")}, x86 @item sm4 @itemx no-sm4 Enable/disable the generation of the SM4 instructions. -@cindex @code{target("usermsr")} function attribute, x86 +@atindex @code{target("usermsr")}, x86 @item usermsr @itemx no-usermsr Enable/disable the generation of the USER_MSR instructions. -@cindex @code{target("apxf")} function attribute, x86 +@atindex @code{target("apxf")}, x86 @item apxf @itemx no-apxf Enable/disable the generation of the APX features, including EGPR, PUSH2POP2, NDD and PPX. -@cindex @code{target("avx10.1")} function attribute, x86 +@atindex @code{target("avx10.1")}, x86 @item avx10.1 @itemx no-avx10.1 Enable/Disable the generation of the AVX10.1 instructions. -@cindex @code{target("avx10.2")} function attribute, x86 +@atindex @code{target("avx10.2")}, x86 @item avx10.2 @itemx no-avx10.2 Enable/Disable the generation of the AVX10.2 instructions. -@cindex @code{target("amx-avx512")} function attribute, x86 +@atindex @code{target("amx-avx512")}, x86 @item amx-avx512 @itemx no-amx-avx512 Enable/disable the generation of the AMX-AVX512 instructions. -@cindex @code{target("amx-tf32")} function attribute, x86 +@atindex @code{target("amx-tf32")}, x86 @item amx-tf32 @itemx no-amx-tf32 Enable/disable the generation of the AMX-TF32 instructions. -@cindex @code{target("amx-fp8")} function attribute, x86 +@atindex @code{target("amx-fp8")}, x86 @item amx-fp8 @itemx no-amx-fp8 Enable/disable the generation of the AMX-FP8 instructions. -@cindex @code{target("movrs")} function attribute, x86 +@atindex @code{target("movrs")}, x86 @item movrs @itemx no-movrs Enable/disable the generation of the MOVRS instructions. -@cindex @code{target("amx-movrs")} function attribute, x86 +@atindex @code{target("amx-movrs")}, x86 @item amx-movrs @itemx no-amx-movrs Enable/disable the generation of the AMX-MOVRS instructions. -@cindex @code{target("cld")} function attribute, x86 +@atindex @code{target("cld")}, x86 @item cld @itemx no-cld Enable/disable the generation of the CLD before string moves. -@cindex @code{target("fancy-math-387")} function attribute, x86 +@atindex @code{target("fancy-math-387")}, x86 @item fancy-math-387 @itemx no-fancy-math-387 Enable/disable the generation of the @code{sin}, @code{cos}, and @code{sqrt} instructions on the 387 floating-point unit. -@cindex @code{target("ieee-fp")} function attribute, x86 +@atindex @code{target("ieee-fp")}, x86 @item ieee-fp @itemx no-ieee-fp Enable/disable the generation of floating point that depends on IEEE arithmetic. -@cindex @code{target("inline-all-stringops")} function attribute, x86 +@atindex @code{target("inline-all-stringops")}, x86 @item inline-all-stringops @itemx no-inline-all-stringops Enable/disable inlining of string operations. -@cindex @code{target("inline-stringops-dynamically")} function attribute, x86 +@atindex @code{target("inline-stringops-dynamically")}, x86 @item inline-stringops-dynamically @itemx no-inline-stringops-dynamically Enable/disable the generation of the inline code to do small string operations and calling the library routines for large operations. -@cindex @code{target("align-stringops")} function attribute, x86 +@atindex @code{target("align-stringops")}, x86 @item align-stringops @itemx no-align-stringops Do/do not align destination of inlined string operations. -@cindex @code{target("recip")} function attribute, x86 +@atindex @code{target("recip")}, x86 @item recip @itemx no-recip Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and RSQRTPS instructions followed an additional Newton-Raphson step instead of doing a floating-point division. -@cindex @code{target("80387")} function attribute, x86 +@atindex @code{target("80387")}, x86 @item 80387 @itemx no-80387 Generate code containing 80387 instructions for floating point. -@cindex @code{target("general-regs-only")} function attribute, x86 +@atindex @code{target("general-regs-only")}, x86 @item general-regs-only Generate code which uses only the general registers. -@cindex @code{target("arch=@var{ARCH}")} function attribute, x86 +@atindex @code{target("arch=@var{ARCH}")}, x86 @item arch=@var{ARCH} Specify the architecture to generate code for in compiling the function. -@cindex @code{target("tune=@var{TUNE}")} function attribute, x86 +@atindex @code{target("tune=@var{TUNE}")}, x86 @item tune=@var{TUNE} Specify the architecture to tune for in compiling the function. -@cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86 +@atindex @code{target("fpmath=@var{FPMATH}")}, x86 @item fpmath=@var{FPMATH} Specify which floating-point unit to use. You must specify the @code{target("fpmath=sse,387")} option as @code{target("fpmath=sse+387")} because the comma would separate different options. -@cindex @code{prefer-vector-width} function attribute, x86 +@atindex @code{prefer-vector-width}, x86 @item prefer-vector-width=@var{OPT} On x86 targets, the @code{prefer-vector-width} attribute informs the compiler to use @var{OPT}-bit vector width in instructions @@ -9463,7 +9555,7 @@ a function with default @option{-march=x86-64} and of ISA features and marked with always_inline. @end table -@cindex @code{indirect_branch} function attribute, x86 +@atindex @code{indirect_branch}, x86 @item indirect_branch("@var{choice}") This attribute applies to functions. @@ -9475,7 +9567,7 @@ indirect call and jump to inlined call and return thunk. @samp{thunk-extern} converts indirect call and jump to external call and return thunk provided in a separate object file. -@cindex @code{function_return} function attribute, x86 +@atindex @code{function_return}, x86 @item function_return("@var{choice}") This attribute applies to functions. @@ -9486,7 +9578,7 @@ return thunk. @samp{thunk-inline} converts function return to inlined call and return thunk. @samp{thunk-extern} converts function return to external call and return thunk provided in a separate object file. -@cindex @code{nocf_check} function attribute +@atindex @code{nocf_check}, x86 @item nocf_check This attribute applies to functions and function types. @@ -9544,7 +9636,7 @@ foo (void) @} @end smallexample -@cindex @code{cf_check} function attribute, x86 +@atindex @code{cf_check}, x86 @item cf_check This attribute applies to functions. @@ -9552,7 +9644,7 @@ The @code{cf_check} attribute on a function is used to inform the compiler that ENDBR instruction should be placed at the function entry when @option{-fcf-protection=branch} is enabled. -@cindex @code{indirect_return} function attribute, x86 +@atindex @code{indirect_return}, x86 @item indirect_return This attribute applies to functions. @@ -9560,7 +9652,7 @@ The @code{indirect_return} attribute can be applied to a function, as well as variable or type of function pointer to inform the compiler that the function may return via indirect branch. -@cindex @code{fentry_name} function attribute, x86 +@atindex @code{fentry_name}, x86 @item fentry_name("@var{name}") This attribute applies to functions. @@ -9569,7 +9661,7 @@ call on function entry when function instrumentation is enabled with @option{-pg -mfentry}. When @var{name} is nop then a 5 byte nop sequence is generated. -@cindex @code{fentry_section} function attribute, x86 +@atindex @code{fentry_section}, x86 @item fentry_section("@var{name}") This attribute applies to functions. @@ -9577,7 +9669,7 @@ On x86 targets, the @code{fentry_section} attribute sets the name of the section to record function entry instrumentation calls in when enabled with @option{-pg -mrecord-mcount} -@cindex @code{nodirect_extern_access} attribute +@atindex @code{nodirect_extern_access}, x86 @opindex mno-direct-extern-access @item nodirect_extern_access This attribute applies to functions and variables. @@ -9585,8 +9677,8 @@ This attribute applies to functions and variables. This attribute, attached to a global variable or function, is the counterpart to option @option{-mno-direct-extern-access}. -@cindex @code{ms_struct} attribute, x86 -@cindex @code{gcc_struct} attribute, x86 +@atindex @code{ms_struct}, x86 +@atindex @code{gcc_struct}, x86 @item ms_struct @itemx gcc_struct These attributes can be applied to variables and struct types. @@ -9612,7 +9704,7 @@ see @ref{x86 Options}, for details of how structure layout is affected. These attributes are supported by the Xstormy16 back end: @table @code -@cindex @code{interrupt} function attribute, Xstormy16 +@atindex @code{interrupt}, Xstormy16 @item interrupt This attribute applies to functions. @@ -9621,7 +9713,7 @@ that the specified function is an interrupt handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. -@cindex @code{below100} variable attribute, Xstormy16 +@atindex @code{below100}, Xstormy16 @item below100 This attribute applies to variables. @@ -30872,7 +30964,7 @@ You must specify @option{-Wno-pmf-conversions} to use this extension. Some attributes only make sense for C++ programs. @table @code -@cindex @code{abi_tag} attribute +@atindex @code{abi_tag} @item abi_tag ("@var{tag}", ...) The @code{abi_tag} attribute can be applied to a function, variable, class declaration, or inline namespace. @@ -30916,7 +31008,7 @@ variable or function. @option{-Wabi-tag} also warns about this situation; you can avoid this warning by explicitly tagging the variable or function or moving it into a tagged inline namespace. -@cindex @code{init_priority} variable attribute +@atindex @code{init_priority} @item init_priority (@var{priority}) This attribute applies to namespace-scope variables. @@ -30946,7 +31038,7 @@ As with the @var{priority} argument to the @code{constructor} and @code{init_priority} attribute. In that case the attribute is rejected with an error rather than ignored. -@cindex @code{no_dangling} attribute +@atindex @code{no_dangling} @item no_dangling This attribute can be applied to a class type, function, or member @@ -30998,7 +31090,7 @@ decltype(auto) foo(T&& t) @{ @}; @end smallexample -@cindex @code{warn_unused} type attribute +@atindex @code{warn_unused} @item warn_unused This attribute applies to types. @@ -31016,9 +31108,8 @@ control a resource, such as @code{std::lock_guard}. This attribute is also accepted in C, but it is unnecessary because C does not have constructors or destructors. -@cindex @code{cold} type attribute -@item cold -@cindex @code{hot} type attribute +@atindex @code{cold} +@atindex @code{hot} @item cold @itemx hot In addition to functions and labels, GNU C++ allows the @code{cold} and diff --git a/gcc/doc/gcc.texi b/gcc/doc/gcc.texi index 2d0655512eb4..495f09bc9d3e 100644 --- a/gcc/doc/gcc.texi +++ b/gcc/doc/gcc.texi @@ -28,6 +28,8 @@ @c Create a separate index for command line options. @defcodeindex op +@c Likewise create a separate index for attributes. +@defindex at @c Merge the standard indexes into a single one. @syncodeindex fn cp @syncodeindex vr cp @@ -207,13 +209,14 @@ object files. @menu * Option Index:: Index to command line options. -* Concept and Symbol Index:: Index of concepts and symbols names. +* Attribute Index:: Index of GNU extension attributes. +* Concept and Symbol Index:: Index of concepts and symbol names. @end menu @node Option Index @appendixsec Option Index -GCC's command line options are indexed here without any initial +GCC's command-line options are indexed here without any initial @samp{-} or @samp{--}. Where an option has both positive and negative forms (such as @option{-f@var{option}} and @option{-fno-@var{option}}), relevant entries in the manual are @@ -222,6 +225,15 @@ look up both forms. @printindex op +@node Attribute Index +@appendixsec Attribute Index + +This index lists GNU extension attributes only, e.g. those that should +use the @samp{gnu::} namespace prefix in the standard C and C++ +attribute syntax. + +@printindex at + @node Concept and Symbol Index @appendixsec Concept and Symbol Index
