diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 2fd93bb39dca60c792ad40e3543ba91104d4eddc..6b55358fed2d9456066ebcf09f763dddd2fddeae 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,10 @@
+1999-12-19  Anthony Green  <green@cygnus.com>
+
+	* gcconfig.h: Use libgcj hack for Alpha Linux.  
+	Undefine MPROTEXT_VDB (from Jeff Sturm).
+	* os_dep.c: Remove Alpha Linux hacks.
+	* misc.c: Ditto.
+
 1999-12-13  Tom Tromey  <tromey@cygnus.com>
 
 	* aclocal.m4, configure: Rebuilt.
diff --git a/boehm-gc/gcconfig.h b/boehm-gc/gcconfig.h
index 22156918c360d57a401bed64a4678fa0aa687ead..c5c2b88ac7365d1550229d67d200fa0780a56e05 100644
--- a/boehm-gc/gcconfig.h
+++ b/boehm-gc/gcconfig.h
@@ -988,19 +988,17 @@
 #       define CPP_WORDSZ 64
 #       define STACKBOTTOM ((ptr_t) 0x120000000)
 #       ifdef __ELF__
-#   	  if 0
-	    /* __data_start apparently disappeared in some recent releases. */
-            extern int __data_start;
-#           define DATASTART &__data_start
-#	  endif
-#         define DATASTART GC_data_start
-#         define DYNAMIC_LOADING
+            /* glibc for Linux/Alpha no longer provides a symbol marking
+               the start of the data segment.  So libgcj defines
+               data_start on its own (in libgcjdata.a).  */
+            extern int data_start;
+#           define DYNAMIC_LOADING
 #       else
 #           define DATASTART ((ptr_t) 0x140000000)
 #       endif
 	extern int _end;
 #	define DATAEND (&_end)
-#	define MPROTECT_VDB
+#	undef MPROTECT_VDB
 		/* Has only been superficially tested.  May not	*/
 		/* work on all versions.			*/
 #   endif
diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c
index 9f209100a591a0b52eef4a768a0d44cb3cf06383..8c0d0147bf6fc845275e2833ab2c79795c87db0d 100644
--- a/boehm-gc/misc.c
+++ b/boehm-gc/misc.c
@@ -443,8 +443,7 @@ void GC_init_inner()
 #   ifdef MSWIN32
  	GC_init_win32();
 #   endif
-#   if defined(LINUX) && \
-	(defined(ALPHA) || defined(SPARC) || defined(IA64))
+#   if defined(LINUX) && (defined(SPARC) || defined(IA64))
 	GC_init_linux_data_start();
 #   endif
 #   ifdef SOLARIS_THREADS
diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c
index 362bd933822a73ec9f4a68b07b72137f50a97f41..5bc41f1ddf65a00653f0a4c0cd22dc0c28047d9b 100644
--- a/boehm-gc/os_dep.c
+++ b/boehm-gc/os_dep.c
@@ -75,7 +75,7 @@
 # endif
 
 # if defined(LINUX) && \
-     (defined(SPARC) || defined(ALPHA) || defined(IA64))
+     (defined(SPARC) || defined(IA64))
 #   define NEED_FIND_LIMIT
 # endif
 
@@ -142,7 +142,7 @@
 # define OPT_PROT_EXEC 0
 #endif
 
-#if defined(LINUX) && (defined(SPARC) || defined(ALPHA) || defined(IA64))
+#if defined(LINUX) && (defined(SPARC) || defined(IA64))
   /* The I386 case can be handled without a search.  The Alpha case	*/
   /* used to be handled differently as well, but the rules changed	*/
   /* for recent Linux versions.  This seems to be the easiest way to	*/