]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
varasm.c (get_variable_section): Don't return lcomm_section for asan_protect_global...
authorJakub Jelinek <jakub@redhat.com>
Tue, 11 Dec 2012 12:06:07 +0000 (13:06 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 11 Dec 2012 12:06:07 +0000 (13:06 +0100)
* varasm.c (get_variable_section): Don't return lcomm_section
for asan_protect_global decls.
* asan.c (asan_protect_global): Only avoid public common variables.
Don't call get_variable_section here.

From-SVN: r194393

gcc/ChangeLog
gcc/asan.c
gcc/varasm.c

index 282e55f9c4a66b9a20253471a129ec902cc16c31..4766eb2aba9de3637d0cc4bf6aab28a512111cb1 100644 (file)
@@ -1,5 +1,10 @@
 2012-12-11  Jakub Jelinek  <jakub@redhat.com>
 
+       * varasm.c (get_variable_section): Don't return lcomm_section
+       for asan_protect_global decls.
+       * asan.c (asan_protect_global): Only avoid public common variables.
+       Don't call get_variable_section here.
+
        PR middle-end/43631
        PR bootstrap/55615
        * var-tracking.c (emit_note_insn_var_location): If insn is followed
index 87d08d5490192629f1a98ca09a1421a8e7134120..45b0dbd2392a2e3014bbb6900c09ae7f27b75504 100644 (file)
@@ -447,7 +447,6 @@ bool
 asan_protect_global (tree decl)
 {
   rtx rtl, symbol;
-  section *sect;
 
   if (TREE_CODE (decl) == STRING_CST)
     {
@@ -471,7 +470,7 @@ asan_protect_global (tree decl)
         padding or not.  */
       || DECL_ONE_ONLY (decl)
       /* Similarly for common vars.  People can use -fno-common.  */
-      || DECL_COMMON (decl)
+      || (DECL_COMMON (decl) && TREE_PUBLIC (decl))
       /* Don't protect if using user section, often vars placed
         into user section from multiple TUs are then assumed
         to be an array of such vars, putting padding in there
@@ -493,10 +492,6 @@ asan_protect_global (tree decl)
       || TREE_CONSTANT_POOL_ADDRESS_P (symbol))
     return false;
 
-  sect = get_variable_section (decl, false);
-  if (sect->common.flags & SECTION_COMMON)
-    return false;
-
   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
     return false;
 
index 3c420c013d8a0c450081180f04fec7e8b532b1f8..b6170e6d8d2ba03d2f1ff564a49d384cb75d55ed 100644 (file)
@@ -1034,7 +1034,8 @@ get_variable_section (tree decl, bool prefer_noswitch_p)
       && !(prefer_noswitch_p && targetm.have_switchable_bss_sections)
       && bss_initializer_p (decl))
     {
-      if (!TREE_PUBLIC (decl))
+      if (!TREE_PUBLIC (decl)
+         && !(flag_asan && asan_protect_global (decl)))
        return lcomm_section;
       if (bss_noswitch_section)
        return bss_noswitch_section;