mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
1998-03-29 20:59 Ulrich Drepper <drepper@cygnus.com> * elf/Makefile: Fix typo. * elf/ldd.bash.in: Collect output of ldd --verify in verify_out. * elf/ldd.sh.in: Likewise. * elf/ldsodefs.h: Declare _dl_correct_cache_id. * elf/rtld.c (dl_main): In --verify mode allow platform specifc action. Use strsep correctly. (process_envvars): Allow platform specific variables. * sysdeps/generic/dl-cache.c (_dl_correct_cache_id): New variable. (_dl_load_cache_lookup): Test cache IDs found against _dl_correct_cache_id. * sysdeps/generic/dl-librecon.h: New file. * sysdeps/unix/sysv/linux/dl-librecon.h: New file. * sysdeps/unix/sysv/linux/lddlibc4.c: Include error.h. * sysdeps/unix/sysv/linux/ldd-rewrite.sed: New file.cvs/glibc-2-1-branch
11 changed files with 166 additions and 25 deletions
@ -0,0 +1,26 @@ |
|||
/* Optional code to distinguish library flavours.
|
|||
Copyright (C) 1998 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Library General Public License as |
|||
published by the Free Software Foundation; either version 2 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 |
|||
Library General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Library General Public |
|||
License along with the GNU C Library; see the file COPYING.LIB. If not, |
|||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|||
Boston, MA 02111-1307, USA. */ |
|||
|
|||
#ifndef _DL_LIBRECON_H |
|||
#define _DL_LIBRECON_H 1 |
|||
|
|||
/* In the general case we don't do anything. */ |
|||
|
|||
#endif /* dl-librecon.h */ |
|||
@ -0,0 +1,57 @@ |
|||
/* Optional code to distinguish library flavours.
|
|||
Copyright (C) 1998 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Library General Public License as |
|||
published by the Free Software Foundation; either version 2 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 |
|||
Library General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Library General Public |
|||
License along with the GNU C Library; see the file COPYING.LIB. If not, |
|||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|||
Boston, MA 02111-1307, USA. */ |
|||
|
|||
#ifndef _DL_LIBRECON_H |
|||
#define _DL_LIBRECON_H 1 |
|||
|
|||
#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 char *strtab = ((void *) main_map->l_addr \ |
|||
+ main_map->l_info[DT_STRTAB]->d_un.d_ptr); \ |
|||
const ElfW(Dyn) *d; \ |
|||
\ |
|||
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_sysdep_message (d->d_tag != DT_NULL ? "5\n" : "6\n", NULL); \ |
|||
} \ |
|||
} \ |
|||
while (0) |
|||
|
|||
/* Recognizing extra environment variables. */ |
|||
#define EXTRA_LD_ENVVARS \ |
|||
case 15: \ |
|||
if (memcmp (&envline[3], "LIBRARY_VERSION", 15) == 0) \ |
|||
{ \ |
|||
_dl_correct_cache_id = envline[19] == '5' ? 2 : 3; \ |
|||
break; \ |
|||
} |
|||
|
|||
#endif /* dl-librecon.h */ |
|||
@ -0,0 +1,11 @@ |
|||
/Maybe extra code for non-ELF binaries/a\ |
|||
file=$1\ |
|||
# Run the ldd stub.\ |
|||
lddlibc4 $file\ |
|||
# Test the result.\ |
|||
if test $? -lt 3; then\ |
|||
exit 0;\ |
|||
fi\ |
|||
# In case of an error punt. |
|||
/LD_TRACE_LOADED_OBJECTS=1/a\ |
|||
add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" |
|||
Loading…
Reference in new issue