[OE-core] [RFC BUG #1236 2/2] eglibc: Modify ldd script according to multilib config.

Lu, Lianhao lianhao.lu at intel.com
Mon Aug 1 02:33:33 UTC 2011


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






More information about the Openembedded-core mailing list