diff options
Diffstat (limited to 'REORG.TODO/sysdeps/unix/Makefile')
-rw-r--r-- | REORG.TODO/sysdeps/unix/Makefile | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/unix/Makefile b/REORG.TODO/sysdeps/unix/Makefile new file mode 100644 index 0000000000..750e32c4ed --- /dev/null +++ b/REORG.TODO/sysdeps/unix/Makefile @@ -0,0 +1,112 @@ +# Copyright (C) 1991-2017 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 +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <http://www.gnu.org/licenses/>. + +ifndef inhibit-unix-syscalls + +# Sysdep dirs unix/... can contain a file syscalls.list, +# which specifies objects to be compiled as simple Unix system calls. + +-include $(common-objpfx)sysd-syscalls + +ifeq (misc,$(subdir)) +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 + $(make-target-directory) + (for call in $(unix-stub-syscalls); do \ + call=$${call%%@*}; \ + echo "#define $$call RENAMED_$$call"; \ + done; \ + echo '#include <errno.h>'; \ + echo '#include <shlib-compat.h>'; \ + for call in $(unix-stub-syscalls); do \ + call=$${call%%@*}; \ + echo "#undef $$call"; \ + done; \ + 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%%@*}; \ + ver=`echo "$$ver" | sed 's/\./_/g'`; \ + echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \ + echo "versioned_symbol (libc, __$${call}_$${ver}, $$call, $$ver);"\ + ;; \ + *@*) \ + ver=$${call##*@}; call=$${call%%@*}; \ + ver=`echo "$$ver" | sed 's/\./_/g'`; \ + case $$ver in \ + *:*) \ + compat_ver=$${ver#*:}; \ + ver=$${ver%%:*}; \ + compat_cond="SHLIB_COMPAT (libc, $$ver, $$compat_ver)"; \ + ;; \ + *) \ + compat_cond=""; \ + ;; \ + esac; \ + if [ -n "$$compat_cond" ]; then echo "#if $$compat_cond"; fi; \ + echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \ + echo "compat_symbol (libc, __$${call}_$${ver}, $$call, $$ver);"; \ + if [ -n "$$compat_cond" ]; then echo "#endif"; fi; \ + ;; \ + *) echo "weak_alias (_no_syscall, $$call)"; \ + echo "stub_warning ($$call)"; \ + echo "weak_alias (_no_syscall, __GI_$$call)" ;; \ + esac; \ + done) > $@T + mv -f $@T $@ +generated += stub-syscalls.c +endif +endif + +# This is the end of the pipeline for compiling the syscall stubs. +# The stdin is assembler with cpp using sysdep.h macros. +compile-syscall = $(COMPILE.S) -o $@ -x assembler-with-cpp - \ + $(compile-mkdep-flags) + +ifndef avoid-generated +$(common-objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \ + $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) \ + $(common-objpfx)libc-modules.stmp + for dir in $(+sysdep_dirs); do \ + test -f $$dir/syscalls.list && \ + { sysdirs='$(sysdirs)' \ + asm_CPP='$(COMPILE.S) -E -x assembler-with-cpp' \ + $(SHELL) $(dir $<)$(notdir $<) $$dir || exit 1; }; \ + test $$dir = $(..)sysdeps/unix && break; \ + done > $@T + mv -f $@T $@ +endif + +$(common-objpfx)s-%.d: $(..)sysdeps/unix/s-%.S \ + $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) + $(+make-deps) + +postclean-generated += sysd-syscalls + +endif |