Message ID | 20230704165554.239581-11-fberat@redhat.com |
---|---|
State | New |
Headers | show |
Series | Allow glibc to be built with _FORTIFY_SOURCE | expand |
On 2023-07-04 12:55, Frédéric Bérat wrote: > The __fdelt_chk declaration needs to be available so that > libc_hidden_proto can be used while not redefining __FD_ELT. > Thus, misc/bits/select-decl.h is created to hold the corresponding > prototypes. > --- > debug/fdelt_chk.c | 1 + > include/bits/select-decl.h | 1 + > include/sys/select.h | 4 ++++ > misc/Makefile | 1 + > misc/bits/select-decl.h | 31 +++++++++++++++++++++++++++++++ > misc/bits/select2.h | 6 ++---- > 6 files changed, 40 insertions(+), 4 deletions(-) > create mode 100644 include/bits/select-decl.h > create mode 100644 misc/bits/select-decl.h Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org> > > diff --git a/debug/fdelt_chk.c b/debug/fdelt_chk.c > index d1d3a19460..bcf8f333f9 100644 > --- a/debug/fdelt_chk.c > +++ b/debug/fdelt_chk.c > @@ -28,3 +28,4 @@ __fdelt_chk (long int d) > return d / __NFDBITS; > } > strong_alias (__fdelt_chk, __fdelt_warn) > +libc_hidden_def (__fdelt_chk) > diff --git a/include/bits/select-decl.h b/include/bits/select-decl.h > new file mode 100644 > index 0000000000..43db738a61 > --- /dev/null > +++ b/include/bits/select-decl.h > @@ -0,0 +1 @@ > +#include <misc/bits/select-decl.h> > diff --git a/include/sys/select.h b/include/sys/select.h > index a8961afbed..45376461e9 100644 > --- a/include/sys/select.h > +++ b/include/sys/select.h > @@ -3,6 +3,10 @@ > > #ifndef _ISOMAC > /* Now define the internal interfaces. */ > + > +#include <bits/select-decl.h> > +libc_hidden_proto (__fdelt_chk) > + > # if __TIMESIZE == 64 > # define __pselect64 __pselect > # define __select64 __select > diff --git a/misc/Makefile b/misc/Makefile > index 36ba7a0bad..3497d30f3b 100644 > --- a/misc/Makefile > +++ b/misc/Makefile > @@ -68,6 +68,7 @@ headers := \ > bits/syslog-ldbl.h \ > bits/syslog-path.h \ > bits/error.h \ > + bits/select-decl.h \ > bits/select2.h \ > bits/hwcap.h \ > sys/auxv.h \ > diff --git a/misc/bits/select-decl.h b/misc/bits/select-decl.h > new file mode 100644 > index 0000000000..95962e1b98 > --- /dev/null > +++ b/misc/bits/select-decl.h > @@ -0,0 +1,31 @@ > +/* Checking routines for select functions. Declaration only. > + Copyright (C) 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/>. */ > + > +#ifndef _BITS_SELECT_DECL_H > +#define _BITS_SELECT_DECL_H 1 > + > +#ifndef _SYS_SELECT_H > +# error "Never include <bits/select-decl.h> directly; use <sys/select.h> instead." > +#endif > + > +/* Helper functions to issue warnings and errors when needed. */ > +extern long int __fdelt_chk (long int __d); > +extern long int __fdelt_warn (long int __d) > + __warnattr ("bit outside of fd_set selected"); > + > +#endif > diff --git a/misc/bits/select2.h b/misc/bits/select2.h > index abd84a19d5..91e85c87d1 100644 > --- a/misc/bits/select2.h > +++ b/misc/bits/select2.h > @@ -20,10 +20,8 @@ > # error "Never include <bits/select2.h> directly; use <sys/select.h> instead." > #endif > > -/* Helper functions to issue warnings and errors when needed. */ > -extern long int __fdelt_chk (long int __d); > -extern long int __fdelt_warn (long int __d) > - __warnattr ("bit outside of fd_set selected"); > +#include <bits/select-decl.h> > + > #undef __FD_ELT > #define __FD_ELT(d) \ > __extension__ \
diff --git a/debug/fdelt_chk.c b/debug/fdelt_chk.c index d1d3a19460..bcf8f333f9 100644 --- a/debug/fdelt_chk.c +++ b/debug/fdelt_chk.c @@ -28,3 +28,4 @@ __fdelt_chk (long int d) return d / __NFDBITS; } strong_alias (__fdelt_chk, __fdelt_warn) +libc_hidden_def (__fdelt_chk) diff --git a/include/bits/select-decl.h b/include/bits/select-decl.h new file mode 100644 index 0000000000..43db738a61 --- /dev/null +++ b/include/bits/select-decl.h @@ -0,0 +1 @@ +#include <misc/bits/select-decl.h> diff --git a/include/sys/select.h b/include/sys/select.h index a8961afbed..45376461e9 100644 --- a/include/sys/select.h +++ b/include/sys/select.h @@ -3,6 +3,10 @@ #ifndef _ISOMAC /* Now define the internal interfaces. */ + +#include <bits/select-decl.h> +libc_hidden_proto (__fdelt_chk) + # if __TIMESIZE == 64 # define __pselect64 __pselect # define __select64 __select diff --git a/misc/Makefile b/misc/Makefile index 36ba7a0bad..3497d30f3b 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -68,6 +68,7 @@ headers := \ bits/syslog-ldbl.h \ bits/syslog-path.h \ bits/error.h \ + bits/select-decl.h \ bits/select2.h \ bits/hwcap.h \ sys/auxv.h \ diff --git a/misc/bits/select-decl.h b/misc/bits/select-decl.h new file mode 100644 index 0000000000..95962e1b98 --- /dev/null +++ b/misc/bits/select-decl.h @@ -0,0 +1,31 @@ +/* Checking routines for select functions. Declaration only. + Copyright (C) 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/>. */ + +#ifndef _BITS_SELECT_DECL_H +#define _BITS_SELECT_DECL_H 1 + +#ifndef _SYS_SELECT_H +# error "Never include <bits/select-decl.h> directly; use <sys/select.h> instead." +#endif + +/* Helper functions to issue warnings and errors when needed. */ +extern long int __fdelt_chk (long int __d); +extern long int __fdelt_warn (long int __d) + __warnattr ("bit outside of fd_set selected"); + +#endif diff --git a/misc/bits/select2.h b/misc/bits/select2.h index abd84a19d5..91e85c87d1 100644 --- a/misc/bits/select2.h +++ b/misc/bits/select2.h @@ -20,10 +20,8 @@ # error "Never include <bits/select2.h> directly; use <sys/select.h> instead." #endif -/* Helper functions to issue warnings and errors when needed. */ -extern long int __fdelt_chk (long int __d); -extern long int __fdelt_warn (long int __d) - __warnattr ("bit outside of fd_set selected"); +#include <bits/select-decl.h> + #undef __FD_ELT #define __FD_ELT(d) \ __extension__ \