All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.