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

richard.purdie at linuxfoundation.org richard.purdie at linuxfoundation.org
Wed Aug 22 13:37:49 UTC 2018


On Wed, 2018-08-22 at 15:33 +0200, Ricardo Ribalda Delgado wrote:
> Hello
> On Wed, Aug 22, 2018 at 3:28 PM Ricardo Ribalda Delgado
> <ricardo.ribalda at gmail.com> wrote:
> > 
> > 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
> 
> 19.0.1 gives the same results as 19.0.0
> 
> 
> RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2
> /libx32/ld-linux-x32.so.

I just looked at what the function is doing and its broken. What is
DEFAULTTUNE set to in your build?

Cheers,

Richard



More information about the Openembedded-core mailing list