generic-poky/meta/recipes-core/glibc/ldconfig-native-2.12.1
Clemens Lang 3ece01215a ldconfig-native: Fix ELF flags on 64-bit binaries
Yocto's ldconfig-native was exported from an old version of glibc and
generates an ld.so.cache that is partially ignored by current versions
of glibc when loading libraries. This occurs for 64-bit binaries, where
glibc expects FLAG_ELF_LIBC6, but ldconfig-native only generates the
standard ELF flag. Fix this with an additional patch on top of the patch
for now.

You can verify this by applying the patch below to your target copy of
glibc and running

  LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 --list $anybinary

 --- ./elf/dl-cache.c.orig       2016-01-07 11:05:36.823447171 +0100
 +++ ./elf/dl-cache.c    2016-01-07 11:19:53.925878628 +0100
 @@ -106,6 +106,8 @@
                 if (_dl_cache_check_flags (flags)                             \
                     && _dl_cache_verify_ptr (lib->value))                     \
                   {                                                           \
 +                   if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))\
 +                       _dl_debug_printf ("  considering file %s\n", cache_data + lib->value); \
                     if (best == NULL || flags == GLRO(dl_correct_cache_id))   \
                       {                                                       \
                         HWCAP_CHECK;                                          \
 @@ -117,6 +119,9 @@
                              searching.  */                                   \
                           break;                                              \
                       }                                                       \
 +                 } else {                                                    \
 +                     if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))              \
 +                       _dl_debug_printf ("  ignoring file %s due to flags %x, expected %x\n", cache_data + lib->value, lib->flags, GLRO(dl_correct_cache_id)); \
                   }                                                           \
               }                                                               \
             while (++middle <= right);                                        \
 @@ -265,14 +270,23 @@

        /* Only accept hwcap if it's for the right platform.  */
  #define HWCAP_CHECK \
 -      if (lib->hwcap & hwcap_exclude)                                        \
 +      if (lib->hwcap & hwcap_exclude) {                                              \
 +       if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))            \
 +           _dl_debug_printf ("   hwcap mismatch %x vs. %x\n", lib->hwcap, hwcap_exclude); \
         continue;                                                             \
 -      if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion))         \
 +      }                                                                              \
 +      if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) {       \
 +       if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))            \
 +           _dl_debug_printf ("   os version mismatch %x vs. %x\n", lib->osversion, GLRO(dl_osversion)); \
         continue;                                                             \
 +      }                                                                              \
        if (_DL_PLATFORMS_COUNT                                                \
           && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0                           \
 -         && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform)                   \
 -       continue
 +         && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) {                 \
 +       if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))            \
 +           _dl_debug_printf ("   platform mismatch %x vs. %x\n", lib->hwcap & _DL_HWCAP_PLATFORM, platform); \
 +       continue;                                                             \
 +      }
        SEARCH_CACHE (cache_new);
      }
    else

This version of ldconfig-native should really be replaced with a version
matching the glibc source in use on the target platform.

(From OE-Core rev: bf9c1e6fa1c8eb86670383bad9b7c2e54bfe17f4)

Signed-off-by: Clemens Lang <clemens.lang@bmw-carit.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-03-31 13:18:06 +01:00
..
32and64bit.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
README glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
add-64-bit-flag-for-ELF64-entries.patch ldconfig-native: Fix ELF flags on 64-bit binaries 2016-03-31 13:18:06 +01:00
endian-ness_handling.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
endian-ness_handling_fix.patch ldconfig-native: fix a endian-ness bug 2014-11-04 10:27:10 +00:00
endianess-header.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
flag_fix.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
ldconfig-default-to-all-multilib-dirs.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
ldconfig-native-2.12.1.tar.bz2 glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
ldconfig.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00
ldconfig_aux-cache_path_fix.patch glibc: Migrate eglibc 2.19 -> glibc 2.20 2014-09-01 18:02:21 +01:00

README

The files are pulled verbatim from glibc 2.5 and then patched to allow
standalone compilation of ldconfig.

Richard Purdie
OpenedHand Ltd.

Upgraded the ldconfig recipe to eglibc 2.12.1
Nitin A Kamble <nitin.a.kamble@intel.com> 2011/03/29