--- cache.c | 11 +- chroot_canon.c | 7 + dl-cache.c | 235 --------------------------------------------------------- dl-cache.h | 3 ldconfig.c | 27 ++++-- readlib.c | 7 + xstrdup.c | 11 -- 7 files changed, 45 insertions(+), 256 deletions(-) Index: 1/cache.c =================================================================== --- 1.orig/cache.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/cache.c 2007-11-23 17:05:56.000000000 +0000 @@ -15,6 +15,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#define _LARGEFILE64_SOURCE +#define _GNU_SOURCE + #include #include #include @@ -29,8 +32,10 @@ #include #include -#include -#include +#include "ldconfig.h" +#include "dl-cache.h" +# define N_(msgid) msgid +#define _(msg) msg struct cache_entry { @@ -230,8 +235,6 @@ init_cache (void) entries = NULL; } - - static int compare (const struct cache_entry *e1, const struct cache_entry *e2) { Index: 1/chroot_canon.c =================================================================== --- 1.orig/chroot_canon.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/chroot_canon.c 2007-11-23 17:05:56.000000000 +0000 @@ -16,6 +16,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#define _LARGEFILE64_SOURCE +#define _GNU_SOURCE + #include #include #include @@ -26,7 +29,9 @@ #include #include -#include +#include "ldconfig.h" + +#define __set_errno(Val) errno = (Val) #ifndef PATH_MAX #define PATH_MAX 1024 Index: 1/dl-cache.c =================================================================== --- 1.orig/dl-cache.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/dl-cache.c 2007-11-23 17:05:56.000000000 +0000 @@ -19,12 +19,12 @@ #include #include -#include +//#include "ldsodefs.h" #include #include #include -#include +//#include "_itoa.h" #ifndef _DL_PLATFORMS_COUNT # define _DL_PLATFORMS_COUNT 0 @@ -38,103 +38,7 @@ static size_t cachesize; /* 1 if cache_data + PTR points into the cache. */ #define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size) -#define SEARCH_CACHE(cache) \ -/* We use binary search since the table is sorted in the cache file. \ - The first matching entry in the table is returned. \ - It is important to use the same algorithm as used while generating \ - the cache file. */ \ -do \ - { \ - left = 0; \ - right = cache->nlibs - 1; \ - \ - while (left <= right) \ - { \ - __typeof__ (cache->libs[0].key) key; \ - \ - middle = (left + right) / 2; \ - \ - key = cache->libs[middle].key; \ - \ - /* Make sure string table indices are not bogus before using \ - them. */ \ - if (! _dl_cache_verify_ptr (key)) \ - { \ - cmpres = 1; \ - break; \ - } \ - \ - /* Actually compare the entry with the key. */ \ - cmpres = _dl_cache_libcmp (name, cache_data + key); \ - if (__builtin_expect (cmpres == 0, 0)) \ - { \ - /* Found it. LEFT now marks the last entry for which we \ - know the name is correct. */ \ - left = middle; \ - \ - /* There might be entries with this name before the one we \ - found. So we have to find the beginning. */ \ - while (middle > 0) \ - { \ - __typeof__ (cache->libs[0].key) key; \ - \ - key = cache->libs[middle - 1].key; \ - /* Make sure string table indices are not bogus before \ - using them. */ \ - if (! _dl_cache_verify_ptr (key) \ - /* Actually compare the entry. */ \ - || _dl_cache_libcmp (name, cache_data + key) != 0) \ - break; \ - --middle; \ - } \ - \ - do \ - { \ - int flags; \ - __typeof__ (cache->libs[0]) *lib = &cache->libs[middle]; \ - \ - /* Only perform the name test if necessary. */ \ - if (middle > left \ - /* We haven't seen this string so far. Test whether the \ - index is ok and whether the name matches. Otherwise \ - we are done. */ \ - && (! _dl_cache_verify_ptr (lib->key) \ - || (_dl_cache_libcmp (name, cache_data + lib->key) \ - != 0))) \ - break; \ - \ - flags = lib->flags; \ - if (_dl_cache_check_flags (flags) \ - && _dl_cache_verify_ptr (lib->value)) \ - { \ - if (best == NULL || flags == GLRO(dl_correct_cache_id)) \ - { \ - HWCAP_CHECK; \ - best = cache_data + lib->value; \ - \ - if (flags == GLRO(dl_correct_cache_id)) \ - /* We've found an exact match for the shared \ - object and no general `ELF' release. Stop \ - searching. */ \ - break; \ - } \ - } \ - } \ - while (++middle <= right); \ - break; \ - } \ - \ - if (cmpres < 0) \ - left = middle + 1; \ - else \ - right = middle - 1; \ - } \ - } \ -while (0) - - int -internal_function _dl_cache_libcmp (const char *p1, const char *p2) { while (*p1 != '\0') @@ -173,139 +77,4 @@ _dl_cache_libcmp (const char *p1, const } -/* Look up NAME in ld.so.cache and return the file name stored there, - or null if none is found. */ -const char * -internal_function -_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. */ - if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0)) - _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE); - - if (cache == NULL) - { - /* Read the contents of the file. */ - void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize, - PROT_READ); - - /* We can handle three different cache file formats here: - - the old libc5/glibc2.0/2.1 format - - 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 != MAP_FAILED && cachesize > sizeof *cache - && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0) - { - size_t offset; - /* Looks ok. */ - cache = file; - - /* Check for new version. */ - offset = ALIGN_CACHE (sizeof (struct cache_file) - + cache->nlibs * sizeof (struct file_entry)); - - cache_new = (struct cache_file_new *) ((void *) cache + offset); - if (cachesize < (offset + sizeof (struct cache_file_new)) - || memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW, - sizeof CACHEMAGIC_VERSION_NEW - 1) != 0) - cache_new = (void *) -1; - } - else if (file != MAP_FAILED && cachesize > sizeof *cache_new - && memcmp (file, CACHEMAGIC_VERSION_NEW, - sizeof CACHEMAGIC_VERSION_NEW - 1) == 0) - { - cache_new = file; - cache = file; - } - else - { - if (file != MAP_FAILED) - __munmap (file, cachesize); - cache = (void *) -1; - } - - assert (cache != NULL); - } - - if (cache == (void *) -1) - /* Previously looked for the cache file and didn't find it. */ - return NULL; - - best = NULL; - - if (cache_new != (void *) -1) - { - uint64_t platform; - - /* 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; - - platform = _dl_string_platform (GLRO(dl_platform)); - if (platform != (uint64_t) -1) - platform = 1ULL << platform; - - /* Only accept hwcap if it's for the right platform. */ -#ifdef USE_TLS -# define _DL_HWCAP_TLS_MASK (1LL << 63) -#else -# define _DL_HWCAP_TLS_MASK 0 -#endif -#define HWCAP_CHECK \ - if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \ - continue; \ - if (_DL_PLATFORMS_COUNT \ - && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \ - && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \ - continue; \ - if (lib->hwcap \ - & ~(GLRO(dl_hwcap) | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK)) \ - continue - SEARCH_CACHE (cache_new); - } - else - { - /* 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); - } - - /* Print our result if wanted. */ - if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0) - && best != NULL) - _dl_debug_printf (" trying file=%s\n", best); - - return best; -} - -#ifndef MAP_COPY -/* If the system does not support MAP_COPY we cannot leave the file open - all the time since this would create problems when the file is replaced. - Therefore we provide this function to close the file and open it again - once needed. */ -void -_dl_unload_cache (void) -{ - if (cache != NULL && cache != (struct cache_file *) -1) - { - __munmap (cache, cachesize); - cache = NULL; - } -} -#endif Index: 1/dl-cache.h =================================================================== --- 1.orig/dl-cache.h 2007-11-23 17:05:44.000000000 +0000 +++ 1/dl-cache.h 2007-11-23 17:05:56.000000000 +0000 @@ -101,5 +101,4 @@ struct cache_file_new (((addr) + __alignof__ (struct cache_file_new) -1) \ & (~(__alignof__ (struct cache_file_new) - 1))) -extern int _dl_cache_libcmp (const char *p1, const char *p2) - internal_function; +extern int _dl_cache_libcmp (const char *p1, const char *p2); Index: 1/ldconfig.c =================================================================== --- 1.orig/ldconfig.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/ldconfig.c 2007-11-23 17:05:56.000000000 +0000 @@ -15,6 +15,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#define _LARGEFILE64_SOURCE +#define _GNU_SOURCE + #define PROCINFO_CLASS static #include #include @@ -37,10 +40,20 @@ #include #include -#include -#include +#include "ldconfig.h" +#include "dl-cache.h" + +#include "dl-procinfo.h" + +#include "argp.h" + + +#define SYSCONFDIR "/etc" +#define LIBDIR "/usr/lib" +#define SLIBDIR "/lib" +# define N_(msgid) msgid +#define _(msg) msg -#include #ifdef _DL_FIRST_PLATFORM # define _DL_FIRST_EXTRA (_DL_FIRST_PLATFORM + _DL_PLATFORMS_COUNT) @@ -53,7 +66,7 @@ #endif /* Get libc version number. */ -#include +#include "version.h" #define PACKAGE _libc_intl_domainname @@ -143,8 +156,8 @@ static const struct argp_option options[ { NULL, 0, NULL, 0, NULL, 0 } }; -#define PROCINFO_CLASS static -#include +//#define PROCINFO_CLASS static +//#include /* Short description of program. */ static const char doc[] = N_("Configure Dynamic Linker Run Time Bindings."); @@ -281,7 +294,7 @@ parse_opt (int key, char *arg, struct ar static void print_version (FILE *stream, struct argp_state *state) { - fprintf (stream, "ldconfig (GNU %s) %s\n", PACKAGE, VERSION); + fprintf (stream, "ldconfig (Hacked Poky Version)\n"); fprintf (stream, gettext ("\ Copyright (C) %s Free Software Foundation, Inc.\n\ This is free software; see the source for copying conditions. There is NO\n\ Index: 1/readlib.c =================================================================== --- 1.orig/readlib.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/readlib.c 2007-11-23 17:05:56.000000000 +0000 @@ -21,6 +21,9 @@ development version. Besides the simplification, it has also been modified to read some other file formats. */ +#define _LARGEFILE64_SOURCE +#define _GNU_SOURCE + #include #include #include @@ -34,7 +37,9 @@ #include #include -#include +#include "ldconfig.h" + +#define _(msg) msg #define Elf32_CLASS ELFCLASS32 #define Elf64_CLASS ELFCLASS64 Index: 1/xstrdup.c =================================================================== --- 1.orig/xstrdup.c 2007-11-23 17:05:44.000000000 +0000 +++ 1/xstrdup.c 2007-11-23 17:05:56.000000000 +0000 @@ -15,15 +15,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#define _GNU_SOURCE + +#include -#if defined STDC_HEADERS || defined HAVE_STRING_H || _LIBC -# include -#else -# include -#endif void *xmalloc (size_t n) __THROW; char *xstrdup (char *string) __THROW;