diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 3b97faed79843a3ce2a9bb4827c41c35c40b34ea..3c22533657fc7007cef723d19308bb831c9df3fc 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,8 @@
+2002-03-27  Richard Henderson  <rth@redhat.com>
+
+	* os_dep.c (GC_init_linux_data_start): Fix references to
+	__data_start and _end.
+
 2002-03-25  Loren J. Rittle  <ljrittle@acm.org>
 
 	* include/private/gcconfig.h: Change all likely references
diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c
index 88194fe82db7d307a5fbc23e19ef8d74e8ac2dc5..258c9433f309437760236e4db8e2e8b8a6473fdd 100644
--- a/boehm-gc/os_dep.c
+++ b/boehm-gc/os_dep.c
@@ -155,11 +155,11 @@
 
 # ifdef LINUX
 #   pragma weak __data_start
-    extern int __data_start;
+    extern int __data_start[];
 #   pragma weak data_start
-    extern int data_start;
+    extern int data_start[];
 # endif /* LINUX */
-  extern int _end;
+  extern int _end[];
 
   ptr_t GC_data_start;
 
@@ -169,16 +169,16 @@
 
 #   ifdef LINUX
       /* Try the easy approaches first:	*/
-      if (&__data_start != 0) {
-	  GC_data_start = (ptr_t)(&__data_start);
+      if (__data_start != 0) {
+	  GC_data_start = (ptr_t)__data_start;
 	  return;
       }
-      if (&data_start != 0) {
-	  GC_data_start = (ptr_t)(&data_start);
+      if (data_start != 0) {
+	  GC_data_start = (ptr_t)data_start;
 	  return;
       }
 #   endif /* LINUX */
-    GC_data_start = GC_find_limit((ptr_t)(&_end), FALSE);
+    GC_data_start = GC_find_limit((ptr_t)_end, FALSE);
   }
 #endif