summary refs log tree commit diff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-05-12 16:38:08 +0000
committerRoland McGrath <roland@gnu.org>1996-05-12 16:38:08 +0000
commitaa1075ea2f140dc7b2eec04199935b47111229db (patch)
tree30f0fe1cd77a1e4bcd999dff97eb61e4fc11166b
parentd617ac4ee5563f36c6046729b324f78562b0f1e7 (diff)
downloadglibc-aa1075ea2f140dc7b2eec04199935b47111229db.tar.gz
glibc-aa1075ea2f140dc7b2eec04199935b47111229db.tar.xz
glibc-aa1075ea2f140dc7b2eec04199935b47111229db.zip
Sun May 12 11:16:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
	* mach/Machrules (%.udeps rule): Write deps for %_server.[ch] too.
	(%_server.[ch] rule): Don't depend on %.defs; use #include to get
	installed .defs file.

	* stdio-common/vfprintf.c (flockfile, funlockfile): Define to
	nothing for stdio.  Fix fUNlockfile -> funlockfile for libio.
	* stdio-common/vfscanf.c: Likewise.

Sat May 11 13:43:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* hurd/hurdfault.c: Include faultexc_server.h instead of faultexc.h.

	* mach/Machrules (%.ir rule): Don't produce deps for imports.

	* elf/dl-fini.c (_dl_fini): Clear L->l_init_called after calling fn.

	* Makerules (install): Depend on $(slibdir)/libc.so$(libc.so-version).
	[!subdir] ($(libdir)/libc.so, $(common-objpfx)/libc-syms.so): Protect
	these targets and install dep on $(libdir)/libc.so with this.

	* hurd/Makefile: Removed all rules and defns for using code from Hurd
	sources and installing headers from there.

	* sysdeps/mach/hurd/errnos.awk: Set in_mach_errors to FILENAME when we
 	set it.  In Mach error matching clause, only match if FILENAME is
 	still the same value.

	* sysdeps/mach/hurd/Makefile: Don't include sysdeps/mach/Makefile;
	$(mach-srcdir) no longer exists.
	(hurd-srcdir): Variable removed.
	(includes): Don't append -I$(hurd-srcdir).
	(last-includes): Variable removed.
	Remove vpath specs using $(hurd-srcdir).
	(mach-errno-h): New canned sequence.
	($(common-objpfx)errnos.d): New target, generated included makefile
	to determine absolute file names of Mach headers to search for error
	codes and set variable mach-errnos-deps.
	($(common-objpfx)stamp-errnos): Depend on $(mach-errnos-deps) instead
	of prior explicit list.
	(generated): Add errnos.d, stamp-errnos.

	* mach/Machrules (some-if-rtn): New variable and target; compute deps
	of some if routine and make all if routines depend on that .d file
	instead of static list of .h files.

	* mach/Makefile (mach/mach_interface.defs,
	mach/memory_object_user.defs): Targets removed.
	($(objpfx)mach-syscalls.mk): Tweak this kludge so it doesn't depend
	directly on Mach sources.

	* sysdeps/mach/Makefile (mach-srcdir): Variable removed.
	(includes): Don't append -I$(mach-srcdir).
	Remove vpath specs using $(mach-srcdir).

	* hurd/Makefile (server-interfaces): Add faultexc.
	(sig): Remove it from here.
	(fault%.[ch]): Rule removed.
	(MIGFLAGS-faultexc): New variable.

	* hurd/faultexc.defs: New file.

	* mach/Machrules (%.ustamp rule): Pass $(MIGFLAGS-$*) to mig.
	(%_server.[ch] rule): Likewise.

	* mach/Makefile: Removed all rules and defns for using code from Mach
	sources and installing headers from there.

	* Makeconfig [$(build-shared)=yes] (link-libc): Append
	$(libc.so-version) to libc.so.

	* mach/Machrules (%.ustamp rule): Don't depend on %.defs.
	(%.udeps): New rule parallel to that one, generating included
	makefiles with -M output from `#include <%.defs>'.

	* Makerules (sed-remove-objpfx): Remove space before \ at eol.
-rw-r--r--ChangeLog78
-rw-r--r--Makeconfig6
-rw-r--r--Makerules5
-rw-r--r--elf/dl-fini.c8
-rw-r--r--hurd/Makefile36
-rw-r--r--hurd/faultexc.defs5
-rw-r--r--hurd/hurdfault.c2
-rw-r--r--mach/Machrules53
-rw-r--r--mach/Makefile68
-rw-r--r--posix/regex.c6
-rw-r--r--stdio-common/vfprintf.c10
-rw-r--r--stdio-common/vfscanf.c9
-rw-r--r--sysdeps/mach/Makefile29
-rw-r--r--sysdeps/mach/hurd/Makefile71
-rw-r--r--sysdeps/mach/hurd/errnos.awk12
15 files changed, 187 insertions, 211 deletions
diff --git a/ChangeLog b/ChangeLog
index ed83e1058c..8a9c09d2bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,83 @@
+Sun May 12 11:16:58 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+	* mach/Machrules (%.udeps rule): Write deps for %_server.[ch] too.
+	(%_server.[ch] rule): Don't depend on %.defs; use #include to get
+	installed .defs file.
+
+	* stdio-common/vfprintf.c (flockfile, funlockfile): Define to
+	nothing for stdio.  Fix fUNlockfile -> funlockfile for libio.
+	* stdio-common/vfscanf.c: Likewise.
+
+Sat May 11 13:43:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+	* hurd/hurdfault.c: Include faultexc_server.h instead of faultexc.h.
+
+	* mach/Machrules (%.ir rule): Don't produce deps for imports.
+
+	* elf/dl-fini.c (_dl_fini): Clear L->l_init_called after calling fn.
+
+	* Makerules (install): Depend on $(slibdir)/libc.so$(libc.so-version).
+	[!subdir] ($(libdir)/libc.so, $(common-objpfx)/libc-syms.so): Protect
+	these targets and install dep on $(libdir)/libc.so with this.
+
+	* hurd/Makefile: Removed all rules and defns for using code from Hurd
+	sources and installing headers from there.
+
+	* sysdeps/mach/hurd/errnos.awk: Set in_mach_errors to FILENAME when we
+ 	set it.  In Mach error matching clause, only match if FILENAME is
+ 	still the same value.
+
+	* sysdeps/mach/hurd/Makefile: Don't include sysdeps/mach/Makefile;
+	$(mach-srcdir) no longer exists.
+	(hurd-srcdir): Variable removed.
+	(includes): Don't append -I$(hurd-srcdir).
+	(last-includes): Variable removed.
+	Remove vpath specs using $(hurd-srcdir).
+	(mach-errno-h): New canned sequence.
+	($(common-objpfx)errnos.d): New target, generated included makefile
+	to determine absolute file names of Mach headers to search for error
+	codes and set variable mach-errnos-deps.
+	($(common-objpfx)stamp-errnos): Depend on $(mach-errnos-deps) instead
+	of prior explicit list.
+	(generated): Add errnos.d, stamp-errnos.
+
+	* mach/Machrules (some-if-rtn): New variable and target; compute deps
+	of some if routine and make all if routines depend on that .d file
+	instead of static list of .h files.
+
+	* mach/Makefile (mach/mach_interface.defs,
+	mach/memory_object_user.defs): Targets removed.
+	($(objpfx)mach-syscalls.mk): Tweak this kludge so it doesn't depend
+	directly on Mach sources.
+
+	* sysdeps/mach/Makefile (mach-srcdir): Variable removed.
+	(includes): Don't append -I$(mach-srcdir).
+	Remove vpath specs using $(mach-srcdir).
+
+	* hurd/Makefile (server-interfaces): Add faultexc.
+	(sig): Remove it from here.
+	(fault%.[ch]): Rule removed.
+	(MIGFLAGS-faultexc): New variable.
+
+	* hurd/faultexc.defs: New file.
+
+	* mach/Machrules (%.ustamp rule): Pass $(MIGFLAGS-$*) to mig.
+	(%_server.[ch] rule): Likewise.
+
+	* mach/Makefile: Removed all rules and defns for using code from Mach
+	sources and installing headers from there.
+
+	* Makeconfig [$(build-shared)=yes] (link-libc): Append
+	$(libc.so-version) to libc.so.
+
 Fri May 10 18:36:14 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
 
+	* mach/Machrules (%.ustamp rule): Don't depend on %.defs.
+	(%.udeps): New rule parallel to that one, generating included
+	makefiles with -M output from `#include <%.defs>'.
+
+	* Makerules (sed-remove-objpfx): Remove space before \ at eol.
+
 	* Makefile (distribute): Add FAQ.
 	* FAQ: New file contributed by drepper.
 
diff --git a/Makeconfig b/Makeconfig
index ba0c940fbb..41f5839afc 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -291,8 +291,12 @@ endif
 endif
 ifndef link-libc
 ifeq (yes,$(build-shared))
+# We need the versioned name of libc.so in the deps of $(others) et al
+# so that the symlink to libc.so is created before anything tries to
+# run the linked programs.
 link-libc = -Wl,-rpath-link=$(common-objdir) \
-	    $(common-objpfx)libc.so $(common-objpfx)libc.a $(gnulib)
+	    $(common-objpfx)libc.so$(libc.so-version) \
+	    $(common-objpfx)libc.a $(gnulib)
 # Choose the default search path for the dynamic linker based on
 # where we will install libraries.
 ifneq ($(libdir),$(slibdir))
diff --git a/Makerules b/Makerules
index 1c11fb930b..66a5f28281 100644
--- a/Makerules
+++ b/Makerules
@@ -281,7 +281,7 @@ $(sed-remove-objpfx) > $(@:.d=.T)
 mv -f $(@:.d=.T) $@
 endef
 ifneq (,$(objpfx))
-sed-remove-objpfx = -e 's@ $(subst .,\., \
+sed-remove-objpfx = -e 's@ $(subst .,\.,\
 				     $(subst @,\@,$(objpfx)))@ $$(objpfx)@g' \
 		    -e 's@^$(subst .,\.,$(subst @,\@,$(objpfx)))@$$(objpfx)@g'
 endif
@@ -569,7 +569,9 @@ ifdef libc.so-version
 $(slibdir)/libc.so$(libc.so-version): $(slibdir)/libc-$(version).so
 	$(make-link)
 $(slibdir)/libc-$(version).so: $(common-objpfx)libc.so; $(do-install-program)
+install: $(slibdir)/libc.so$(libc.so-version)
 
+ifndef subdir
 # What we install as libc.so for programs to link against is in fact an
 # archive.  It contains the various $(static-only-routines) objects, and
 # the special object libc-syms.so that contains just the dynamic symbol
@@ -586,6 +588,7 @@ $(common-objpfx)libc-syms.so: $(common-objpfx)libc.so
 ifndef subdir
 generated += libc-syms.so
 endif
+endif
 
 else
 install: $(slibdir)/libc.so
diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index 69ff83d488..36b4390663 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -1,5 +1,5 @@
 /* Call the termination functions of loaded shared objects.
-Copyright (C) 1995 Free Software Foundation, Inc.
+Copyright (C) 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -26,5 +26,9 @@ _dl_fini (void)
 
   for (l = _dl_loaded; l; l = l->l_next)
     if (l->l_init_called && l->l_info[DT_FINI])
-      (*(void (*) (void)) (l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr)) ();
+      {
+	(*(void (*) (void)) (l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr)) ();
+	/* Make sure nothing happens if we are called twice.  */
+	l->l_init_called = 0;
+      }
 }
diff --git a/hurd/Makefile b/hurd/Makefile
index 3a9d08e4a4..90d4b43359 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -38,7 +38,7 @@ user-interfaces		:= $(addprefix hurd/,\
 				       msg msg_reply msg_request \
 				       exec exec_startup crash interrupt \
 				       fs fsys io term tioctl socket ifsock)
-server-interfaces	:= hurd/msg
+server-interfaces	:= hurd/msg faultexc
 
 routines = hurdstartup hurdinit \
 	   hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \
@@ -53,7 +53,7 @@ routines = hurdstartup hurdinit \
  	   vpprintf \
 	   ports-get ports-set hurdports hurdmsg \
 	   $(sig) $(dtable) hurdinline port-cleanup report-wait
-sig	= hurdsig hurdfault faultexc siginfo hurd-raise preempt-sig \
+sig	= hurdsig hurdfault siginfo hurd-raise preempt-sig \
 	  trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \
 	  thread-self thread-cancel intr-msg catch-signal
 dtable	= dtable port2fd new-fd alloc-fd intern-fd \
@@ -64,28 +64,6 @@ dtable	= dtable port2fd new-fd alloc-fd intern-fd \
 routines += hurdmalloc
 distribute += hurdmalloc.h
 
-# Get the proper definition of `hurd-srcdir'.
-include ../sysdeps/mach/hurd/Makefile
-
-# Use and install the Hurd header files directly out of the Hurd source.
-
-# Find the MiG defs files in the Hurd source.
-vpath %.defs $(hurd-srcdir)
-
-# Install all .h and .defs files we find in the Hurd's hurd/ directory.
-hurd-headers := $(patsubst $(hurd-srcdir)/%,%,\
-			   $(wildcard $(addprefix $(hurd-srcdir)/hurd/,\
-						  *.defs *.h)))
-
-
-# Don't distribute the Hurd headers; they are in the Hurd distribution.
-dont_distribute = $(hurd-headers)
-
-# DO NOT try to remake these in any way!!!
-$(addprefix $(hurd-srcdir)/,$(hurd-headers)) : ;
-install-others += $(addprefix $(includedir)/,$(hurd-headers))
-$(includedir)/hurd/%: $(hurd-srcdir)/hurd/%; $(do-install)
-
 include ../mach/Machrules
 include ../Rules
 
@@ -94,13 +72,9 @@ include ../Rules
 # _hurd_intr_rpc_mach_msg.
 user-MIGFLAGS += -imacros intr-rpc.defs
 
-$(objpfx)fault%.c $(objpfx)fault%.h: $(mach-srcdir)/mach/%.defs
-	$(MIG) $(MIGFLAGS) -prefix _hurdsig_fault_ \
-	       -server $(@:.h=.c) -sheader $(@:.c=.h) \
-	       -user /dev/null -header /dev/null \
-	       $<
-generated += faultexc.c faultexc.h
+# The special exc server for sigthread faults uses a special prefix.
+MIGFLAGS-faultexc = -prefix _hurdsig_fault_
 
 # We need this static dependency to get faultexc.h generated the first time.
 $(objpfx)hurdfault.o $(objpfx)hurdfault.d: \
-	$(objpfx)faultexc.h $(objpfx)faultexc.c
+	$(objpfx)faultexc_server.h $(objpfx)faultexc_server.c
diff --git a/hurd/faultexc.defs b/hurd/faultexc.defs
new file mode 100644
index 0000000000..fe7f02a4cc
--- /dev/null
+++ b/hurd/faultexc.defs
@@ -0,0 +1,5 @@
+/* This file is processed by mig with -prefix _hurdsig_fault_
+   to create the special exception server used for signal thread
+   fault recovery.  */
+
+#include <mach/exc.defs>
diff --git a/hurd/hurdfault.c b/hurd/hurdfault.c
index a8fe8fb07f..e1b06a3f9f 100644
--- a/hurd/hurdfault.c
+++ b/hurd/hurdfault.c
@@ -25,7 +25,7 @@ Cambridge, MA 02139, USA.  */
 #include <setjmp.h>
 #include <stdio.h>
 #include "thread_state.h"
-#include "faultexc.h"		/* mig-generated header for our exc server.  */
+#include "faultexc_server.h"	/* mig-generated header for our exc server.  */
 #include <assert.h>
 
 jmp_buf _hurdsig_fault_env;
diff --git a/mach/Machrules b/mach/Machrules
index ef5809b86c..f7f6d2df63 100644
--- a/mach/Machrules
+++ b/mach/Machrules
@@ -81,19 +81,14 @@ endif
 # other useful pattern) causes the rule for `host_info' to also match
 # `xxx_host_info', and analogous lossage.
 #
-# While we're at it, we figure out the imports used by %.defs and give them
-# as dependencies of the object files for the generated RPC_*.c files.
-#
 # Depend on %.h just so they will be built from %.uh in the
 # makefile-rebuilding run which builds %.ir; otherwise, %.uh is built as an
 # intermediate in order to make %.ir and then removed before re-exec, when
 # %.uh is built all over again to build %.h.
 $(objpfx)%.ir: $(objpfx)%.uh $(objpfx)%.h
 	(awk "NF == 4 && (\$$2 == \"Routine\" || \$$2 == \"SimpleRoutine\")\
-	        { printf \"$*-calls += %s\\n\", \$$3 }	\
-	      /^#include/ { printf \"$*-imports += %s\\n\", \$$2 }" $<	;\
+	        { printf \"$*-calls += %s\\n\", \$$3 }" $<	;\
 	 echo '$$($*-calls:%=$$(objpfx)R\%C_%.c): $$(objpfx)$*.ustamp ;';\
-	 echo '$$($*-calls:%=$$(objpfx)RPC_%.o): $$($*-imports:<%>=%)'	;\
 	) > $@-new
 	mv $@-new $@
 vpath Machrules ../mach	# Find ourselves.
@@ -106,9 +101,12 @@ endef
 endif
 
 # Not an implicit rule so the stamps are never removed as intermediates!
-$(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp: %.defs
-	$(MIG) $< $(MIGFLAGS) $(user-MIGFLAGS) \
-	       -prefix __ -i $(objpfx)tmp_ \
+$(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp:
+	rm -f $@
+	echo '#include <$*.defs>' | \
+	$(MIG) - /dev/null -prefix __ \
+	       $(MIGFLAGS) $(user-MIGFLAGS) $(MIGFLAGS-$*) \
+	       -i $(objpfx)tmp_ \
 	       -server /dev/null -user /dev/null -header /dev/null
 	for call in $($*-calls); do \
 	  $(transform-user-stub) \
@@ -116,15 +114,24 @@ $(patsubst %,$(objpfx)%.ustamp,$(user-interfaces)): $(objpfx)%.ustamp: %.defs
 			    $(objpfx)RPC_$${call}.c; \
 	done
 	touch $@
+-include $(patsubst %,$(objpfx)%.udeps,$(user-interfaces))
+$(patsubst %,$(objpfx)%.udeps,$(user-interfaces)): $(objpfx)%.udeps:
+	echo '#include <$*.defs>' | \
+	$(CC) $(CPPFLAGS) -M -x c - | \
+	sed -e 's,- *:,$@ $(@:.udeps=.ustamp) \
+			  $(@:.udeps=_server.c) $(@:.udeps=_server.h):,' \
+	    $(sed-remove-objpfx) > $@.new
+	mv -f $@.new $@
 
 # Look for the server stub files where they will be written.
 vpath %_server.c $(addprefix $(objpfx),$(sort $(dir $(server-interfaces))))
 
 # Build the server stubs in $(objdir).
-$(objpfx)%_server.c $(objpfx)%_server.h: %.defs
-	$(MIG) $< $(MIGFLAGS) $(server-MIGFLAGS) \
-	       -prefix _S_ \
-	       -user /dev/null -header /dev/null \
+$(objpfx)%_server.c $(objpfx)%_server.h:
+	echo '#include <$*.defs>' | \
+	$(MIG) - /dev/null -prefix _S_ \
+	       $(MIGFLAGS) $(server-MIGFLAGS) $(MIGFLAGS-$*) \
+	       $< -user /dev/null -header /dev/null \
 	       -server $(@:.h=.c) -sheader $(@:.c=.h)
 
 # To get header files that declare both the straight and __ functions,
@@ -176,18 +183,14 @@ interface-headers: $(interface-headers)
 # dependencies ahead of time anyway because they're boilerplate.
 omit-deps += $(interface-routines)
 
-# Specify the static dependencies of the generated files.
-$(foreach o,$(object-suffixes),\
-$(foreach if,$(user-interfaces),$($(if)-calls:%=$(objpfx)RPC_%$o))): \
-    mach/boolean.h mach/kern_return.h mach/message.h mach/notify.h \
-    mach/mach_types.h mach/mig_errors.h mach/mig_support.h mach/msg_type.h \
-    $(..)libc-symbols.h $(objpfx)config.h
-$(foreach o,$(object-suffixes),\
-$(server-interfaces:%=$(objpfx)%$o)): \
-    mach/boolean.h mach/kern_return.h mach/message.h mach/mig_errors.h \
-    mach/mig_support.h mach/std_types.h
-# The MiG-generated sources also depend on the imports in their .defs files.
-# These dependencies are generated into the .ir files above.
+# Choose any single module generated by MiG.  We will compute this module's
+# dependencies and then assume all other MiG-generated modules depend on the
+# same headers.
+some-if-rtn := $(firstword $(interface-routines))
+ifdef some-if-rtn
+$(foreach o,$(object-suffixes),$(interfaces-routines:%=%$o)): $(some-if-rtn).d
+generated += $(some-if-rtn).d
+endif
 
 # If defined, $(interface-library) is `libNAME'.  It is to be a library
 # containing all the MiG-generated functions for the specified interfaces.
diff --git a/mach/Makefile b/mach/Makefile
index 747a6bfead..c4665c204c 100644
--- a/mach/Makefile
+++ b/mach/Makefile
@@ -57,57 +57,21 @@ distribute += Machrules syscalls.awk shortcut.awk \
 # Clear any environment	value.
 generated =
 
-# Get the proper definition of `mach-srcdir'.
-include ../sysdeps/mach/Makefile
-
-# Use and install the Mach header files directly out of the Mach kernel source.
-
-# Find the MiG defs files in the kernel source.
-vpath %.defs $(mach-srcdir)
-
-# Install all .h and .defs files we find in some of the kernel's source
-# directories and their subdirectories (in MK82, max one level deep).
-mach-src-headers := $(wildcard $(foreach dir,mach device mach_debug \
-					     $(base-machine),\
-					 $(addprefix $(mach-srcdir)/$(dir)/,\
-						     *.defs *.h \
-						     */*.defs */*.h)))
-# Exclude mach/machine/*.  A symlink will be installed for mach/machine.
-# Exclude $(headers) for Mach files we have our own versions of.
-mach-headers = $(filter-out mach/machine/% $(headers),\
-			    $(mach-src-headers:$(mach-srcdir)/%=%))
-# Rename Mach's sys/version.h to mach/version.h.
-mach-headers := $(patsubst sys/version.h,mach/version.h,$(mach-headers))
-
-# Don't distribute the Mach headers; they are in the Mach distribution.
-dont_distribute = $(mach-headers)
-
-# DO NOT try to remake these in any way!!!
-$(addprefix $(mach-srcdir)/,$(mach-headers)) : ;
-install-others += $(addprefix $(includedir)/,$(mach-headers))
-$(includedir)/%: $(mach-srcdir)/%; $(do-install)
-
-# Make symlinks for machine and mach/machine in the include directory.
-install-others += $(includedir)/mach/machine $(includedir)/machine
-$(includedir)/mach/machine $(includedir)/machine: $(common-objpfx)config.make
-	-rm -f $@
-	cd $(@D); ln -s $(base-machine) $(@F)
-
-# Install Mach's <sys/version.h> as <mach/version.h>.
-install-others += $(includedir)/mach/version.h
-$(includedir)/mach/version.h: $(mach-srcdir)/sys/version.h; $(do-install)
-
 # Define mach-syscalls and sysno-*.
 ifndef no_deps
 ifndef inhibit_mach_syscalls
 include $(objpfx)mach-syscalls.mk
 endif
 endif
-$(objpfx)mach-syscalls.mk: mach/syscall_sw.h syscalls.awk
+$(objpfx)mach-syscalls.mk: syscalls.awk Makefile
 # Go kludges!!!
-	sed -n -e '/Unix server implement them/,$$d' \
-	       -e 's/^kernel_trap(\(.*\),\([-0-9]*\),\([0-9]*\))$$/\1 \2 \3/p'\
-	< $< | awk -f $(word 2,$^) > $@-new
+	echo '#include <mach/syscall_sw.h>' | \
+	DEPENDENCIES_OUTPUT='$@-dep $@' \
+	$(CC) $(CPPFLAGS) -E -x c-header - \
+	      -D_MACH_`echo $(base-machine) | tr a-z A-Z`_SYSCALL_SW_H_=1 | \
+	sed -n -e 's/^kernel_trap(\(.*\),\([-0-9]*\),\([0-9]*\))$$/\1 \2 \3/p'\
+	| awk -f $< > $@-new
+	cat $@-dep >> $@-new; rm -f $@-dep
 	mv $@-new $@
 generated += mach-syscalls.mk
 
@@ -170,22 +134,6 @@ include Machrules
 include ../Rules
 
 
-# There is already a mach.h, so mach.defs generates mach_interface.h.
-$(objpfx)mach/mach_interface.defs: $(mach-srcdir)/mach/mach.defs
-	ln $< $@ || cp $< $@
-# There is already a memory_object.h,
-# so memory_object.defs generates memory_object_user.h.
-$(objpfx)mach/memory_object_user.defs: $(mach-srcdir)/mach/memory_object.defs
-	ln $< $@ || cp $< $@
-
-ifdef objdir
-vpath mach/mach_interface.defs $(objdir)
-vpath mach/memory_object_user.defs $(objdir)
-endif
-
-# Be sure not to make these with implicit rules from foo.defs.
-mach.h mach/memory_object.h: ;
-
 # A gcc bug prevents the generated file from working properly,
 # so we have one in the distribution for the time being.
 generated += errsystems.c
diff --git a/posix/regex.c b/posix/regex.c
index dc831cecd1..c127b01aa5 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -4508,9 +4508,9 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
 #endif
 
                 if ((re_opcode_t) p1[3] == exactn
-		    && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
-			  && (p2[1 + p1[4] / BYTEWIDTH]
-			      & (1 << (p1[4] % BYTEWIDTH)))))
+		    && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
+			  && (p2[2 + p1[5] / BYTEWIDTH]
+			      & (1 << (p1[5] % BYTEWIDTH)))))
                   {
   		    p[-3] = (unsigned char) pop_failure_jump;
                     DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index cde7496585..6430a924f4 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -103,7 +103,7 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
     } while (0)
 # define UNBUFFERED_P(S) ((S)->_IO_file_flags & _IO_UNBUFFERED)
 # define flockfile(S) _IO_flockfile (S)
-# define fUNlockfile(S) _IO_funlockfile (S)
+# define funlockfile(S) _IO_funlockfile (S)
 #else /* ! USE_IN_LIBIO */
 /* This code is for use in the GNU C library.  */
 # include <stdio.h>
@@ -125,6 +125,8 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
     }									      \
    while (0)
 # define UNBUFFERED_P(s) ((s)->__buffer == NULL)
+# define flockfile(S) /* nothing */
+# define funlockfile(S) /* nothing */
 #endif /* USE_IN_LIBIO */
 
 
@@ -805,7 +807,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 
   /* Lock stream.  */
   flockfile (s);
-  
+
   /* Write the literal text before the first format.  */
   outstring ((const UCHAR_T *) format,
 	     lead_str_end - (const UCHAR_T *) format);
@@ -1001,7 +1003,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 
   /* Unlock stream.  */
   funlockfile (s);
-  
+
   /* We processed the whole format without any positional parameters.  */
   return done;
 
@@ -1263,7 +1265,7 @@ do_positional:
 
   /* Unlock the stream.  */
   funlockfile (s);
-  
+
   return done;
 }
 
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 4b4dd119ca..9cdad7bb8b 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -26,7 +26,6 @@ Cambridge, MA 02139, USA.  */
 #include <stdlib.h>
 #include <string.h>
 
-
 #ifdef	__GNUC__
 #define	HAVE_LONGLONG
 #define	LONGLONG	long long
@@ -82,6 +81,8 @@ Cambridge, MA 02139, USA.  */
          return EOF;							      \
        }								      \
     } while (0)
+# define flockfile(S) _IO_flockfile (S)
+# define funlockfile(S) _IO_funlockfile (S)
 #else
 # define inchar()	((c = getc (s)), (void) ++read_in, c)
 # define conv_error()	do {						      \
@@ -108,6 +109,8 @@ Cambridge, MA 02139, USA.  */
 	  return EOF;							      \
 	}								      \
     } while (0)
+# define flockfile(S) /* nothing */
+# define funlockfile(S) /* nothing */
 #endif
 
 
@@ -196,7 +199,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
 
   /* Lock the stream.  */
   flockfile (s);
-  
+
   c = inchar ();
 
   /* Run through the format string.  */
@@ -807,7 +810,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
 
   /* Unlock stream.  */
   funlockfile (s);
-  
+
   return ((void) (c == EOF || ungetc (c, s)), done);
 }
 
diff --git a/sysdeps/mach/Makefile b/sysdeps/mach/Makefile
index fab174c0d6..a179b1f83e 100644
--- a/sysdeps/mach/Makefile
+++ b/sysdeps/mach/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -16,38 +16,11 @@
 # not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 # Cambridge, MA 02139, USA.
 
-ifndef mach-srcdir-computed
-mach-srcdir-computed := yes
-
-# If we were configured with `--with-mach=DIR', then config.make sets
-# mach-srcdir to DIR.  Otherwise guess we are in a big source tree.
-ifndef mach-srcdir
-mach-srcdir = ../mach
-endif
-
-# mach-srcdir is now set to the logical directory name.  This name might be
-# relative to $(objdir), might be relative to the source directory $(..), or
-# might be absolute.  We choose among these possibilities by looking for a
-# canonical file in each of those places (in that order).
-f := mach/mach.defs # Random file that identifies the Mach source dir.
-f := $(strip $f)
-mach-srcdir := $(firstword $(patsubst %/$f,%,$(wildcard $(addsuffix /$f,\
-	       $(objpfx)$(mach-srcdir) $(..)$(mach-srcdir)))) $(mach-srcdir))
-
-endif	# ! mach-srcdir-computed
-
 ifdef in-Makerules
 
 # Look for header files in mach/ under the top-level library source directory.
 includes += -I$(..)mach
 
-# When compiling, use the Mach header files directly from the kernel sources.
-includes += -I$(mach-srcdir)
-
-# Find Mach header files in the kernel source.
-vpath mach/%.h $(mach-srcdir)
-vpath device/%.h $(mach-srcdir)
-
 ifneq (mach,$(subdir))
 # Subdirectories other than mach/ might use the generated Mach headers.
 # So make sure we get a chance to run in mach/ to make them before all else.
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 462eb23b0e..14dc1ebc83 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -16,33 +16,6 @@
 # not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 # Cambridge, MA 02139, USA.
 
-# Get mach-srcdir defined.
-old-in-Makerules := $(in-Makerules)
-in-Makerules :=
-include $(..)sysdeps/mach/Makefile
-in-Makerules := $(old-in-Makerules)
-
-
-ifndef hurd-srcdir-computed
-hurd-srcdir-computed := yes
-
-# If we were configured with `--with-hurd=DIR', then config.make sets
-# hurd-srcdir to DIR.  Otherwise guess we are in a big source tree.
-ifndef hurd-srcdir
-hurd-srcdir = ../hurd
-endif
-
-# hurd-srcdir is now set to the logical directory name.  This name might be
-# relative to $(objdir), might be relative to the source directory $(..), or
-# might be absolute.  We choose among these possibilities by looking for a
-# canonical file in each of those places (in that order).
-f := hurd/hurd_types.defs # Random file that identifies the Hurd source dir.
-f := $(strip $f)
-hurd-srcdir := $(firstword $(patsubst %/$f,%,$(wildcard $(addsuffix /$f,\
-	       $(objpfx)$(hurd-srcdir) $(..)$(hurd-srcdir)))) $(hurd-srcdir))
-
-endif	# ! hurd-srcdir-computed
-
 ifdef in-Makerules
 
 subdirs := $(filter-out sunrpc,$(subdirs)) # XXX skip broken dirs
@@ -50,17 +23,6 @@ subdirs := $(filter-out sunrpc,$(subdirs)) # XXX skip broken dirs
 # Look for header files in hurd/ under the top-level library source directory.
 includes += -I$(..)hurd
 
-# When compiling, use the Hurd header files directly from the sources.
-includes += -I$(hurd-srcdir)
-
-# When compiling, find cthreads.h in the Hurd cthreads source.
-# This directory has some other (private) header file with
-# conflicting names, so we put it last.
-last-includes += -I$(hurd-srcdir)/libthreads
-
-# Find the Hurd header files in the Hurd source.
-vpath hurd/%.h $(hurd-srcdir)
-
 # Do not use any assembly code from sysdeps/unix (and subdirectories).
 # This bypasses all the system call stubs and uses any existing posix or
 # generic C files instead.
@@ -98,19 +60,36 @@ errno.texinfo = $(..)manual/errno.texi
 
 hurd = $(..)sysdeps/mach/hurd
 
-$(hurd)/errnos.h: $(objpfx)stamp-errnos ;
-$(objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \
-		       $(mach-srcdir)/mach/message.h \
-		       $(mach-srcdir)/mach/kern_return.h \
-		       $(mach-srcdir)/mach/mig_errors.h \
-		       $(mach-srcdir)/device/device_types.h
+define mach-errno-h
+($(foreach h,mach/message.h \
+	     mach/kern_return.h \
+	     mach/mig_errors.h \
+	     device/device_types.h,\
+ echo '#include <$h>';\
+ ))
+endef
+
+# We use the compiler to generate a list of absolute file names for
+# the headers we want to search for Mach error codes, listed above (and
+# incidentally, all other headers those include).
+-include $(common-objpfx)errnos.d
+$(common-objpfx)errnos.d: $(mach-errnos-deps)
+	$(mach-errno-h) | \
+	$(CC) $(CPPFLAGS) -M -x c - | \
+	sed -e 's,- *:,mach-errnos-deps :=,' > $@t
+	mv -f $@t $@
+
+$(hurd)/errnos.h: $(common-objpfx)stamp-errnos ;
+$(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \
+			      $(mach-errnos-deps)
 	gawk -f $^ > $(hurd)/errnos.h-tmp
 # Make it unwritable so noone will edit it by mistake.
 	-chmod a-w $(hurd)/errnos.h-tmp
 	./$(..)move-if-change $(hurd)/errnos.h-tmp $(hurd)/errnos.h
-	test ! -d CVS || \
-	  (cd $(hurd); cvs commit -m'Regenerated from $^' errnos.h)
+#	test ! -d CVS || \
+#	  (cd $(hurd); cvs commit -m'Regenerated from $^' errnos.h)
 	touch $@
+generated += errnos.d stamp-errnos
 
 $(hurd)/errlist.c: $(hurd)/errlist.awk $(errno.texinfo)
 	gawk -f $^ > $@-tmp
diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk
index e3ff7a843b..24a01ba935 100644
--- a/sysdeps/mach/hurd/errnos.awk
+++ b/sysdeps/mach/hurd/errnos.awk
@@ -34,7 +34,7 @@ BEGIN {
     print "enum __error_t_codes\n{";
     errnoh = 0;
     maxerrno = 0;
-    in_mach_errors = 0;
+    in_mach_errors = "";
     in_math = 0;
     edom = erange = "";
     print "#undef EDOM\n#undef ERANGE";
@@ -76,22 +76,22 @@ errnoh == 3 && $1 == "@comment" && $2 == "errno" {
 
 NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \
   {
-    in_mach_errors = 1;
+    in_mach_errors = FILENAME;
     print "\n\t/* Errors from <mach/message.h>.  */";
   }
 NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \
   {
-    in_mach_errors = 1;
+    in_mach_errors = FILENAME;
     print "\n\t/* Errors from <mach/kern_return.h>.  */";
     next;
   }
 
-in_mach_errors && $2 == "MACH_IPC_COMPAT" \
+in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \
   {
-    in_mach_errors = 0;
+    in_mach_errors = "";
   }
 
-in_mach_errors == 1 && NF == 3 && $1 == "#define" \
+in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \
   {
     printf "\t%-32s= %s,\n", "E" $2, $3;
   }