re PR middle-end/84237 (xen build faiulre only zero initializers are allowed in secti...
authorJakub Jelinek <jakub@redhat.com>
Fri, 9 Feb 2018 05:47:24 +0000 (06:47 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 9 Feb 2018 05:47:24 +0000 (06:47 +0100)
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

gcc/ChangeLog
gcc/output.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr84237.c [new file with mode: 0644]
gcc/varasm.c

index d9c544387fc4d0b3ea30f2f2f6359a7e1bf3c2f5..cacb10e9a8427c4c2cd632f99dd9de0caf6ef60f 100644 (file)
@@ -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>
 
index 51ac149b81127dd9eac46015163baa25aefe9512..f708cc75fa7c23778ef7b01c8cbe93694fcd5952 100644 (file)
@@ -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);
index 49a2275c73293d95e786859795979018d087cdf7..0177e2b4270cd0603fd0ed39618318324d10a7cb 100644 (file)
@@ -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 (file)
index 0000000..5a2697f
--- /dev/null
@@ -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];
index b045efaabf5d0f622bdf30bbc3afed9bf92239f0..6e345d39d31ff48e2080ac62707640bc94c1253e 100644 (file)
@@ -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",