aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-10-25 08:23:00 +0000
committerUlrich Drepper <drepper@redhat.com>2000-10-25 08:23:00 +0000
commitb05598ef313e7c37c6a8f4cbf15966890f35a8df (patch)
tree657570ae1a8a5531ef9d1127f860f9cf64af8ea0
parent7e036a01346eea3d1478a56684f69f441121a0a4 (diff)
downloadglibc-b05598ef313e7c37c6a8f4cbf15966890f35a8df.zip
glibc-b05598ef313e7c37c6a8f4cbf15966890f35a8df.tar.gz
glibc-b05598ef313e7c37c6a8f4cbf15966890f35a8df.tar.bz2
Update.
2000-10-24 Paul Eggert <eggert@twinsun.com> * time/strftime.c (my_strftime macro) [!defined _LIBC && HAVE_TZNAME && HAVE_TZSET]: When redefining, do it without args, so that it works even if emacs is defined and an extra argument is passed to my_stftime. (my_strftime function): When evaluating a subformat, pass ut_argument as well. 2000-10-24 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/ia64/Versions: Add pciconfig_read and pciconfig_write. * sysdeps/generic/dl-cache.c (_dl_cache_verify_ptr): Correct test for files with new cache format. (_dl_load_cache_lookup): Add variable cache_data_size for size of the data. Correctly report error if neither old not new signature is found. Little optimizations. Mostly based on a patch by Denis Zaitsev <zzz@cd-club.ru>.
-rw-r--r--ChangeLog21
-rw-r--r--sysdeps/generic/dl-cache.c37
-rw-r--r--sysdeps/unix/sysv/linux/ia64/Versions1
-rw-r--r--time/strftime.c9
4 files changed, 48 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 516611d..a4f5d9b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
+2000-10-24 Paul Eggert <eggert@twinsun.com>
+
+ * time/strftime.c (my_strftime macro)
+ [!defined _LIBC && HAVE_TZNAME && HAVE_TZSET]:
+ When redefining, do it without args, so that it works even if
+ emacs is defined and an extra argument is passed to my_stftime.
+ (my_strftime function): When evaluating a subformat, pass
+ ut_argument as well.
+
+2000-10-24 Andreas Schwab <schwab@suse.de>
+
+ * sysdeps/unix/sysv/linux/ia64/Versions: Add pciconfig_read and
+ pciconfig_write.
+
2000-10-25 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/generic/dl-cache.c (_dl_cache_verify_ptr): Correct test
+ for files with new cache format.
+ (_dl_load_cache_lookup): Add variable cache_data_size for size of the
+ data. Correctly report error if neither old not new signature is
+ found. Little optimizations.
+ Mostly based on a patch by Denis Zaitsev <zzz@cd-club.ru>.
+
* elf/dl-close.c (_dl_close): Optimize a bit by optimizing out the
nsearchlist variable.
diff --git a/sysdeps/generic/dl-cache.c b/sysdeps/generic/dl-cache.c
index 311869f..656fea8 100644
--- a/sysdeps/generic/dl-cache.c
+++ b/sysdeps/generic/dl-cache.c
@@ -17,6 +17,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <assert.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <sys/mman.h>
@@ -35,7 +36,7 @@ static struct cache_file_new *cache_new;
static size_t cachesize;
/* 1 if cache_data + PTR points into the cache. */
-#define _dl_cache_verify_ptr(ptr) (ptr < cachesize - sizeof *cache)
+#define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size)
/* This is the cache ID we expect. Normally it is 3 for glibc linked
binaries. */
@@ -146,6 +147,7 @@ _dl_load_cache_lookup (const char *name)
int left, right, middle;
int cmpres;
const char *cache_data;
+ uint32_t cache_data_size;
const char *best;
/* Print a message if the loading of libs is traced. */
@@ -163,8 +165,8 @@ _dl_load_cache_lookup (const char *name)
- the old format with the new format in it
- only the new format
The following checks if the cache contains any of these formats. */
- if (file && cachesize > sizeof *cache &&
- !memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1))
+ if (file != NULL && cachesize > sizeof *cache
+ && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0)
{
size_t offset;
/* Looks ok. */
@@ -174,31 +176,27 @@ _dl_load_cache_lookup (const char *name)
offset = ALIGN_CACHE (sizeof (struct cache_file)
+ cache->nlibs * sizeof (struct file_entry));
- cache_new = (struct cache_file_new *) ((void *)cache + offset);
+ cache_new = (struct cache_file_new *) ((void *) cache + offset);
if (cachesize < (offset + sizeof (struct cache_file_new))
- || memcmp (cache_new->magic, CACHEMAGIC_NEW,
- sizeof CACHEMAGIC_NEW - 1)
- || memcmp (cache_new->version, CACHE_VERSION,
- sizeof CACHE_VERSION - 1))
+ || memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW,
+ sizeof CACHEMAGIC_VERSION_NEW - 1) != 0)
cache_new = (void *) -1;
}
- else if (file && cachesize > sizeof *cache_new)
+ else if (file != NULL && cachesize > sizeof *cache_new
+ && memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW,
+ sizeof CACHEMAGIC_VERSION_NEW - 1) == 0)
{
cache_new = file;
cache = file;
- if (memcmp (cache_new->magic, CACHEMAGIC_NEW,
- sizeof CACHEMAGIC_NEW - 1)
- || memcmp (cache_new->version, CACHE_VERSION,
- sizeof CACHE_VERSION - 1))
- cache_new = (void *) -1;
}
else
{
- if (file)
+ if (file != NULL)
__munmap (file, cachesize);
cache = (void *) -1;
- return NULL;
}
+
+ assert (cache != NULL);
}
if (cache == (void *) -1)
@@ -216,6 +214,9 @@ _dl_load_cache_lookup (const char *name)
/* This is where the strings start. */
cache_data = (const char *) cache_new;
+ /* Now we can compute how large the string table is. */
+ cache_data_size = (const char *) cache + cachesize - cache_data;
+
hwcap = &_dl_hwcap;
#define HWCAP_CHECK \
@@ -227,6 +228,10 @@ _dl_load_cache_lookup (const char *name)
{
/* This is where the strings start. */
cache_data = (const char *) &cache->libs[cache->nlibs];
+
+ /* Now we can compute how large the string table is. */
+ cache_data_size = (const char *) cache + cachesize - cache_data;
+
#undef HWCAP_CHECK
#define HWCAP_CHECK do {} while (0)
SEARCH_CACHE (cache);
diff --git a/sysdeps/unix/sysv/linux/ia64/Versions b/sysdeps/unix/sysv/linux/ia64/Versions
index f8a9143..eb313c8 100644
--- a/sysdeps/unix/sysv/linux/ia64/Versions
+++ b/sysdeps/unix/sysv/linux/ia64/Versions
@@ -11,6 +11,7 @@ libc {
_inb; _inw; _inl;
outb; outw; _outl;
_outb; _outw; _outl;
+ pciconfig_read; pciconfig_write;
# linuxthreads
__clone2;
diff --git a/time/strftime.c b/time/strftime.c
index 95dbae1..f98fe21 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -455,8 +455,7 @@ static CHAR_T const month_name[][10] =
return _strftime_copytm (s, maxsize, format, &tmcopy ut_argument);
}
# undef my_strftime
-# define my_strftime(S, Maxsize, Format, Tp) \
- _strftime_copytm (S, Maxsize, Format, Tp)
+# define my_strftime _strftime_copytm
#endif
@@ -799,8 +798,10 @@ my_strftime (s, maxsize, format, tp ut_argument)
subformat:
{
CHAR_T *old_start = p;
- size_t len = my_strftime (NULL, (size_t) -1, subfmt, tp);
- add (len, my_strftime (p, maxsize - i, subfmt, tp));
+ size_t len = my_strftime (NULL, (size_t) -1, subfmt,
+ tp ut_argument);
+ add (len, my_strftime (p, maxsize - i, subfmt,
+ tp ut_argument));
if (to_uppcase)
while (old_start < p)