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.
Showing
- gcc/c-family/c-attribs.c 97 additions, 44 deletionsgcc/c-family/c-attribs.c
- gcc/doc/extend.texi 17 additions, 3 deletionsgcc/doc/extend.texi
- gcc/doc/sourcebuild.texi 3 additions, 0 deletionsgcc/doc/sourcebuild.texi
- gcc/testsuite/c-c++-common/torture/attr-noinit-1.c 7 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-noinit-1.c
- gcc/testsuite/c-c++-common/torture/attr-noinit-2.c 8 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-noinit-2.c
- gcc/testsuite/c-c++-common/torture/attr-noinit-3.c 11 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-noinit-3.c
- gcc/testsuite/c-c++-common/torture/attr-noinit-invalid.c 12 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-noinit-invalid.c
- gcc/testsuite/c-c++-common/torture/attr-noinit-main.inc 16 additions, 21 deletionsgcc/testsuite/c-c++-common/torture/attr-noinit-main.inc
- gcc/testsuite/c-c++-common/torture/attr-persistent-1.c 8 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-persistent-1.c
- gcc/testsuite/c-c++-common/torture/attr-persistent-2.c 8 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-persistent-2.c
- gcc/testsuite/c-c++-common/torture/attr-persistent-3.c 10 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-persistent-3.c
- gcc/testsuite/c-c++-common/torture/attr-persistent-invalid.c 11 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-persistent-invalid.c
- gcc/testsuite/c-c++-common/torture/attr-persistent-main.inc 58 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/attr-persistent-main.inc
- gcc/testsuite/lib/target-supports.exp 12 additions, 0 deletionsgcc/testsuite/lib/target-supports.exp
- gcc/tree.h 7 additions, 0 deletionsgcc/tree.h
- gcc/varasm.c 18 additions, 1 deletiongcc/varasm.c
Loading
Please register or sign in to comment