diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-02-09 06:47:24 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-02-09 06:47:24 +0100 |
commit | ebd06e5ca705e69711eb58277b6f820132bb7b67 (patch) | |
tree | 4b0528d68555212c7996fffdc4ae21b6d20e1c9a /gcc | |
parent | ebe4bf41d2b96a6b2f1de6a184eb0a7f5c2e5d00 (diff) | |
download | gcc-ebd06e5ca705e69711eb58277b6f820132bb7b67.zip gcc-ebd06e5ca705e69711eb58277b6f820132bb7b67.tar.gz gcc-ebd06e5ca705e69711eb58277b6f820132bb7b67.tar.bz2 |
re PR middle-end/84237 (xen build faiulre only zero initializers are allowed in section '.bss.page_aligned.const')
PR middle-end/84237
* output.h (bss_initializer_p): Add NAMED argument, defaulted to false.
* varasm.c (bss_initializer_p): Add NAMED argument, if true, ignore
TREE_READONLY bit.
(get_variable_section): For decls in named .bss* sections pass true as
second argument to bss_initializer_p.
* gcc.dg/pr84237.c: New test.
From-SVN: r257513
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/output.h | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr84237.c | 5 | ||||
-rw-r--r-- | gcc/varasm.c | 9 |
5 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9c5443..cacb10e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-02-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/84237 + * output.h (bss_initializer_p): Add NAMED argument, defaulted to false. + * varasm.c (bss_initializer_p): Add NAMED argument, if true, ignore + TREE_READONLY bit. + (get_variable_section): For decls in named .bss* sections pass true as + second argument to bss_initializer_p. + 2018-02-09 Marek Polacek <polacek@redhat.com> Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/output.h b/gcc/output.h index 51ac149..f708cc7 100644 --- a/gcc/output.h +++ b/gcc/output.h @@ -552,7 +552,7 @@ extern void output_file_directive (FILE *, const char *); extern unsigned int default_section_type_flags (tree, const char *, int); extern bool have_global_bss_p (void); -extern bool bss_initializer_p (const_tree); +extern bool bss_initializer_p (const_tree, bool = false); extern void default_no_named_section (const char *, unsigned int, tree); extern void default_elf_asm_named_section (const char *, unsigned int, tree); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 49a2275..0177e2b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-02-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/84237 + * gcc.dg/pr84237.c: New test. + 2018-02-09 Marek Polacek <polacek@redhat.com> Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/testsuite/gcc.dg/pr84237.c b/gcc/testsuite/gcc.dg/pr84237.c new file mode 100644 index 0000000..5a2697f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84237.c @@ -0,0 +1,5 @@ +/* PR middle-end/84237 */ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "" } */ + +const char __attribute__((__section__(".bss.page_aligned.const"), __aligned__(4096))) zero_page[4096]; diff --git a/gcc/varasm.c b/gcc/varasm.c index b045efa..6e345d3 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -983,11 +983,11 @@ decode_reg_name (const char *name) /* Return true if DECL's initializer is suitable for a BSS section. */ bool -bss_initializer_p (const_tree decl) +bss_initializer_p (const_tree decl, bool named) { /* Do not put non-common constants into the .bss section, they belong in - a readonly section. */ - return ((!TREE_READONLY (decl) || DECL_COMMON (decl)) + a readonly section, except when NAMED is true. */ + return ((!TREE_READONLY (decl) || DECL_COMMON (decl) || named) && (DECL_INITIAL (decl) == NULL /* In LTO we have no errors in program; error_mark_node is used to mark offlined constructors. */ @@ -1165,7 +1165,8 @@ get_variable_section (tree decl, bool prefer_noswitch_p) { section *sect = get_named_section (decl, NULL, reloc); - if ((sect->common.flags & SECTION_BSS) && !bss_initializer_p (decl)) + if ((sect->common.flags & SECTION_BSS) + && !bss_initializer_p (decl, true)) { error_at (DECL_SOURCE_LOCATION (decl), "only zero initializers are allowed in section %qs", |