1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-10 05:03:06 +03:00
Files
glibc/sysdeps/unix/sysv/linux/i386/dl-librecon.h
Adhemerval Zanella b46d250656 Remove kernel version check
The kernel version check is used to avoid glibc to run on older
kernels where some syscall are not available and fallback code are
not enabled to handle graciously fail.  However, it does not prevent
if the kernel does not correctly advertise its version through
vDSO note, uname or procfs.

Also kernel version checks are sometime not desirable by users,
where they want to deploy on different system with different kernel
version knowing the minimum set of syscall is always presented on
such systems.

The kernel version check has been removed along with the
LD_ASSUME_KERNEL environment variable.  The minimum kernel used to
built glibc is still provided through NT_GNU_ABI_TAG ELF note and
also printed when libc.so is issued.

Checked on x86_64-linux-gnu.
2022-05-16 15:03:49 -03:00

60 lines
2.3 KiB
C

/* Optional code to distinguish library flavours.
Copyright (C) 1998-2022 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 _DL_LIBRECON_H
#define DISTINGUISH_LIB_VERSIONS \
do \
{ \
/* We have to find out whether the binary is linked against \
libc 5 or glibc. We do this by looking at all the DT_NEEDED \
entries. If one is libc.so.5 this is a libc 5 linked binary. */ \
if (main_map->l_info[DT_NEEDED]) \
{ \
/* We have dependencies. */ \
const ElfW(Dyn) *d; \
const char *strtab; \
\
strtab = (const char *) D_PTR (main_map, l_info[DT_STRTAB]); \
\
for (d = main_map->l_ld; d->d_tag != DT_NULL; ++d) \
if (d->d_tag == DT_NEEDED \
&& strcmp (strtab + d->d_un.d_val, "libc.so.5") == 0) \
break; \
\
/* We print a `5' or `6' depending on the outcome. */ \
_dl_printf (d->d_tag != DT_NULL ? "5\n" : "6\n"); \
} \
} \
while (0)
/* Recognizing extra environment variables. */
#define EXTRA_LD_ENVVARS \
case 15: \
if (memcmp (envline, "LIBRARY_VERSION", 15) == 0) \
GLRO(dl_correct_cache_id) = envline[16] == '5' ? 2 : 3; \
break; \
/* Extra unsecure variables. The names are all stuffed in a single
string which means they have to be terminated with a '\0' explicitly. */
#define EXTRA_UNSECURE_ENVVARS \
"LD_AOUT_LIBRARY_PATH\0" \
"LD_AOUT_PRELOAD\0"
#endif /* dl-librecon.h */