[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