* varasm.c (get_variable_section): Don't return lcomm_section
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Dec 2012 12:06:07 +0000 (12:06 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Dec 2012 12:06:07 +0000 (12:06 +0000)
for asan_protect_global decls.
* asan.c (asan_protect_global): Only avoid public common variables.
Don't call get_variable_section here.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194393 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 282e55f..4766eb2 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 87d08d5..45b0dbd 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 3c420c0..b6170e6 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;