]> code.ossystems Code Review - openembedded-core.git/commitdiff
glibc: improve reproducibility with multilib
authorHongxu Jia <hongxu.jia@windriver.com>
Thu, 6 Dec 2018 08:56:15 +0000 (16:56 +0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 8 Dec 2018 17:16:55 +0000 (17:16 +0000)
Multilib builds specify several loaders which will end up embedded in
some binaries or script files. To support reproducible builds, we must
ensure the loaders are always in deterministic order.

[YOCTO #2655]
[YOCTO #12478]
[YOCTO #12480]

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Improve the fix and rebase it to 2.28

Here is the log of lib32-glibc
[log.do_compile]
|Adjust ldd script
|ldd "/lib64/ld-linux-x86-64.so.2 /lib/ld-linux.so.2 /lib/ld-linux.so.2
/lib64/ld-linux-x86-64.so.2" -> "/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2"
[log.do_compile]

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-core/glibc/glibc-ld.inc
meta/recipes-core/glibc/glibc_2.28.bb

index bb167b32bc5396d040f16304d202f429de3bbd04..041ffbb9cb78a36cc7995ff55d587c5802d94f5d 100644 (file)
@@ -10,8 +10,8 @@ def glibc_dl_info(d):
         infos['ldconfig'].add('{"' + loader + '",' + "FLAG_ELF_LIBC6" + ' }')
         infos['lddrewrite'].add(loader)
 
-    infos['ldconfig'] = ','.join(infos['ldconfig'])
-    infos['lddrewrite'] = ' '.join(infos['lddrewrite'])
+    infos['ldconfig'] = ','.join(sorted(infos['ldconfig']))
+    infos['lddrewrite'] = ' '.join(sorted(infos['lddrewrite']))
     return infos
 
 EGLIBC_KNOWN_INTERPRETER_NAMES = "${@glibc_dl_info(d)['ldconfig']}"
index d07293925472699e10e615f03273cae62ac8efe0..a107c58b9fa6a5db6f60ca6d998208d1543c9006 100644 (file)
@@ -122,10 +122,10 @@ do_compile () {
        if [ -n "${RTLDLIST}" ]
        then
                prevrtld=`cat ${B}/elf/ldd | grep "^RTLDLIST=" | sed 's#^RTLDLIST="\?\([^"]*\)"\?$#\1#'`
-               if [ "${prevrtld}" != "${RTLDLIST}" ]
-               then
-                       sed -i ${B}/elf/ldd -e "s#^RTLDLIST=.*\$#RTLDLIST=\"${prevrtld} ${RTLDLIST}\"#"
-               fi
+               # remove duplicate entries
+               newrtld=`echo $(printf '%s\n' ${prevrtld} ${RTLDLIST} | LC_ALL=C sort -u)`
+               echo "ldd \"${prevrtld} ${RTLDLIST}\" -> \"${newrtld}\""
+               sed -i ${B}/elf/ldd -e "s#^RTLDLIST=.*\$#RTLDLIST=\"${newrtld}\"#"
        fi
 
 }