]> code.ossystems Code Review - openembedded-core.git/commitdiff
Add ldconfig-native
authorRichard Purdie <richard@openedhand.com>
Fri, 23 Nov 2007 16:54:29 +0000 (16:54 +0000)
committerRichard Purdie <richard@openedhand.com>
Fri, 23 Nov 2007 16:54:29 +0000 (16:54 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3217 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/packages/glibc/ldconfig-native-2.5/ldconfig-native-2.5.tar.bz2 [new file with mode: 0644]
meta/packages/glibc/ldconfig-native-2.5/ldconfig.patch [new file with mode: 0644]
meta/packages/glibc/ldconfig-native_2.5.bb [new file with mode: 0644]

diff --git a/meta/packages/glibc/ldconfig-native-2.5/ldconfig-native-2.5.tar.bz2 b/meta/packages/glibc/ldconfig-native-2.5/ldconfig-native-2.5.tar.bz2
new file mode 100644 (file)
index 0000000..693b35c
Binary files /dev/null and b/meta/packages/glibc/ldconfig-native-2.5/ldconfig-native-2.5.tar.bz2 differ
diff --git a/meta/packages/glibc/ldconfig-native-2.5/ldconfig.patch b/meta/packages/glibc/ldconfig-native-2.5/ldconfig.patch
new file mode 100644 (file)
index 0000000..d143a07
--- /dev/null
@@ -0,0 +1,460 @@
+---
+ 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 <errno.h>
+ #include <error.h>
+ #include <dirent.h>
+@@ -29,8 +32,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
+ {
+@@ -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 <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+@@ -26,7 +29,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: 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 <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
+@@ -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 <alloca.h>
+ #include <argp.h>
+@@ -37,10 +40,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)
+@@ -53,7 +66,7 @@
+ #endif
+ /* Get libc version number.  */
+-#include <version.h>
++#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 <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.");
+@@ -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 <a.out.h>
+ #include <elf.h>
+ #include <error.h>
+@@ -34,7 +37,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: 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 <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;
diff --git a/meta/packages/glibc/ldconfig-native_2.5.bb b/meta/packages/glibc/ldconfig-native_2.5.bb
new file mode 100644 (file)
index 0000000..c221ba1
--- /dev/null
@@ -0,0 +1,15 @@
+DESCRIPTION = "A standalone native ldconfig build"
+
+SRC_URI = "file://ldconfig-native-2.5.tar.bz2 \
+           file://ldconfig.patch;patch=1 "
+
+inherit native
+
+do_compile () {
+       $CC ldconfig.c -std=gnu99 chroot_canon.c xmalloc.c xstrdup.c cache.c readlib.c  -I. dl-cache.c -o ldconfig
+}
+
+do_stage () {
+       install -d ${STAGING_BINDIR}/
+       install ldconfig ${STAGING_BINDIR}/
+}