* [RFC BUG #1236 0/2] Modify ldd script for multilib.
@ 2011-07-29 14:57 Lianhao Lu
2011-07-29 14:57 ` [RFC BUG #1236 1/2] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu
2011-07-29 14:57 ` [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config Lianhao Lu
0 siblings, 2 replies; 8+ messages in thread
From: Lianhao Lu @ 2011-07-29 14:57 UTC (permalink / raw)
To: openembedded-core
This is part of the BUG #1236 fixing. Current there seems no way to get the
dynamic loader(ld.so) names for all the ABIs configured in the multilib
configuration during runtime. So we put the ld.so names in the dictionary
"ld_info_all" 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 the
KNOWN_INTERPRETER_NAMES in the file ldconfig.h (which has not been done yet).
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 llub/bug1236
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=llu/1236
Lianhao Lu (2):
utils.bbclass/multilib.conf: Added misc supporting functions.
eglibc: Modify ldd script according to multilib config.
meta/classes/utils.bbclass | 35 ++++++++++++++++++++
meta/conf/bitbake.conf | 1 +
meta/conf/multilib.conf | 6 +++-
meta/recipes-core/eglibc/eglibc-ld.inc | 53 +++++++++++++++++++++++++++++++
meta/recipes-core/eglibc/eglibc.inc | 1 +
meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++-
6 files changed, 100 insertions(+), 2 deletions(-)
create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc
^ permalink raw reply [flat|nested] 8+ messages in thread* [RFC BUG #1236 1/2] utils.bbclass/multilib.conf: Added misc supporting functions. 2011-07-29 14:57 [RFC BUG #1236 0/2] Modify ldd script for multilib Lianhao Lu @ 2011-07-29 14:57 ` Lianhao Lu 2011-07-29 14:57 ` [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config Lianhao Lu 1 sibling, 0 replies; 8+ messages in thread From: Lianhao Lu @ 2011-07-29 14:57 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 6e109ec..bcff50e 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -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 ??= "" 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] 8+ messages in thread
* [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-07-29 14:57 [RFC BUG #1236 0/2] Modify ldd script for multilib Lianhao Lu 2011-07-29 14:57 ` [RFC BUG #1236 1/2] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu @ 2011-07-29 14:57 ` Lianhao Lu 2011-07-29 15:38 ` Phil Blundell 2011-07-30 20:04 ` Khem Raj 1 sibling, 2 replies; 8+ messages in thread From: Lianhao Lu @ 2011-07-29 14:57 UTC (permalink / raw) To: openembedded-core 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. Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> --- meta/recipes-core/eglibc/eglibc-ld.inc | 53 +++++++++++++++++++++++++++++++ meta/recipes-core/eglibc/eglibc.inc | 1 + meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++- 3 files changed, 59 insertions(+), 1 deletions(-) create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc diff --git a/meta/recipes-core/eglibc/eglibc-ld.inc b/meta/recipes-core/eglibc/eglibc-ld.inc new file mode 100644 index 0000000..ad60964 --- /dev/null +++ b/meta/recipes-core/eglibc/eglibc-ld.inc @@ -0,0 +1,53 @@ +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_LIBC5"], + "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) + #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) + ld_append_if_tune_exists(localdata, infos, ld_info_all) + + infos['ldconfig'] = ' '.join(infos['ldconfig']) + infos['lddrewrite'] = ' '.join(infos['lddrewrite']) + return infos + +ALL_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] 8+ messages in thread
* Re: [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-07-29 14:57 ` [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config Lianhao Lu @ 2011-07-29 15:38 ` Phil Blundell 2011-07-30 1:00 ` Lu, Lianhao 2011-07-30 20:04 ` Khem Raj 1 sibling, 1 reply; 8+ messages in thread From: Phil Blundell @ 2011-07-29 15:38 UTC (permalink / raw) To: Patches and discussions about the oe-core layer On Fri, 2011-07-29 at 22:57 +0800, Lianhao Lu wrote: > + "x86": ["ld-linux.so.2", "FLAG_ELF_LIBC5"], That looks a bit weird to me. Are you sure that's right? p. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-07-29 15:38 ` Phil Blundell @ 2011-07-30 1:00 ` Lu, Lianhao 0 siblings, 0 replies; 8+ messages in thread From: Lu, Lianhao @ 2011-07-30 1:00 UTC (permalink / raw) To: Patches and discussions about the oe-core layer > -----Original Message----- > From: openembedded-core-bounces@lists.openembedded.org > [mailto:openembedded-core-bounces@lists.openembedded.org] On Behalf Of > Phil Blundell > Sent: Friday, July 29, 2011 11:38 PM > To: Patches and discussions about the oe-core layer > Subject: Re: [OE-core] [RFC BUG #1236 2/2] eglibc: Modify ldd script according > to multilib config. > > On Fri, 2011-07-29 at 22:57 +0800, Lianhao Lu wrote: > > + "x86": ["ld-linux.so.2", "FLAG_ELF_LIBC5"], > > That looks a bit weird to me. Are you sure that's right? > Oops, it should be FLAG_ELF_LIBC6. -Lianhao ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-07-29 14:57 ` [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config Lianhao Lu 2011-07-29 15:38 ` Phil Blundell @ 2011-07-30 20:04 ` Khem Raj 2011-08-01 2:33 ` Lu, Lianhao 1 sibling, 1 reply; 8+ messages in thread From: Khem Raj @ 2011-07-30 20:04 UTC (permalink / raw) To: Patches and discussions about the oe-core layer On Friday, July 29, 2011 10:57:27 PM Lianhao Lu wrote: > 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. why is this needed ? eglibc build system has mechanism to emit correct ld.so names into RTLDLIST. If its missing something then it should be fixed in eglibc. This list will require to be maintained all the time weather you add a new architecture or ld.so is revved up > > Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> > --- > meta/recipes-core/eglibc/eglibc-ld.inc | 53 > +++++++++++++++++++++++++++++++ meta/recipes-core/eglibc/eglibc.inc | > 1 + > meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++- > 3 files changed, 59 insertions(+), 1 deletions(-) > create mode 100644 meta/recipes-core/eglibc/eglibc-ld.inc > > diff --git a/meta/recipes-core/eglibc/eglibc-ld.inc > b/meta/recipes-core/eglibc/eglibc-ld.inc new file mode 100644 > index 0000000..ad60964 > --- /dev/null > +++ b/meta/recipes-core/eglibc/eglibc-ld.inc > @@ -0,0 +1,53 @@ > +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_LIBC5"], > + "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) > + #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) > + ld_append_if_tune_exists(localdata, infos, ld_info_all) > + > + infos['ldconfig'] = ' '.join(infos['ldconfig']) > + infos['lddrewrite'] = ' '.join(infos['lddrewrite']) > + return infos > + > +ALL_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 -- Khem Raj ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-07-30 20:04 ` Khem Raj @ 2011-08-01 2:33 ` Lu, Lianhao 2011-08-01 6:11 ` Khem Raj 0 siblings, 1 reply; 8+ messages in thread From: Lu, Lianhao @ 2011-08-01 2:33 UTC (permalink / raw) To: Patches and discussions about the oe-core layer Khem Raj wrote on 2011-07-31: > On Friday, July 29, 2011 10:57:27 PM Lianhao Lu wrote: >> 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. > > why is this needed ? eglibc build system has mechanism to emit > correct ld.so names into RTLDLIST. If its missing something then it should be fixed in eglibc. > This list will require to be maintained all the time weather you add a > new architecture or ld.so is revved up This is because we want the ldd/ldconfig in each eglibc can work on all the ABIs included in the current multilib configuration. -Lianhao >> >> Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> >> --- >> meta/recipes-core/eglibc/eglibc-ld.inc | 53 >> +++++++++++++++++++++++++++++++ meta/recipes-core/eglibc/eglibc.inc > | >> 1 + >> meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++- >> 3 files changed, 59 insertions(+), 1 deletions(-) create mode >> 100644 meta/recipes-core/eglibc/eglibc-ld.inc >> >> diff --git a/meta/recipes-core/eglibc/eglibc-ld.inc >> b/meta/recipes-core/eglibc/eglibc-ld.inc new file mode 100644 index >> 0000000..ad60964 --- /dev/null +++ >> b/meta/recipes-core/eglibc/eglibc-ld.inc @@ -0,0 +1,53 @@ +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_LIBC5"], + "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) + #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) >> + ld_append_if_tune_exists(localdata, infos, ld_info_all) >> + >> + infos['ldconfig'] = ' '.join(infos['ldconfig']) >> + infos['lddrewrite'] = ' '.join(infos['lddrewrite']) >> + return infos >> + >> +ALL_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 Best Regards, Lianhao ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config. 2011-08-01 2:33 ` Lu, Lianhao @ 2011-08-01 6:11 ` Khem Raj 0 siblings, 0 replies; 8+ messages in thread From: Khem Raj @ 2011-08-01 6:11 UTC (permalink / raw) To: Patches and discussions about the oe-core layer Cc: Patches and discussions about the oe-core layer On Jul 31, 2011, at 7:33 PM, "Lu, Lianhao" <lianhao.lu@intel.com> wrote: > Khem Raj wrote on 2011-07-31: >> On Friday, July 29, 2011 10:57:27 PM Lianhao Lu wrote: >>> 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. >> >> why is this needed ? eglibc build system has mechanism to emit >> correct ld.so names into RTLDLIST. If its missing something then it should be fixed in eglibc. >> This list will require to be maintained all the time weather you add a >> new architecture or ld.so is revved up > > This is because we want the ldd/ldconfig in each eglibc can work on all the ABIs included in the current multilib configuration. Why not have the default multi lib only provide ldd ? Optional multilibs may not provide ldd Is there something that needs ldd/ldconfig to be present in each. Multilibs > > -Lianhao > >>> >>> Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> >>> --- >>> meta/recipes-core/eglibc/eglibc-ld.inc | 53 >>> +++++++++++++++++++++++++++++++ meta/recipes-core/eglibc/eglibc.inc >> | >>> 1 + >>> meta/recipes-core/eglibc/eglibc_2.13.bb | 6 +++- >>> 3 files changed, 59 insertions(+), 1 deletions(-) create mode >>> 100644 meta/recipes-core/eglibc/eglibc-ld.inc >>> >>> diff --git a/meta/recipes-core/eglibc/eglibc-ld.inc >>> b/meta/recipes-core/eglibc/eglibc-ld.inc new file mode 100644 index >>> 0000000..ad60964 --- /dev/null +++ >>> b/meta/recipes-core/eglibc/eglibc-ld.inc @@ -0,0 +1,53 @@ +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_LIBC5"], + "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) + #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) >>> + ld_append_if_tune_exists(localdata, infos, ld_info_all) >>> + >>> + infos['ldconfig'] = ' '.join(infos['ldconfig']) >>> + infos['lddrewrite'] = ' '.join(infos['lddrewrite']) >>> + return infos >>> + >>> +ALL_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 > > Best Regards, > Lianhao > > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-08-01 6:14 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-07-29 14:57 [RFC BUG #1236 0/2] Modify ldd script for multilib Lianhao Lu 2011-07-29 14:57 ` [RFC BUG #1236 1/2] utils.bbclass/multilib.conf: Added misc supporting functions Lianhao Lu 2011-07-29 14:57 ` [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config Lianhao Lu 2011-07-29 15:38 ` Phil Blundell 2011-07-30 1:00 ` Lu, Lianhao 2011-07-30 20:04 ` Khem Raj 2011-08-01 2:33 ` Lu, Lianhao 2011-08-01 6:11 ` Khem Raj
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox