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