summaryrefslogtreecommitdiffstats
path: root/oe-init-build-env
diff options
context:
space:
mode:
authorClemens Lang <clemens.lang@bmw-carit.de>2016-03-30 15:22:49 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-03-31 13:18:06 +0100
commit3ece01215a7b038dbd5cde313754c42d134a887f (patch)
tree9bb2401973d9e1cb7d313114f7ddc85a585b6843 /oe-init-build-env
parentd492aec2c2afc35eb36e7b7555c514205ab3474c (diff)
downloadpoky-3ece01215a7b038dbd5cde313754c42d134a887f.tar.gz
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>
Diffstat (limited to 'oe-init-build-env')
0 files changed, 0 insertions, 0 deletions