1# Copyright (C) 1991-2022 Free Software Foundation, Inc.
2# This file is part of the GNU C Library.
3
4# The GNU C Library is free software; you can redistribute it and/or
5# modify it under the terms of the GNU Lesser General Public
6# License as published by the Free Software Foundation; either
7# version 2.1 of the License, or (at your option) any later version.
8
9# The GNU C Library is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12# Lesser General Public License for more details.
13
14# You should have received a copy of the GNU Lesser General Public
15# License along with the GNU C Library; if not, see
16# <https://www.gnu.org/licenses/>.
17
18#
19#	Sub-makefile for misc portion of the library.
20#
21
22subdir	:= misc
23
24include ../Makeconfig
25
26headers	:= sys/uio.h bits/uio-ext.h bits/uio_lim.h \
27	   sys/ioctl.h bits/ioctls.h bits/ioctl-types.h \
28	   sys/ptrace.h sys/file.h sys/dir.h sys/cdefs.h \
29	   ar.h a.out.h libgen.h stab.h bits/stab.def sgtty.h \
30	   ttyent.h paths.h sys/reboot.h \
31	   sys/mman.h sys/param.h bits/param.h \
32	   fstab.h mntent.h search.h err.h error.h \
33	   sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \
34	   sys/select.h sys/sysinfo.h \
35	   regexp.h bits/select.h bits/mman.h sys/xattr.h \
36	   syslog.h sys/syslog.h \
37	   bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \
38	   bits/select2.h bits/hwcap.h sys/auxv.h \
39	   sys/sysmacros.h bits/sysmacros.h bits/types/struct_iovec.h \
40	   bits/err-ldbl.h bits/error-ldbl.h \
41	   sys/single_threaded.h
42
43routines := brk sbrk sstk ioctl \
44	    readv writev preadv preadv64 pwritev pwritev64 \
45	    preadv2 preadv64v2 pwritev2 pwritev64v2 \
46	    setreuid setregid \
47	    seteuid setegid \
48	    getpagesize \
49	    getdtsz \
50	    gethostname sethostname getdomain setdomain \
51	    select pselect \
52	    acct chroot fsync sync fdatasync syncfs reboot \
53	    gethostid sethostid \
54	    revoke vhangup \
55	    swapon swapoff mktemp mkstemp mkstemp64 mkdtemp \
56	    mkostemp mkostemp64 mkstemps mkstemps64 mkostemps mkostemps64 \
57	    ualarm usleep \
58	    gtty stty \
59	    ptrace \
60	    fstab mntent mntent_r \
61	    utimes lutimes futimes futimesat \
62	    truncate ftruncate truncate64 ftruncate64 \
63	    chflags fchflags \
64	    insremque getttyent getusershell getpass ttyslot \
65	    syslog syscall daemon \
66	    mmap mmap64 munmap mprotect msync madvise mincore remap_file_pages\
67	    mlock munlock mlockall munlockall \
68	    efgcvt efgcvt_r qefgcvt qefgcvt_r \
69	    hsearch hsearch_r tsearch lsearch \
70	    err error ustat \
71	    getsysstats dirname regexp \
72	    getloadavg getclktck \
73	    fgetxattr flistxattr fremovexattr fsetxattr getxattr \
74	    listxattr lgetxattr llistxattr lremovexattr lsetxattr \
75	    removexattr setxattr getauxval ifunc-impl-list makedev \
76	    allocate_once fd_to_filename single_threaded unwind-link \
77	    atomic_wide_counter
78
79generated += tst-error1.mtrace tst-error1-mem.out \
80  tst-allocate_once.mtrace tst-allocate_once-mem.out
81
82aux := init-misc
83install-lib := libg.a
84gpl2lgpl := error.c error.h
85
86tests := tst-dirname tst-tsearch tst-fdset tst-mntent tst-hsearch \
87	 tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 \
88	 tst-mntent-blank-corrupt tst-mntent-blank-passno bug18240 \
89	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
90	 tst-preadvwritev2 tst-preadvwritev64v2 tst-warn-wide \
91	 tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt tst-ldbl-efgcvt \
92	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select \
93	 tst-ioctl
94
95tests-time64 := \
96  tst-select-time64 \
97  tst-pselect-time64 \
98  tst-ioctl-time64 \
99  # tests-time64
100
101# Tests which need libdl.
102ifeq (yes,$(build-shared))
103tests += tst-gethostid
104endif
105
106tests-internal := tst-atomic tst-atomic-long tst-allocate_once
107tests-static := tst-empty
108
109# Test for the internal, non-exported __fd_to_filename function.
110tests-internal += tst-fd_to_filename
111tests-static += tst-fd_to_filename
112
113ifeq ($(run-built-tests),yes)
114tests-special += $(objpfx)tst-error1-mem.out \
115  $(objpfx)tst-allocate_once-mem.out
116endif
117
118tests-container := tst-syslog
119
120CFLAGS-select.c += -fexceptions -fasynchronous-unwind-tables
121CFLAGS-tsearch.c += $(uses-callbacks)
122CFLAGS-lsearch.c += $(uses-callbacks)
123CFLAGS-pselect.c += -fexceptions
124CFLAGS-readv.c += -fexceptions -fasynchronous-unwind-tables
125CFLAGS-writev.c += -fexceptions -fasynchronous-unwind-tables
126CFLAGS-preadv.c += -fexceptions -fasynchronous-unwind-tables
127CFLAGS-preadv64.c += -fexceptions -fasynchronous-unwind-tables
128CFLAGS-pwritev.c += -fexceptions -fasynchronous-unwind-tables
129CFLAGS-pwritev64.c += -fexceptions -fasynchronous-unwind-tables
130CFLAGS-preadv2.c += -fexceptions -fasynchronous-unwind-tables
131CFLAGS-preadv64v2.c += -fexceptions -fasynchronous-unwind-tables
132CFLAGS-pwritev2.c += -fexceptions -fasynchronous-unwind-tables
133CFLAGS-pwritev64v2.c += -fexceptions -fasynchronous-unwind-tables
134CFLAGS-usleep.c += -fexceptions
135CFLAGS-syslog.c += -fexceptions
136CFLAGS-error.c += -fexceptions
137CFLAGS-getpass.c += -fexceptions
138CFLAGS-mkstemp.c += -fexceptions
139CFLAGS-mkstemp64.c += -fexceptions
140CFLAGS-getsysstats.c += -fexceptions
141CFLAGS-getusershell.c += -fexceptions
142CFLAGS-err.c += -fexceptions
143CFLAGS-tst-tsearch.c += $(stack-align-test-flags)
144CFLAGS-msync.c += -fexceptions -fasynchronous-unwind-tables
145CFLAGS-fdatasync.c += -fexceptions -fasynchronous-unwind-tables
146CFLAGS-fsync.c += -fexceptions -fasynchronous-unwind-tables
147
148# Called during static library initialization, so turn stack-protection
149# off for non-shared builds.
150CFLAGS-sbrk.o = $(no-stack-protector)
151CFLAGS-sbrk.op = $(no-stack-protector)
152CFLAGS-brk.o = $(no-stack-protector)
153CFLAGS-brk.op = $(no-stack-protector)
154CFLAGS-mmap.o = $(no-stack-protector)
155CFLAGS-mmap.op = $(no-stack-protector)
156CFLAGS-mmap64.o = $(no-stack-protector)
157CFLAGS-mmap64.op = $(no-stack-protector)
158
159include ../Rules
160
161$(objpfx)libg.a: $(dep-dummy-lib); $(make-dummy-lib)
162
163$(objpfx)tst-tsearch: $(libm)
164
165tst-error1-ENV = MALLOC_TRACE=$(objpfx)tst-error1.mtrace \
166		 LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so
167tst-error1-ARGS = $(objpfx)tst-error1.out
168$(objpfx)tst-error1-mem.out: $(objpfx)tst-error1.out
169	$(common-objpfx)malloc/mtrace $(objpfx)tst-error1.mtrace > $@; \
170	$(evaluate-test)
171
172tst-allocate_once-ENV = MALLOC_TRACE=$(objpfx)tst-allocate_once.mtrace \
173			LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so
174$(objpfx)tst-allocate_once-mem.out: $(objpfx)tst-allocate_once.out
175	$(common-objpfx)malloc/mtrace $(objpfx)tst-allocate_once.mtrace > $@; \
176	$(evaluate-test)
177
178$(objpfx)tst-select: $(librt)
179$(objpfx)tst-select-time64: $(librt)
180$(objpfx)tst-pselect: $(librt)
181$(objpfx)tst-pselect-time64: $(librt)
182