[OE-core] [PATCH] glibc: Fix ldd bug: not a dynamic executable error

Ricardo Ribalda Delgado ricardo.ribalda at gmail.com
Wed Aug 22 13:28:07 UTC 2018


On Wed, Aug 22, 2018 at 3:21 PM <richard.purdie at linuxfoundation.org> wrote:
>
> On Wed, 2018-08-22 at 15:13 +0200, Ricardo Ribalda Delgado wrote:
> > > Here I see:
> > >
> > > $ MACHINE=qemux86-64 bitbake glibc -e | grep ^RTLDLIST=
> > > RTLDLIST="/lib/ld-linux-x86-64.so.2"
> >
> > The output of RTLDLIST that I shared was from
> > root at qt5122:~# cat /usr/bin/ldd | grep ^RTLD
> > RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2
> > /libx32/ld-linux-x32.so.2"
> >
> > If I run your command
> >
> > pokyuser at c10753884d1a:/workdir/build$ bitbake glibc -e | grep
> > ^RTLDLIST=
> > RTLDLIST=""
> >
> > If we look at log.do_compile we can see how the the value from ldd is
> > rewritten:
> >
> > LC_ALL=C sed -e 's%@RTLD@%/lib/ld-linux-x86-64.so.2%g' -e
> > 's%@VERSION@%2.27%g' -e 's|@PKGVERSION@|(GNU libc) |g' -e
> > 's|@REPORT_BUGS_TO@|<http://www.gnu.org/software/libc/bugs.html>|g'
> > -e
> > 's%@BASH@%/bin/bash%g' -e 's%@TEXTDOMAINDIR@%/usr/share/locale%g' <
> > ldd.bash.in | LC_ALL=C sed -f
> > ../sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed >
> > /workdir/build/tmp/work/dbfp4-poky-linux/glibc/2.27-r0/build-x86_64-
> > poky-linux/elf/ldd.new
> >
> > cat git/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
> > /LD_TRACE_LOADED_OBJECTS=1/a\
> > add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
> > s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-
> > x32\)\(\.so\.[0-9.]*\)[
> > ]*$_\1"\2\4\6 \264\4-x86-64\6 \2x32\4-x32\6 \2\3\4\5\6"_
> >
> > which basically converts
> > /lib/ld-linux-x86-64.so.2
> >  into:
> >  /lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-
> > x32.so.2
> >
> > I agree that this bug is too obvious for not being noticed for a long
> > time. At least I use ldd a lot when thing fails ;)
>
> If you look at glibc_2.28.bb, it rewrites RTLDLIST if the value passed
> in is not empty. Yours is empty, the question is therefore why.
>
> Can you add -C10 to the command and see the variable history, here its:
>
> # $RTLDLIST [2 operations]
> #   set /media/build3/poky/meta/recipes-core/glibc/glibc-ld.inc:46
> #     "${@glibc_dl_info(d)['lddrewrite']}"
> #   override[class-nativesdk]:set /media/build3/poky/meta/recipes-core/glibc/glibc-ld.inc:47
> #     "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
> # pre-expansion value:
> #   "${@glibc_dl_info(d)['lddrewrite']}"
> RTLDLIST="/lib/ld-linux-x86-64.so.2"
>


# $RTLDLIST [2 operations]
#   set /workdir/repo/poky/meta/recipes-core/glibc/glibc-ld.inc:46
#     "${@glibc_dl_info(d)['lddrewrite']}"
#   override[class-nativesdk]:set
/workdir/repo/poky/meta/recipes-core/glibc/glibc-ld.inc:47
#     "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64',
'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
# pre-expansion value:
#   "${@glibc_dl_info(d)['lddrewrite']}"
RTLDLIST=""
#

# $RTLDLIST_class-nativesdk
#   set /workdir/repo/poky/meta/recipes-core/glibc/glibc-ld.inc:47
#     "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64',
'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
RTLDLIST_class-nativesdk="/lib/ld-linux-x86-64.so.2"


I have just upgraded my work build to 19.0.1 / 2.5.1 Let me build ldd
again to see if the problem still persists

> Cheers,
>
> Richard



-- 
Ricardo Ribalda



More information about the Openembedded-core mailing list