* [PATCH 0/3] Unify ldd/ldconfig for all multilib eglibcs for bug #1236
@ 2011-08-02 3:20 Lianhao Lu
2011-08-02 3:20 ` [PATCH 1/3] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Lianhao Lu @ 2011-08-02 3:20 UTC (permalink / raw)
To: openembedded-core
This is a rebase of the original patches to oe-core branch instead of poky.
This series of patch allow all the eglibc(s) in the current multilib
configuration have the same ldd/ldconfig settings.
We put the dynamic loaders'(ld.so) names in the dictionary of "ld_info_all"
defined in the file eglibc-ld.inc. This dictionary is indexed by the
TUNENAME. To support a new ABI, new entry should be added into this
dictionary along with the new ABI's TUNENAME.
The information in ld_info_all can be used for both ldd script and ldconfig
binary.
The following changes since commit 2a41a311ddda11713296391050f3c2c1b2c1d3d3:
Koen Kooi (1):
arch-armv7a.inc: fix armv7a-vfp-neon -> armv7a compat case
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib llu/bug1236-oecore
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=llu/bug1236-oecore
Lianhao Lu (3):
utils.bbclass/multilib.conf: Added misc supporting functions.
eglibc: Modify ldd script according to multilib config.
eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig.
meta/classes/utils.bbclass | 31 ++++++++++++
meta/conf/bitbake.conf | 1 +
meta/conf/multilib.conf | 6 ++-
.../eglibc/eglibc-2.13/multilib_readlib.patch | 20 ++++++++
meta/recipes-core/eglibc/eglibc-ld.inc | 49 ++++++++++++++++++++
meta/recipes-core/eglibc/eglibc.inc | 1 +
meta/recipes-core/eglibc/eglibc_2.13.bb | 12 ++++-
7 files changed, 118 insertions(+), 2 deletions(-)
create mode 100644 meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch
create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/3] utils.bbclass/multilib.conf: Added misc supporting functions.
2011-08-02 3:20 [PATCH 0/3] Unify ldd/ldconfig for all multilib eglibcs for bug #1236 Lianhao Lu
@ 2011-08-02 3:20 ` Lianhao Lu
2011-08-02 3:20 ` [PATCH 2/3] eglibc: Modify ldd script according to multilib config Lianhao Lu
2011-08-02 3:20 ` [PATCH 3/3] eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig Lianhao Lu
2 siblings, 0 replies; 4+ messages in thread
From: Lianhao Lu @ 2011-08-02 3:20 UTC (permalink / raw)
To: openembedded-core
1. Added variable MULTILIB_VARIANTS to store all the instance variants
for multilib extend.
2. Added function all_multilib_tune_values to collect the variable
values for all multilib instance.
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
---
meta/classes/utils.bbclass | 35 +++++++++++++++++++++++++++++++++++
meta/conf/bitbake.conf | 1 +
meta/conf/multilib.conf | 6 +++++-
3 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/meta/classes/utils.bbclass b/meta/classes/utils.bbclass
index 8c3a9b8..f8adaea 100644
--- a/meta/classes/utils.bbclass
+++ b/meta/classes/utils.bbclass
@@ -341,3 +341,38 @@ def base_set_filespath(path, d):
for o in overrides.split(":"):
filespath.append(os.path.join(p, o))
return ":".join(filespath)
+
+def extend_variants(d, var, extend, delim=':'):
+ """Return a string of all bb class extend variants for the given extend"""
+ variants = []
+ whole = d.getVar(var, True) or ""
+ for ext in whole.split():
+ eext = ext.split(delim)
+ if len(eext) > 1 and eext[0] == extend:
+ variants.append(eext[1])
+ return " ".join(variants)
+
+def all_multilib_tune_values(d, var, unique=True):
+ """Return a string of all ${var} in all multilib tune configuration"""
+ values = []
+ value = d.getVar(var, True) or ""
+ if value != "":
+ values.append(value)
+ variants = d.getVar("MULTILIB_VARIANTS", True) or ""
+ for item in variants.split():
+ localdata = bb.data.createCopy(d)
+ #Fix ME. OVERRIDES not work, we have to set DEFAULTTUNE to TUNENAME
+ #overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item
+ #localdata.setVar("OVERRIDES", overrides)
+ if localdata.getVar("BBEXTENDVARIANT", True) == item:
+ tunename=localdata.getVar("TUNENAME", False) or ""
+ else:
+ tunename=localdata.getVar("TUNENAME_virtclass-multilib-" + item, False) or ""
+ if tunename != "":
+ localdata.setVar("DEFAULTTUNE", tunename)
+ value = localdata.getVar(var, True) or ""
+ if value != "":
+ values.append(value)
+ if unique:
+ values = set(values)
+ return " ".join(values)
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 9c80f11..491f30a 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -735,3 +735,4 @@ BB_HASHTASK_WHITELIST ?= "(.*-cross$|.*-native$|.*-cross-initial$|.*-cross-inter
BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM USER FILESPATH USERNAME STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE"
MLPREFIX ??= ""
+MULTILIB_VARIANTS ??= ""
diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf
index 894b7a5..60760df 100644
--- a/meta/conf/multilib.conf
+++ b/meta/conf/multilib.conf
@@ -1,6 +1,11 @@
baselib = "${@d.getVar('BASE_LIB_tune-' + (d.getVar('DEFAULTTUNE', True) or 'INVALID'), True) or 'lib'}"
+MULTILIB_VARIANTS = "${@extend_variants(d,'MULTILIBS','multilib')}"
+
+TUNENAME_virtclass-multilib-lib64 ?= "x86-64"
+TUNENAME_virtclass-multilib-lib32 ?= "x86"
+
MULTILIBS ??= "multilib:lib32"
BBCLASSEXTEND_append_pn-linux-libc-headers = " ${MULTILIBS}"
BBCLASSEXTEND_append_pn-eglibc-initial = " ${MULTILIBS}"
@@ -21,4 +26,3 @@ BBCLASSEXTEND_append_pn-bash = " ${MULTILIBS}"
BBCLASSEXTEND_append_pn-ncurses = " ${MULTILIBS}"
BBCLASSEXTEND_append_pn-expat = " ${MULTILIBS}"
BBCLASSEXTEND_append_pn-eglibc-locale = " ${MULTILIBS}"
-
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] eglibc: Modify ldd script according to multilib config.
2011-08-02 3:20 [PATCH 0/3] Unify ldd/ldconfig for all multilib eglibcs for bug #1236 Lianhao Lu
2011-08-02 3:20 ` [PATCH 1/3] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu
@ 2011-08-02 3:20 ` Lianhao Lu
2011-08-02 3:20 ` [PATCH 3/3] eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig Lianhao Lu
2 siblings, 0 replies; 4+ messages in thread
From: Lianhao Lu @ 2011-08-02 3:20 UTC (permalink / raw)
To: openembedded-core
Part fix of [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.
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
---
meta/classes/utils.bbclass | 10 ++----
meta/recipes-core/eglibc/eglibc-ld.inc | 49 +++++++++++++++++++++++++++++++
meta/recipes-core/eglibc/eglibc.inc | 1 +
meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++-
4 files changed, 58 insertions(+), 8 deletions(-)
create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc
diff --git a/meta/classes/utils.bbclass b/meta/classes/utils.bbclass
index f8adaea..ef4d8fb 100644
--- a/meta/classes/utils.bbclass
+++ b/meta/classes/utils.bbclass
@@ -361,13 +361,9 @@ def all_multilib_tune_values(d, var, unique=True):
variants = d.getVar("MULTILIB_VARIANTS", True) or ""
for item in variants.split():
localdata = bb.data.createCopy(d)
- #Fix ME. OVERRIDES not work, we have to set DEFAULTTUNE to TUNENAME
- #overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item
- #localdata.setVar("OVERRIDES", overrides)
- if localdata.getVar("BBEXTENDVARIANT", True) == item:
- tunename=localdata.getVar("TUNENAME", False) or ""
- else:
- tunename=localdata.getVar("TUNENAME_virtclass-multilib-" + item, False) or ""
+ overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item
+ localdata.setVar("OVERRIDES", overrides)
+ tunename=localdata.getVar("TUNENAME_virtclass-multilib-" + item, False) or localdata.getVar("TUNENAME", False) or ""
if tunename != "":
localdata.setVar("DEFAULTTUNE", tunename)
value = localdata.getVar(var, True) or ""
diff --git a/meta/recipes-core/eglibc/eglibc-ld.inc b/meta/recipes-core/eglibc/eglibc-ld.inc
new file mode 100644
index 0000000..235ba6c
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-ld.inc
@@ -0,0 +1,49 @@
+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)
+ 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)
+ tunename=localdata.getVar("TUNENAME_virtclass-multilib-" + item, False) or localdata.getVar("TUNENAME", False) or ""
+ if tunename != "":
+ localdata.setVar("DEFAULTTUNE", tunename)
+ 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']}"
diff --git a/meta/recipes-core/eglibc/eglibc.inc b/meta/recipes-core/eglibc/eglibc.inc
index 1b2e630..0ed4359 100644
--- a/meta/recipes-core/eglibc/eglibc.inc
+++ b/meta/recipes-core/eglibc/eglibc.inc
@@ -1,4 +1,5 @@
require eglibc-common.inc
+require eglibc-ld.inc
STAGINGCC = "gcc-cross-intermediate"
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
diff --git a/meta/recipes-core/eglibc/eglibc_2.13.bb b/meta/recipes-core/eglibc/eglibc_2.13.bb
index 41fe7c7..b1bfbf1 100644
--- a/meta/recipes-core/eglibc/eglibc_2.13.bb
+++ b/meta/recipes-core/eglibc/eglibc_2.13.bb
@@ -3,7 +3,7 @@ require eglibc.inc
SRCREV = "14157"
DEPENDS += "gperf-native"
-PR = "r9"
+PR = "r10"
PR_append = "+svnr${SRCPV}"
EGLIBC_BRANCH="eglibc-2_13"
@@ -199,6 +199,10 @@ do_compile () {
rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
done
)
+
+ echo "Adjust dynamic loader list to ${EGLIBC_DYNAMIC_LOADERS}"
+ [ -z "${RTLDLIST}" ] && return
+ sed -i ${B}/elf/ldd -e 's#^\(RTLDLIST=\).*$#\1"${RTLDLIST}"#'
}
require eglibc-package.inc
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig.
2011-08-02 3:20 [PATCH 0/3] Unify ldd/ldconfig for all multilib eglibcs for bug #1236 Lianhao Lu
2011-08-02 3:20 ` [PATCH 1/3] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu
2011-08-02 3:20 ` [PATCH 2/3] eglibc: Modify ldd script according to multilib config Lianhao Lu
@ 2011-08-02 3:20 ` Lianhao Lu
2 siblings, 0 replies; 4+ messages in thread
From: Lianhao Lu @ 2011-08-02 3:20 UTC (permalink / raw)
To: openembedded-core
[YOCTO #1236] Part of the bug fixing. Set the correct ld.so names for
ldconfig to deal with the multilib configuration.
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
---
.../eglibc/eglibc-2.13/multilib_readlib.patch | 20 ++++++++++++++++++++
meta/recipes-core/eglibc/eglibc_2.13.bb | 8 +++++++-
2 files changed, 27 insertions(+), 1 deletions(-)
create mode 100644 meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch
diff --git a/meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch b/meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch
new file mode 100644
index 0000000..3ebcc6b
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch
@@ -0,0 +1,20 @@
+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.orgin 2011-08-01 15:24:59.054350012 +0800
++++ libc/elf/readlib.c 2011-08-01 18:10:59.777675546 +0800
+@@ -49,9 +49,7 @@
+ static struct known_names interpreters[] =
+ {
+ { "/lib/" LD_SO, FLAG_ELF_LIBC6 },
+-#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES
+- SYSDEP_KNOWN_INTERPRETER_NAMES
+-#endif
++ OECORE_KNOWN_INTERPRETER_NAMES
+ };
+
+ static struct known_names known_libs[] =
diff --git a/meta/recipes-core/eglibc/eglibc_2.13.bb b/meta/recipes-core/eglibc/eglibc_2.13.bb
index b1bfbf1..60f6a74 100644
--- a/meta/recipes-core/eglibc/eglibc_2.13.bb
+++ b/meta/recipes-core/eglibc/eglibc_2.13.bb
@@ -3,7 +3,7 @@ require eglibc.inc
SRCREV = "14157"
DEPENDS += "gperf-native"
-PR = "r10"
+PR = "r11"
PR_append = "+svnr${SRCPV}"
EGLIBC_BRANCH="eglibc-2_13"
@@ -16,6 +16,7 @@ SRC_URI = "svn://www.eglibc.org/svn/branches/;module=${EGLIBC_BRANCH};proto=http
file://etc/ld.so.conf \
file://generate-supported.mk \
file://glibc_bug_fix_12454.patch \
+ file://multilib_readlib.patch \
"
LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \
file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \
@@ -81,6 +82,7 @@ do_move_ports() {
do_patch_append() {
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
@@ -170,6 +172,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
}
+do_fix_readlib_c () {
+ sed -i -e 's#OECORE_KNOWN_INTERPRETER_NAMES#${EGLIBC_KNOWN_INTERPRETER_NAMES}#' ${S}/elf/readlib.c
+}
+
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
# calls for now
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-08-02 3:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-02 3:20 [PATCH 0/3] Unify ldd/ldconfig for all multilib eglibcs for bug #1236 Lianhao Lu
2011-08-02 3:20 ` [PATCH 1/3] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu
2011-08-02 3:20 ` [PATCH 2/3] eglibc: Modify ldd script according to multilib config Lianhao Lu
2011-08-02 3:20 ` [PATCH 3/3] eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig Lianhao Lu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.