diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | manual/contrib.texi | 7 | ||||
-rw-r--r-- | stdlib/longlong.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/dl-cache.c | 16 | ||||
-rw-r--r-- | sysdeps/generic/dl-cache.h | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h | 23 |
6 files changed, 67 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 928c6b860e..6a66a3f39a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +1999-06-09 Jakub Jelinek <jj@ultra.linux.cz> + + * stdlib/longlong.h: gas changed sethi handling when without + %hi(). Fix assembly. + * sysdeps/generic/dl-cache.c (_dl_cache_lookup): Allow + port specific cache id checks. + * sysdeps/generic/dl-cache.h: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h: New file. + 1999-06-08 Ulrich Drepper <drepper@cygnus.com> * gmon/gmon.c: Remove advertising clause of copyright. diff --git a/manual/contrib.texi b/manual/contrib.texi index 84362cb446..55f2edb66d 100644 --- a/manual/contrib.texi +++ b/manual/contrib.texi @@ -191,12 +191,7 @@ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. @item -All advertising materials mentioning features or use of this software -must display the following acknowledgement: -@quotation -This product includes software developed by the University of -California, Berkeley and its contributors. -@end quotation +[This condition was removed.] @item Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software diff --git a/stdlib/longlong.h b/stdlib/longlong.h index c0ec1859c8..37ea646b34 100644 --- a/stdlib/longlong.h +++ b/stdlib/longlong.h @@ -1220,7 +1220,7 @@ extern USItype __udiv_qrnnd __P ((USItype *, USItype, USItype, USItype)); srlx %7,32,%5 mulx %3,%5,%3 mulx %2,%5,%5 - sethi 0x80000000,%2 + sethi %%hi(0x80000000),%2 addcc %4,%3,%4 srlx %4,32,%4 add %2,%2,%2 diff --git a/sysdeps/generic/dl-cache.c b/sysdeps/generic/dl-cache.c index 582afb51c3..36d3dc37aa 100644 --- a/sysdeps/generic/dl-cache.c +++ b/sysdeps/generic/dl-cache.c @@ -20,6 +20,7 @@ #include <unistd.h> #include <elf/ldsodefs.h> #include <sys/mman.h> +#include <dl-cache.h> /* System-dependent function to read a file's whole contents in the most convenient manner available. */ @@ -48,9 +49,12 @@ struct cache_file static struct cache_file *cache; static size_t cachesize; +/* 1 if cache_data + PTR points into the cache. */ +#define _dl_cache_verify_ptr(ptr) (ptr < cachesize - sizeof *cache) + /* This is the cache ID we expect. Normally it is 3 for glibc linked binaries. */ -int _dl_correct_cache_id = 3; +int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID; /* Helper function which must match the one in ldconfig, so that we rely on the same sort order. */ @@ -146,7 +150,7 @@ _dl_load_cache_lookup (const char *name) while (left <= right) { /* Make sure string table indices are not bogus before using them. */ - if (cache->libs[middle].key >= cachesize - sizeof *cache) + if (! _dl_cache_verify_ptr (cache->libs[middle].key)) { cmpres = 1; break; @@ -177,7 +181,7 @@ _dl_load_cache_lookup (const char *name) while (middle > 0 /* Make sure string table indices are not bogus before using them. */ - && cache->libs[middle - 1].key < cachesize - sizeof *cache + && _dl_cache_verify_ptr (cache->libs[middle - 1].key) /* Actually compare the entry. */ && (_dl_cache_libcmp (name, cache_data + cache->libs[middle - 1].key) @@ -193,15 +197,15 @@ _dl_load_cache_lookup (const char *name) /* We haven't seen this string so far. Test whether the index is ok and whether the name matches. Otherwise we are done. */ - && (cache->libs[middle].key >= cachesize - sizeof *cache + && (! _dl_cache_verify_ptr (cache->libs[middle].key) || (_dl_cache_libcmp (name, cache_data + cache->libs[middle].key) != 0))) break; flags = cache->libs[middle].flags; - if ((flags == 1 || flags == 3) - && cache->libs[middle].value < cachesize - sizeof *cache) + if (_dl_cache_check_flags (flags) + && _dl_cache_verify_ptr (cache->libs[middle].value)) { if (best == NULL || flags == _dl_correct_cache_id) { diff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h new file mode 100644 index 0000000000..579c261af1 --- /dev/null +++ b/sysdeps/generic/dl-cache.h @@ -0,0 +1,23 @@ +/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. + Copyright (C) 1999 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 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. */ + +#define _DL_CACHE_DEFAULT_ID 3 + +#define _dl_cache_check_flags(flags) \ + ((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h new file mode 100644 index 0000000000..2d074ffa9c --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h @@ -0,0 +1,23 @@ +/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. + Copyright (C) 1999 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 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. */ + +#define _DL_CACHE_DEFAULT_ID 0x103 + +#define _dl_cache_check_flags(flags) \ + ((flags) == _DL_CACHE_DEFAULT_ID) |