diff options
author | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2020-11-23 12:06:39 +0000 |
---|---|---|
committer | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2020-11-23 12:15:51 +0000 |
commit | 762ca20364a590be2cb9c79c0101ccbff74b5de1 (patch) | |
tree | b865ba9ae2ac517d369987c8329cd9623cb31478 /gcc/doc/extend.texi | |
parent | fb8309d4abdcd4c8de07bd4c42e22d1e80471765 (diff) | |
download | gcc-762ca20364a590be2cb9c79c0101ccbff74b5de1.zip gcc-762ca20364a590be2cb9c79c0101ccbff74b5de1.tar.gz gcc-762ca20364a590be2cb9c79c0101ccbff74b5de1.tar.bz2 |
Implement the "persistent" attribute
The "persistent" attribute is used for variables that are initialized
by the program loader, but are not initialized by the runtime startup
code. "persistent" variables are placed in a non-volatile area of
memory, which allows their value to "persist" between processor resets.
gcc/c-family/ChangeLog:
* c-attribs.c (handle_special_var_sec_attribute): New.
(handle_noinit_attribute): Remove.
(attr_noinit_exclusions): Rename to...
(attr_section_exclusions): ...this, and add "persistent" attribute
exclusion.
(c_common_attribute_table): Add "persistent" attribute.
gcc/ChangeLog:
* doc/extend.texi (Common Variable Attributes): Document the
"persistent" variable attribute.
* doc/sourcebuild.texi (Effective-Target Keywords): Document
the "persistent" effective target keyword.
* tree.h (DECL_PERSISTENT_P): Define.
* varasm.c (bss_initializer_p): Return false for a
DECL_PERSISTENT_P decl initialized to zero.
(default_section_type_flags): Handle the ".persistent" section.
(default_elf_select_section): Likewise.
(default_unique_section): Likewise.
gcc/testsuite/ChangeLog:
* gcc.c-torture/execute/noinit-attribute.c: Moved to...
* c-c++-common/torture/attr-noinit-main.inc: ...here.
* lib/target-supports.exp (check_effective_target_persistent): New.
* c-c++-common/torture/attr-noinit-1.c: New test.
* c-c++-common/torture/attr-noinit-2.c: New test.
* c-c++-common/torture/attr-noinit-3.c: New test.
* c-c++-common/torture/attr-noinit-invalid.c: New test.
* c-c++-common/torture/attr-persistent-1.c: New test.
* c-c++-common/torture/attr-persistent-2.c: New test.
* c-c++-common/torture/attr-persistent-3.c: New test.
* c-c++-common/torture/attr-persistent-invalid.c: New test.
* c-c++-common/torture/attr-persistent-main.inc: New test.
Diffstat (limited to 'gcc/doc/extend.texi')
-rw-r--r-- | gcc/doc/extend.texi | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index f026942..6018347 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -7426,9 +7426,23 @@ The @code{weak} attribute is described in @cindex @code{noinit} variable attribute Any data with the @code{noinit} attribute will not be initialized by the C runtime startup code, or the program loader. Not initializing -data in this way can reduce program startup times. This attribute is -specific to ELF targets and relies on the linker to place such data in -the right location +data in this way can reduce program startup times. + +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. + +@item persistent +@cindex @code{persistent} variable attribute +Any data with the @code{persistent} attribute will not be initialized by +the C runtime startup code, but will be initialized by the program +loader. This enables the value of the variable to @samp{persist} +between processor resets. + +This attribute is specific to ELF targets and relies on the linker +script to place the sections with the @code{.persistent} prefix in the +right location. Specifically, some type of non-volatile, writeable +memory is required. @item objc_nullability (@var{nullability kind}) @r{(Objective-C and Objective-C++ only)} @cindex @code{objc_nullability} variable attribute |