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

Richard Purdie richard.purdie at linuxfoundation.org
Wed Aug 3 12:25:41 UTC 2011


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







More information about the Openembedded-core mailing list