diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b6ccf374c96c4855de8605cdd0aba8da9fd44d95..f8642732f118912836c0075937959a5556fe1995 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-03  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+	PR middle-end/30174
+	* varasm.c (notice_global_symbol): Treat global objects as weak when
+	flag_shlib is true.
+
 2007-02-03  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* emit-rtl.c (dconstpi): Delete.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 48055cf65fd645fea77efe76e126cb94d4b386be..c2ae6e23f1c1a6ad912e4a843eca74056639063d 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1323,7 +1323,7 @@ notice_global_symbol (tree decl)
 
   /* We win when global object is found, but it is useful to know about weak
      symbol as well so we can produce nicer unique names.  */
-  if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl))
+  if (DECL_WEAK (decl) || DECL_ONE_ONLY (decl) || flag_shlib)
     type = &weak_global_object_name;
 
   if (!*type)