472 lines
14 KiB
Diff
472 lines
14 KiB
Diff
Upstream-Status: Inappropriate [embedded specific]
|
|
|
|
enable standalone building of ldconfig
|
|
|
|
---
|
|
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: ldconfig-native-2.12.1/cache.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/cache.c
|
|
+++ ldconfig-native-2.12.1/cache.c
|
|
@@ -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 <errno.h>
|
|
#include <error.h>
|
|
#include <dirent.h>
|
|
@@ -31,8 +34,10 @@
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
|
|
-#include <ldconfig.h>
|
|
-#include <dl-cache.h>
|
|
+#include "ldconfig.h"
|
|
+#include "dl-cache.h"
|
|
+# define N_(msgid) msgid
|
|
+#define _(msg) msg
|
|
|
|
struct cache_entry
|
|
{
|
|
Index: ldconfig-native-2.12.1/chroot_canon.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/chroot_canon.c
|
|
+++ ldconfig-native-2.12.1/chroot_canon.c
|
|
@@ -17,6 +17,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 <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
@@ -27,7 +30,9 @@
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
-#include <ldconfig.h>
|
|
+#include "ldconfig.h"
|
|
+
|
|
+#define __set_errno(Val) errno = (Val)
|
|
|
|
#ifndef PATH_MAX
|
|
#define PATH_MAX 1024
|
|
Index: ldconfig-native-2.12.1/dl-cache.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/dl-cache.c
|
|
+++ ldconfig-native-2.12.1/dl-cache.c
|
|
@@ -20,12 +20,12 @@
|
|
|
|
#include <assert.h>
|
|
#include <unistd.h>
|
|
-#include <ldsodefs.h>
|
|
+//#include "ldsodefs.h"
|
|
#include <sys/mman.h>
|
|
#include <dl-cache.h>
|
|
#include <dl-procinfo.h>
|
|
|
|
-#include <stdio-common/_itoa.h>
|
|
+//#include "_itoa.h"
|
|
|
|
#ifndef _DL_PLATFORMS_COUNT
|
|
# define _DL_PLATFORMS_COUNT 0
|
|
@@ -39,103 +39,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')
|
|
@@ -172,139 +76,3 @@ _dl_cache_libcmp (const char *p1, const
|
|
}
|
|
return *p1 - *p2;
|
|
}
|
|
-
|
|
-
|
|
-/* 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;
|
|
-
|
|
-#define _DL_HWCAP_TLS_MASK (1LL << 63)
|
|
- uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & GLRO(dl_hwcap_mask))
|
|
- | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK);
|
|
-
|
|
- /* Only accept hwcap if it's for the right platform. */
|
|
-#define HWCAP_CHECK \
|
|
- if (lib->hwcap & hwcap_exclude) \
|
|
- continue; \
|
|
- 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
|
|
- 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: ldconfig-native-2.12.1/dl-cache.h
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/dl-cache.h
|
|
+++ ldconfig-native-2.12.1/dl-cache.h
|
|
@@ -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: ldconfig-native-2.12.1/ldconfig.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/ldconfig.c
|
|
+++ ldconfig-native-2.12.1/ldconfig.c
|
|
@@ -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
|
|
+
|
|
#define PROCINFO_CLASS static
|
|
#include <alloca.h>
|
|
#include <argp.h>
|
|
@@ -39,10 +42,20 @@
|
|
#include <glob.h>
|
|
#include <libgen.h>
|
|
|
|
-#include <ldconfig.h>
|
|
-#include <dl-cache.h>
|
|
+#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 <dl-procinfo.h>
|
|
|
|
#ifdef _DL_FIRST_PLATFORM
|
|
# define _DL_FIRST_EXTRA (_DL_FIRST_PLATFORM + _DL_PLATFORMS_COUNT)
|
|
@@ -55,7 +68,7 @@
|
|
#endif
|
|
|
|
/* Get libc version number. */
|
|
-#include <version.h>
|
|
+#include "version.h"
|
|
|
|
#define PACKAGE _libc_intl_domainname
|
|
|
|
@@ -152,8 +165,8 @@ static const struct argp_option options[
|
|
{ NULL, 0, NULL, 0, NULL, 0 }
|
|
};
|
|
|
|
-#define PROCINFO_CLASS static
|
|
-#include <dl-procinfo.c>
|
|
+//#define PROCINFO_CLASS static
|
|
+//#include <dl-procinfo.c>
|
|
|
|
/* Short description of program. */
|
|
static const char doc[] = N_("Configure Dynamic Linker Run Time Bindings.");
|
|
@@ -291,6 +304,7 @@ parse_opt (int key, char *arg, struct ar
|
|
return 0;
|
|
}
|
|
|
|
+#define REPORT_BUGS_TO "mailing list : poky@yoctoproject.org"
|
|
/* Print bug-reporting information in the help message. */
|
|
static char *
|
|
more_help (int key, const char *text, void *input)
|
|
@@ -315,7 +329,7 @@ For bug reporting instructions, please s
|
|
static void
|
|
print_version (FILE *stream, struct argp_state *state)
|
|
{
|
|
- fprintf (stream, "ldconfig %s%s\n", PKGVERSION, 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\
|
|
@@ -1233,6 +1247,7 @@ set_hwcap (void)
|
|
hwcap_mask = strtoul (mask, NULL, 0);
|
|
}
|
|
|
|
+const char _libc_intl_domainname[] = "libc";
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
Index: ldconfig-native-2.12.1/readlib.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/readlib.c
|
|
+++ ldconfig-native-2.12.1/readlib.c
|
|
@@ -22,6 +22,9 @@
|
|
development version. Besides the simplification, it has also been
|
|
modified to read some other file formats. */
|
|
|
|
+#define _LARGEFILE64_SOURCE
|
|
+#define _GNU_SOURCE
|
|
+
|
|
#include <a.out.h>
|
|
#include <elf.h>
|
|
#include <error.h>
|
|
@@ -35,7 +38,9 @@
|
|
#include <sys/stat.h>
|
|
#include <gnu/lib-names.h>
|
|
|
|
-#include <ldconfig.h>
|
|
+#include "ldconfig.h"
|
|
+
|
|
+#define _(msg) msg
|
|
|
|
#define Elf32_CLASS ELFCLASS32
|
|
#define Elf64_CLASS ELFCLASS64
|
|
Index: ldconfig-native-2.12.1/xstrdup.c
|
|
===================================================================
|
|
--- ldconfig-native-2.12.1.orig/xstrdup.c
|
|
+++ ldconfig-native-2.12.1/xstrdup.c
|
|
@@ -16,15 +16,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 <config.h>
|
|
-#endif
|
|
+#define _GNU_SOURCE
|
|
+
|
|
+#include <string.h>
|
|
|
|
-#if defined STDC_HEADERS || defined HAVE_STRING_H || _LIBC
|
|
-# include <string.h>
|
|
-#else
|
|
-# include <strings.h>
|
|
-#endif
|
|
void *xmalloc (size_t n) __THROW;
|
|
char *xstrdup (char *string) __THROW;
|
|
|