diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index fe9968615579d09b283dbcebe0304308033009b4..834966b3a08a504dea4fd41fbf5211838edc9702 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-12  Alexandre Oliva  <aoliva@cygnus.com>
+
+	* gcc_update (touch_files_reexec): New function, run after the
+	tree is modified.
+
 2000-05-08  Richard Hendeson  <rth@cygnus.com>
 
 	* gcc_update: Remove references to inclhack.tpl.
diff --git a/contrib/gcc_update b/contrib/gcc_update
index d8591fbb02b7b57af33336ac69af043a39445acd..a8d2ed7cc3260559b7fc2ef38e1445cc7f4df2ef 100755
--- a/contrib/gcc_update
+++ b/contrib/gcc_update
@@ -112,6 +112,13 @@ touch_files () {
     done
 }
 
+# Whenever we update the tree or install a patch, we may be modifying
+# this script.  By re-execing it, we ensure that the appropriate
+# dependencies and rules will be used.
+touch_files_reexec () {
+    echo "Adjusting file timestamps"
+    exec ${CONFIG_SHELL-/bin/sh} $0 --touch
+}    
 
 # This functions applies a patch to an existing tree.
 apply_patch () {
@@ -126,8 +133,7 @@ apply_patch () {
 	    cat $1 | patch -p1 ;;
 	esac
     fi
-    echo "Adjusting file timestamps"
-    touch_files
+    touch_files_reexec
 }
 
 # Check whether this indeed looks like a local tree.
@@ -197,5 +203,4 @@ if [ $? -ne 0 ]; then
     exit 1
 fi
 
-echo "Adjusting file timestamps"
-touch_files
+touch_files_reexec