--- ./gcc/varasm.c.orig
+++ ./gcc/varasm.c
@@ -6758,6 +6758,10 @@
   /* Static variables are always local.  */
   else if (! TREE_PUBLIC (exp))
     local_p = true;
+  /* Weak data can be overridden by a strong symbol
+     in another module and so are not local.  */
+  else if (DECL_WEAK (exp))
+    local_p = false;
   /* A variable is local if the user has said explicitly that it will
      be.  */
   else if ((DECL_VISIBILITY_SPECIFIED (exp)
@@ -6771,11 +6775,6 @@
      local.  */
   else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
     local_p = true;
-  /* Default visibility weak data can be overridden by a strong symbol
-     in another module and so are not local.  */
-  else if (DECL_WEAK (exp)
-	   && !resolved_locally)
-    local_p = false;
   /* If PIC, then assume that any global name can be overridden by
      symbols resolved from other modules.  */
   else if (shlib)
