Skip to contentSkip to conversation

Unify ldd/ldconfig for all multilib eglibcs

PATCH In review Lianhao Lu 3 participants 7 messages Aug 1, 2011 – Aug 11, 2011

lore
Share & tools
lore

Lianhao Lu

author
#0 lore raw

cover Unify ldd/ldconfig for all multilib eglibcs

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 f94b781695cd8fa387daff16ecbf3987a0883018:
Bruce Ashfield (1):
poky.conf: explicitly referenced preferred linux-yocto version

are available in the git repository at:

git://git.pokylinux.org/poky-contrib llu/bug1236
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=llu/bug1236

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
author
#1 lore raw

PATCH 1/3 utils.bbclass/multilib.conf: Added misc supporting functions.

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.

---
 meta/classes/utils.bbclass |   35 +++++++++++++++++++++++++++++++++++
 meta/conf/bitbake.conf     |    1 +
 meta/conf/multilib.conf    |    6 +++++-
 3 files changed, 41 insertions(+), 1 deletions(-)
meta/classes/utils.bbclass +35 -0
index 8c3a9b8..f8adaea 100644
@@ -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)
meta/conf/bitbake.conf +1 -0
index 6e109ec..bcff50e 100644
@@ -736,3 +736,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 ??= ""
meta/conf/multilib.conf +5 -1
index 894b7a5..60760df 100644
@@ -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}"
-
Signature · 1 line
1.7.0.4
author
#2 lore raw

PATCH 2/3 eglibc: Modify ldd script according to multilib config.

Part fix of [BUGID #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.

---
 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
meta/classes/utils.bbclass +3 -7
index f8adaea..ef4d8fb 100644
@@ -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 ""
meta/recipes-core/eglibc/eglibc-ld.inc new file +49 -0

49 lines not on this page · raw message

meta/recipes-core/eglibc/eglibc.inc +1 -0
index 1b2e630..0ed4359 100644
@@ -1,4 +1,5 @@
 require eglibc-common.inc
+require eglibc-ld.inc
 
 STAGINGCC = "gcc-cross-intermediate"
 STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
meta/recipes-core/eglibc/eglibc_2.13.bb +5 -1
index 41fe7c7..b1bfbf1 100644
@@ -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
Signature · 1 line
1.7.0.4
#3 lore raw

Re: [PATCH BUG #1236 2/3] eglibc: Modify ldd script according to multilib config.

Quoted 2 lines · Lianhao Lu

Part fix of [BUGID #1236].

This should be [YOCTO #1236]

Quoted 125 lines

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.

---
  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

meta/classes/utils.bbclass +3 -7
index f8adaea..ef4d8fb 100644
@@ -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 ""
meta/recipes-core/eglibc/eglibc-ld.inc new file +49 -0
new file mode 100644
index 0000000..235ba6c
@@ -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']}"
meta/recipes-core/eglibc/eglibc.inc +1 -0
index 1b2e630..0ed4359 100644
@@ -1,4 +1,5 @@
  require eglibc-common.inc
+require eglibc-ld.inc
 
  STAGINGCC = "gcc-cross-intermediate"
  STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
meta/recipes-core/eglibc/eglibc_2.13.bb +5 -1
index 41fe7c7..b1bfbf1 100644
@@ -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
author
#4 lore raw

PATCH 3/3 eglibc: Setting KNOWN_INTERPRETER_NAMES for ldconfig.

In reply to Lianhao Lu

[BUGID #1236] Part of the bug fixing. Set the correct ld.so names for ldconfig to deal with the multilib configuration.

---
 .../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
meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch new file +20 -0
new file mode 100644
index 0000000..3ebcc6b
@@ -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[] =
meta/recipes-core/eglibc/eglibc_2.13.bb +7 -1
index b1bfbf1..60f6a74 100644
@@ -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
Signature · 1 line
1.7.0.4
#5 lore raw
In reply to Lianhao Lu

Op 1 aug. 2011, om 13:01 heeft Lianhao Lu het volgende geschreven:

Quoted 11 lines

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.

Quoted 8 lines

The following changes since commit f94b781695cd8fa387daff16ecbf3987a0883018:
Bruce Ashfield (1):
poky.conf: explicitly referenced preferred linux-yocto version

are available in the git repository at:

git://git.pokylinux.org/poky-contrib llu/bug1236
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=llu/bug1236

That branch is against poky, making it really hard for people to test the patches against the oe-core repo you're submitting it against. Please base patches against the oe-core repo when you send them to the oe-core mailinglist.

#6 lore raw
In reply to Lianhao Lu
Quoted 33 lines · Lianhao Lu

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 f94b781695cd8fa387daff16ecbf3987a0883018:
Bruce Ashfield (1):
poky.conf: explicitly referenced preferred linux-yocto version

are available in the git repository at:

   git://git.pokylinux.org/poky-contrib llu/bug1236
   http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=llu/bug1236

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(-)
Quoted 9 lines

create mode 100644 meta/recipes-core/eglibc/eglibc-2.13/multilib_readlib.patch create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc

_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Can you please rebase and test this and resend.

Thanks
Sau!