2003-03-26 Roland McGrath <roland@redhat.com>

* sysdeps/unix/make-syscalls.sh: When an undefined syscall has
	SOURCE=-, append its symbol names to make variable unix-stub-syscalls.
	* sysdeps/unix/Makefile [$(subdir) = misc] [unix-stub-syscalls]
	(sysdep_routines): Add stub-syscalls.
	($(objpfx)stub-syscalls.c): New target.
	(generated): Add stub-syscalls.c.
This commit is contained in:
Roland McGrath 2003-03-26 22:49:15 +00:00
parent da058e4542
commit d8e94af60b
2 changed files with 40 additions and 0 deletions

View File

@ -282,6 +282,36 @@ omit-deps += $(unix-syscalls)
ifeq (misc,$(subdir)) ifeq (misc,$(subdir))
sysdep_routines += $(unix-extra-syscalls) sysdep_routines += $(unix-extra-syscalls)
ifdef unix-stub-syscalls
# The system call entry points in this list are supposed to be additional
# functions not overriding any other sysdeps/.../call.c implementation, but
# their system call numbers are unavailable in the kernel headers we're
# using. Instead of a system call stub, these get a function that fails
# with ENOSYS. We just generate a single module defining one function and
# making all these entry point names aliases for it.
sysdep_routines += stub-syscalls
$(objpfx)stub-syscalls.c: $(common-objpfx)sysd-syscalls \
$(..)sysdeps/unix/Makefile
(echo '#include <errno.h>'; \
echo 'long int _no_syscall (void)'; \
echo '{ __set_errno (ENOSYS); return -1L; }'; \
for call in $(unix-stub-syscalls); do \
case $$call in \
*@@*) ver=$${call##*@}; call=$${call%%*@}; \
echo "strong_alias (_no_syscall, $${call}_$${ver})"; \
echo "default_symbol_version \
($${call}_$${ver}, $$call, $$ver);" ;; \
*@@*) ver=$${call##*@}; call=$${call%%*@}; \
echo "strong_alias (_no_syscall, $${call}_$${ver})"; \
echo "symbol_version ($${call}_$${ver}, $$call, $$ver);" ;; \
*) echo "weak_alias (_no_syscall, $$call)"; \
echo "weak_alias (_no_syscall, __GI_$$call)" ;; \
esac; \
done) > $@T
mv -f $@T $@
generated += stub-syscalls.c
endif
endif endif
export sysdirs export sysdirs

View File

@ -111,6 +111,16 @@ while read file srcfile caller syscall args strong weak; do
echo "#### CALL=$file NUMBER=$callnum ARGS=$args SOURCE=$srcfile" echo "#### CALL=$file NUMBER=$callnum ARGS=$args SOURCE=$srcfile"
case x$srcfile"$callnum" in case x$srcfile"$callnum" in
x--)
# Undefined callnum for an extra syscall.
if [ x$caller != x- ]; then
if [ x$noerrno != x ]; then
echo >&2 "$0: no number for $fileno, no-error syscall ($strong $weak)"
exit 2
fi
echo "unix-stub-syscalls += $strong $weak"
fi
;;
x*-) ;; ### Do nothing for undefined callnum x*-) ;; ### Do nothing for undefined callnum
x-*) x-*)
echo "ifeq (,\$(filter $file,\$(unix-syscalls)))" echo "ifeq (,\$(filter $file,\$(unix-syscalls)))"