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

Kumar Gala galak at kernel.crashing.org
Mon Aug 1 18:58:31 UTC 2011


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
}

- k



More information about the Openembedded-core mailing list