[OE-core] help with gcc-configure-common bug

Kumar Gala galak at kernel.crashing.org
Wed Aug 3 12:50:18 UTC 2011


On Aug 3, 2011, at 7:25 AM, Richard Purdie wrote:

> On Tue, 2011-08-02 at 10:36 -0500, Kumar Gala wrote:
>> On Aug 1, 2011, at 1:58 PM, Kumar Gala wrote:
>> 
>>> I'm trying to track down a bug related the following in gcc-configure-common.inc.  I know there is one bug in the sed line, but when I fix that I run into a second issue.  I'm trying to understand what we think the following two lines are trying to attempt:
>>> 
>>>       SYSTEMLIBS_DIR=`dirname ${SYSTEMLIBS}`
>>>       [ "$SYSTEMLIBS_DIR" = "/" ] && SYSTEMLIBS_DIR=""
>>> 
>>> any ideas?
>>> 
>>>> From the commit log we expect something like:
>>>       #define GLIBC_DYNAMIC_LINKER64 SYSTEMLIBS_DIR"/ld-linux-x86-64.so.2"
>>>       and we define SYSTEMLIBS_DIR in defaults.h.
>>> 
>>> so its seems if SYSTEMLIBS = 'lib', that we end up with:
>>> 	#define SYSTEMLIBS ""
>>> 
>>> and thus becomes:
>>> 	GLIBC_DYNAMIC_LINKER64 "ld-linux-x86-64.so.2"
>>> 
>>> which ends up being wrong.
>>> 
>>> - k
>>> 
>>> do_configure_prepend () {
>>>       # Change the default dynamic linker path, only useful for SDK, other's value
>>>       # are not changed according to the SYSTEMLIBS_DIR
>>>       sed -i ${S}/gcc/config/*/linux*.h -e \
>>>               's#\(GLIBC_DYNAMIC_LINKER[^ ]*\)\( *"/lib.*\)#\1 SYSTEMLIBS_DIR\2#'
>>> 
>>>       SYSTEMLIBS_DIR=`dirname ${SYSTEMLIBS}`
>>>       [ "$SYSTEMLIBS_DIR" = "/" ] && SYSTEMLIBS_DIR=""
>>>       # teach gcc to find correct target includedir when checking libc ssp support
>>>       mkdir -p ${B}/gcc
>>>       echo "NATIVE_SYSTEM_HEADER_DIR = ${SYSTEMHEADERS}" > ${B}/gcc/t-oe
>>>       cat ${S}/gcc/defaults.h | grep -v "\#endif.*GCC_DEFAULTS_H" > ${B}/gcc/defaults.h.new
>>>       cat >>${B}/gcc/defaults.h.new <<_EOF
>>> #ifndef STANDARD_INCLUDE_DIR
>>> #define STANDARD_INCLUDE_DIR "${SYSTEMHEADERS}"
>>> #endif
>>> #ifndef STANDARD_STARTFILE_PREFIX_1
>>> #define STANDARD_STARTFILE_PREFIX_1 "${SYSTEMLIBS}"
>>> #endif
>>> #ifndef STANDARD_STARTFILE_PREFIX_2
>>> #define STANDARD_STARTFILE_PREFIX_2 "${SYSTEMLIBS1}"
>>> #endif
>>> #define SYSTEMLIBS_DIR "$SYSTEMLIBS_DIR"
>>> #endif /* ! GCC_DEFAULTS_H */
>>> _EOF
>>>       mv ${B}/gcc/defaults.h.new ${B}/gcc/defaults.h
>>> }
>> 
>> Would really love if anyone knows what is suppose to be going on with SYSTEMLIBS_DIR to chime in here.
> 
> Ah, I can help here :)
> 
> We only have one gcc source checkout with the shared work directory.
> Each multilib (or sdk build) needs to customise SYSTEMLIBS depending on
> its configuration. This is why its being done in the defaults.h file in
> ${B} instead of files in ${S}.
> 
> We likely should do the substitutions in ${S} at unpack time to make
> this clearer.
> 
> Cheers,
> 
> Richard
> 

Post some patches to address this, so take a look.

- k



More information about the Openembedded-core mailing list