diff options
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | sysdeps/generic/dl-cache.c | 37 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/Versions | 1 | ||||
-rw-r--r-- | time/strftime.c | 9 |
4 files changed, 48 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog index 516611d2b6..a4f5d9bcdb 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 311869fb7f..656fea8308 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 f8a9143549..eb313c8b1a 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 95dbae1850..f98fe21079 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) |