+2019-06-12 Florian Weimer <fweimer@redhat.com>
+
+ Linux: Deprecate sysctl.
+ * include/sysctl.h (__sysctl): Remove declaration.
+ * scripts/check-installed-headers.sh (sys/sysctl.h): Disable
+ check.
+ * sysdeps/unix/sysv/linux/sys/sysctl.h: Add deprecation warning.
+ (sysctl): Add deprecation attribute.
+ * sysdeps/unix/sysv/linux/sysctl.c: Include <linux/sysctl.h>
+ directly, to avoid the deprecation warning. Do not include
+ <string.h>.
+ (__sysctl): Remove hidden alias.
+
2019-06-12 Florian Weimer <fweimer@redhat.com>
Linux: Use kernel headers for statx definitions if available.
* On 32-bit Arm, support for the port-based I/O emulation and the <sys/io.h>
header have been removed.
+* The Linux-specific <sys/sysctl.h> header and the sysctl function have been
+ deprecated and will be removed from a future version of glibc.
+ Application should directly access /proc instead. For obtaining random
+ bits, the getentropy function can be used.
+
Changes to build and runtime requirements:
* GCC 6.2 or later is required to build the GNU C Library.
#ifndef _SYS_SYSCTL_H
#include_next <sys/sysctl.h>
-
-# ifndef _ISOMAC
-
-/* Read or write system parameters (Linux, FreeBSD specific). */
-extern int __sysctl (int *__name, int __nlen, void *__oldval,
- size_t *__oldlenp, void *__newval, size_t __newlen);
-libc_hidden_proto (__sysctl)
-
-
-# endif /* !_ISOMAC */
#endif /* _SYS_SYSCTL_H */
failed=0
is_x86_64=unknown
-is_x32=unknown
for header in "$@"; do
# Skip various headers for which this test gets a false failure.
case "$header" in
(finclude/*)
continue;;
- # sys/sysctl.h is unsupported for x32.
+ # sys/sysctl.h produces a deprecation warning and therefore
+ # fails compilation with -Werror.
(sys/sysctl.h)
- case "$is_x32" in
- (yes) continue;;
- (no) ;;
- (unknown)
- cat >"$cih_test_c" <<EOF
-#if defined __x86_64__ && defined __ILP32__
-# error "is x32"
-#endif
-EOF
- if $cc_cmd -fsyntax-only "$cih_test_c" > /dev/null 2>&1
- then
- is_x32=no
- else
- is_x32=yes
- continue
- fi
- ;;
- esac
- ;;
+ continue;;
# sys/vm86.h is "unsupported on x86-64" and errors out on that target.
(sys/vm86.h)
#ifndef _SYS_SYSCTL_H
#define _SYS_SYSCTL_H 1
+#warning "The <sys/sysctl.h> header is deprecated and will be removed."
+
#include <features.h>
#define __need_size_t
#include <stddef.h>
/* Read or write system parameters. */
extern int sysctl (int *__name, int __nlen, void *__oldval,
- size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
+ size_t *__oldlenp, void *__newval, size_t __newlen) __THROW
+ __attribute_deprecated__;
__END_DECLS
<http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include <string.h> /* For the real memset prototype. */
-#include <sys/sysctl.h>
+#include <linux/sysctl.h>
#include <sysdep.h>
#include <sys/syscall.h>
return INLINE_SYSCALL (_sysctl, 1, &args);
}
-libc_hidden_def (__sysctl)
weak_alias (__sysctl, sysctl)