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.
This commit is contained in:
Roland McGrath 1996-05-12 16:38:08 +00:00
parent d617ac4ee5
commit aa1075ea2f
15 changed files with 187 additions and 211 deletions

View File

@ -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.

View File

@ -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))

View File

@ -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

View File

@ -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;
}
}

View File

@ -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

5
hurd/faultexc.defs Normal file
View File

@ -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>

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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",

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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.

View File

@ -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

View File

@ -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;
}