glibc/io/Makefile
Frédéric Bérat 20c894d21e Exclude routines from fortification
Since the _FORTIFY_SOURCE feature uses some routines of Glibc, they need to
be excluded from the fortification.

On top of that:
 - some tests explicitly verify that some level of fortification works
   appropriately, we therefore shouldn't modify the level set for them.
 - some objects need to be build with optimization disabled, which
   prevents _FORTIFY_SOURCE to be used for them.

Assembler files that implement architecture specific versions of the
fortified routines were not excluded from _FORTIFY_SOURCE as there is no
C header included that would impact their behavior.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2023-07-05 16:59:48 +02:00

314 lines
6.7 KiB
Makefile

# Copyright (C) 1992-2023 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
# <https://www.gnu.org/licenses/>.
#
# Sub-makefile for I/O portion of the library.
#
subdir := io
include ../Makeconfig
headers := \
bits/fcntl.h \
bits/fcntl2.h \
bits/poll.h \
bits/poll2.h \
bits/stat.h \
bits/statfs.h \
bits/statvfs.h \
bits/statx-generic.h \
bits/statx.h \
bits/types/struct_statx.h \
bits/types/struct_statx_timestamp.h \
fcntl.h \
fts.h \
ftw.h \
poll.h \
sys/fcntl.h \
sys/poll.h \
sys/sendfile.h \
sys/stat.h \
sys/statfs.h \
sys/statvfs.h \
sys/vfs.h \
utime.h \
# headers
routines := \
access \
chdir \
chmod \
chown \
close \
close_range \
closefrom \
copy_file_range \
creat \
creat64 \
dup \
dup2 \
dup3 \
euidaccess \
faccessat \
fchdir \
fchmod \
fchmodat \
fchown \
fchownat \
fcntl \
fcntl64 \
file_change_detection \
flock \
fstat \
fstat64 \
fstatat \
fstatat64 \
fstatfs \
fstatfs64 \
fstatvfs \
fstatvfs64 \
fts \
fts64 \
fts64-time64 \
ftw \
ftw64 \
ftw64-time64 \
futimens \
getcwd \
getdirname \
getwd \
isatty \
lchmod \
lchown \
link \
linkat \
lockf \
lockf64 \
lseek \
lseek64 \
lstat \
lstat64 \
mkdir \
mkdirat \
mkfifo \
mkfifoat \
mknod \
mknodat \
open \
open64 \
open64_2 \
open_2 \
openat \
openat64 \
openat64_2 \
openat_2 \
pipe \
pipe2 \
poll \
posix_fadvise \
posix_fadvise64 \
posix_fallocate \
posix_fallocate64 \
ppoll \
read \
readlink \
readlinkat \
rmdir \
sendfile \
sendfile64 \
stat \
stat64 \
statfs \
statfs64 \
statvfs \
statvfs64 \
statx \
symlink \
symlinkat \
ttyname \
ttyname_r \
umask \
unlink \
unlinkat \
utime \
utimensat \
write \
# routines
# Exclude fortified routines from being built with _FORTIFY_SOURCE
routines_no_fortify += \
getcwd \
getwd \
open \
open64 \
openat \
openat64 \
poll \
ppoll \
read \
readlink \
readlinkat \
ttyname_r \
# routines_no_fortify
others := \
pwd \
# others
test-srcs := \
ftwtest \
ftwtest-time64 \
# test-srcs
tests := \
bug-ftw1 \
bug-ftw2 \
bug-ftw3 \
bug-ftw4 \
bug-ftw5 \
test-lfs \
test-stat \
test-stat2 \
test-utime \
tst-close_range \
tst-closefrom \
tst-copy_file_range \
tst-faccessat \
tst-fchmodat \
tst-fchownat \
tst-fcntl \
tst-fcntl-lock \
tst-fstatat \
tst-fts \
tst-fts-lfs \
tst-ftw-bz26353 \
tst-ftw-bz28126 \
tst-ftw-lnk \
tst-futimens \
tst-futimes \
tst-futimesat \
tst-getcwd \
tst-getcwd-abspath \
tst-lchmod \
tst-linkat \
tst-lockf \
tst-lutimes \
tst-mkdirat \
tst-mkfifoat \
tst-mknodat \
tst-open-tmpfile \
tst-openat \
tst-posix_fallocate \
tst-posix_fallocate64 \
tst-readlinkat \
tst-renameat \
tst-stat \
tst-stat-lfs \
tst-statvfs \
tst-symlinkat \
tst-ttyname_r \
tst-unlinkat \
tst-utime \
tst-utimensat \
tst-utimes \
# tests
tests-time64 := \
tst-fcntl-time64 \
tst-fts-time64 \
tst-futimens-time64 \
tst-futimes-time64\
tst-futimesat-time64 \
tst-lchmod-time64 \
tst-lutimes-time64 \
tst-stat-time64 \
tst-utime-time64 \
tst-utimensat-time64 \
tst-utimes-time64 \
# tests-time64
# Likewise for statx, but we do not need static linking here.
tests-internal += \
tst-file_change_detection \
tst-statx \
# tests-internal
tests-static += \
tst-statx \
# tests-static
ifeq ($(run-built-tests),yes)
tests-special += \
$(objpfx)ftwtest-time64.out \
$(objpfx)ftwtest.out \
# tests-special
endif
include ../Rules
CFLAGS-open.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-openat.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-open64.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-creat.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-creat64.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-fcntl.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-fcntl64.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-poll.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-ppoll.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-lockf.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-lockf64.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-statfs.c += -fexceptions
CFLAGS-fstatfs.c += -fexceptions
CFLAGS-statvfs.c += -fexceptions $(config-cflags-wno-ignored-attributes)
CFLAGS-fstatvfs.c += -fexceptions $(config-cflags-wno-ignored-attributes)
CFLAGS-fts.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-fts64.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-fts64-time64.c += -Wno-uninitialized $(uses-callbacks) -fexceptions
CFLAGS-ftw.c += $(uses-callbacks) -fexceptions
CFLAGS-ftw64.c += $(uses-callbacks) -fexceptions
CFLAGS-ftw64-time64.c += $(uses-callbacks) -fexceptions
CFLAGS-posix_fallocate.c += -fexceptions
CFLAGS-posix_fallocate64.c += -fexceptions
CFLAGS-fallocate.c += -fexceptions
CFLAGS-fallocate64.c += -fexceptions
CFLAGS-read.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-write.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes)
CFLAGS-close.c += -fexceptions -fasynchronous-unwind-tables
CFLAGS-lseek64.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-test-stat.c += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
CFLAGS-test-lfs.c += -D_LARGEFILE64_SOURCE
CFLAGS-tst-lchmod.c += -D_FILE_OFFSET_BITS=64
test-stat2-ARGS = Makefile . $(objpfx)test-stat2
tst-statvfs-ARGS = $(objpfx)tst-statvfs tst-statvfs.c /tmp
tst-open-tmpfile-ARGS = --test-dir=$(objpfx)
CFLAGS-ftwtest-time64.c += -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64
ifeq ($(run-built-tests),yes)
$(objpfx)ftwtest.out: ftwtest-sh $(objpfx)ftwtest
$(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \
$(evaluate-test)
$(objpfx)ftwtest-time64.out: ftwtest-sh $(objpfx)ftwtest-time64
$(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \
$(evaluate-test)
endif