mirror of
https://git.yoctoproject.org/poky
synced 2026-06-02 13:29:49 +00:00
eglibc: Modify ldd script according to multilib config.
Bug fixing [YOCTO #1236]. 1. Collect all the values for RTLDLIST for the current multilib configuration to modify the ldd scripts. 2. Collect all the values for KNOWN_INTERPRETER_NAMES for the current multilib configuration. Set the correct ld.so names for ldconfig to deal with the multilib configuration. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
375cf1561c
commit
fb2dfe7ac8
@@ -0,0 +1,17 @@
|
|||||||
|
Upstream-Status: Inappropriate [embedded specific]
|
||||||
|
|
||||||
|
Replace the OECORE_KNOWN_INTERPRETER_NAMES with the value of
|
||||||
|
variable EGLIBC_KNOWN_INTERPRETER_NAMES.
|
||||||
|
|
||||||
|
Lianhao Lu, 08/01/2011
|
||||||
|
|
||||||
|
--- libc/elf/readlib.c.orig 2011-08-12 17:05:51.864470837 +0800
|
||||||
|
+++ libc/elf/readlib.c 2011-08-12 17:06:39.346942074 +0800
|
||||||
|
@@ -52,6 +52,7 @@
|
||||||
|
#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES
|
||||||
|
SYSDEP_KNOWN_INTERPRETER_NAMES
|
||||||
|
#endif
|
||||||
|
+ OECORE_KNOWN_INTERPRETER_NAMES
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct known_names known_libs[] =
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
def ld_append_if_tune_exists(d, infos, dict):
|
||||||
|
tune = d.getVar("DEFAULTTUNE", True) or ""
|
||||||
|
libdir = d.getVar("base_libdir", True) or ""
|
||||||
|
if dict.has_key(tune):
|
||||||
|
infos['ldconfig'].add('{"' + libdir + '/' + dict[tune][0] + '",' + dict[tune][1] + ' }')
|
||||||
|
infos['lddrewrite'].add(libdir+'/'+dict[tune][0])
|
||||||
|
|
||||||
|
def eglibc_dl_info(d):
|
||||||
|
ld_info_all = {
|
||||||
|
"mips": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64-n32": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mipsel": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64el-n32": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64el": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips-nf": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64-nf-n32": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64-nf": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64el-nf-n32": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"mips64el-nf": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"powerpc": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"powerpc-nf": ["ld.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"powerpc64": ["ld64.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"powerpc64-nf": ["ld64.so.1", "FLAG_ELF_LIBC6"],
|
||||||
|
"core2": ["ld-linux.so.2", "FLAG_ELF_LIBC6"],
|
||||||
|
"core2-64": ["ld-linux-x86-64.so.2", "FLAG_ELF_LIBC6"],
|
||||||
|
"x86": ["ld-linux.so.2", "FLAG_ELF_LIBC6"],
|
||||||
|
"x86-64": ["ld-linux-x86-64.so.2", "FLAG_ELF_LIBC6"],
|
||||||
|
"i586": ["ld-linux.so.2", "FLAG_ELF_LIBC6"],
|
||||||
|
}
|
||||||
|
|
||||||
|
infos = {'ldconfig':set(), 'lddrewrite':set()}
|
||||||
|
ld_append_if_tune_exists(d, infos, ld_info_all)
|
||||||
|
|
||||||
|
#DEFAULTTUNE_MULTILIB_ORIGINAL
|
||||||
|
original_tune=d.getVar("DEFAULTTUNE_MULTILIB_ORIGINAL",True)
|
||||||
|
if original_tune:
|
||||||
|
localdata = bb.data.createCopy(d)
|
||||||
|
localdata.setVar("DEFAULTTUNE", original_tune)
|
||||||
|
ld_append_if_tune_exists(localdata, infos, ld_info_all)
|
||||||
|
|
||||||
|
variants = d.getVar("MULTILIB_VARIANTS", True) or ""
|
||||||
|
for item in variants.split():
|
||||||
|
localdata = bb.data.createCopy(d)
|
||||||
|
overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item
|
||||||
|
localdata.setVar("OVERRIDES", overrides)
|
||||||
|
bb.data.update_data(localdata)
|
||||||
|
ld_append_if_tune_exists(localdata, infos, ld_info_all)
|
||||||
|
infos['ldconfig'] = ','.join(infos['ldconfig'])
|
||||||
|
infos['lddrewrite'] = ' '.join(infos['lddrewrite'])
|
||||||
|
return infos
|
||||||
|
|
||||||
|
EGLIBC_KNOWN_INTERPRETER_NAMES = "${@eglibc_dl_info(d)['ldconfig']}"
|
||||||
|
RTLDLIST = "${@eglibc_dl_info(d)['lddrewrite']}"
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
require eglibc-common.inc
|
require eglibc-common.inc
|
||||||
|
require eglibc-ld.inc
|
||||||
|
|
||||||
STAGINGCC = "gcc-cross-intermediate"
|
STAGINGCC = "gcc-cross-intermediate"
|
||||||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
|
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ require eglibc.inc
|
|||||||
SRCREV = "14157"
|
SRCREV = "14157"
|
||||||
|
|
||||||
DEPENDS += "gperf-native"
|
DEPENDS += "gperf-native"
|
||||||
PR = "r12"
|
PR = "r13"
|
||||||
PR_append = "+svnr${SRCPV}"
|
PR_append = "+svnr${SRCPV}"
|
||||||
|
|
||||||
EGLIBC_BRANCH="eglibc-2_13"
|
EGLIBC_BRANCH="eglibc-2_13"
|
||||||
@@ -18,6 +18,7 @@ SRC_URI = "svn://www.eglibc.org/svn/branches/;module=${EGLIBC_BRANCH};proto=http
|
|||||||
file://generate-supported.mk \
|
file://generate-supported.mk \
|
||||||
file://glibc_bug_fix_12454.patch \
|
file://glibc_bug_fix_12454.patch \
|
||||||
file://ppc-sqrt.patch \
|
file://ppc-sqrt.patch \
|
||||||
|
file://multilib_readlib.patch \
|
||||||
"
|
"
|
||||||
LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \
|
LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \
|
||||||
file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \
|
file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \
|
||||||
@@ -83,6 +84,7 @@ do_move_ports() {
|
|||||||
|
|
||||||
do_patch_append() {
|
do_patch_append() {
|
||||||
bb.build.exec_func('do_fix_ia_headers', d)
|
bb.build.exec_func('do_fix_ia_headers', d)
|
||||||
|
bb.build.exec_func('do_fix_readlib_c', d)
|
||||||
}
|
}
|
||||||
|
|
||||||
# We need to ensure that all of the i386 and x86_64 headers are identical
|
# We need to ensure that all of the i386 and x86_64 headers are identical
|
||||||
@@ -172,6 +174,10 @@ do_fix_ia_headers() {
|
|||||||
cp ${S}/sysdeps/unix/sysv/linux/x86_64/sys/user.h ${S}/sysdeps/unix/sysv/linux/i386/sys/user.h
|
cp ${S}/sysdeps/unix/sysv/linux/x86_64/sys/user.h ${S}/sysdeps/unix/sysv/linux/i386/sys/user.h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_fix_readlib_c () {
|
||||||
|
sed -i -e 's#OECORE_KNOWN_INTERPRETER_NAMES#${EGLIBC_KNOWN_INTERPRETER_NAMES}#' ${S}/elf/readlib.c
|
||||||
|
}
|
||||||
|
|
||||||
do_configure () {
|
do_configure () {
|
||||||
# override this function to avoid the autoconf/automake/aclocal/autoheader
|
# override this function to avoid the autoconf/automake/aclocal/autoheader
|
||||||
# calls for now
|
# calls for now
|
||||||
@@ -201,6 +207,11 @@ do_compile () {
|
|||||||
rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
|
rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
|
||||||
done
|
done
|
||||||
)
|
)
|
||||||
|
echo "Adjust ldd script"
|
||||||
|
[ -z "${RTLDLIST}" ] && return
|
||||||
|
sed -i ${B}/elf/ldd -e 's#^\(RTLDLIST=\)"\(.*\)"$#\1\2#'
|
||||||
|
sed -i ${B}/elf/ldd -e 's#^\(RTLDLIST=\)\(.*\)$#\1"${RTLDLIST} \2"#'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
require eglibc-package.inc
|
require eglibc-package.inc
|
||||||
|
|||||||
Reference in New Issue
Block a user