[OE-core] [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config.
Khem Raj
raj.khem at gmail.com
Mon Aug 1 06:11:09 UTC 2011
On Jul 31, 2011, at 7:33 PM, "Lu, Lianhao" <lianhao.lu at 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 at 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 at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list