[meta-freescale] [PATCH v3 5/7] valgrind: add bbappend for multilib support and override memcpy/memset

Otavio Salvador otavio.salvador at ossystems.com.br
Thu Aug 27 06:46:10 PDT 2015


On Mon, Aug 24, 2015 at 12:31 AM, Zhenhua Luo <zhenhua.luo at freescale.com> wrote:
> * Add bbappend for qoriq(except e500v2) to create a symbolic link as the
>   user expects to see a /usr/bin/valgrind on 64-bit MACHINE's, ensure that
>   the link created, points to the *64-bit* valgrind. Assume that the presence
>   of the patterns: "\-64b" in ${MACHINE} and "64" in ${TARGET_ARCH}, indicate
>   the 64-bit flavour and that their absence indicates 32-bit flavour respectively.
>   Now, when both 32-bit and 64-bit flavours are available to choose from; it
>   does happen that even though ${MACHINE} is chosen to indicate the choice of
>   the 32-bit case, the 64-bit tools are built too. So, ensure that on 32-bit,
>   the link points to the 32-bit valgrind, and of-course, that on 64-bit, the
>   link points to the 64-bit valgrind.
> * Override the 32-bit implementations of memcpy(), memset() from glibc.
>   On 64-bit platforms, for 32-bit mode, the Freescale optimized implementations
>   of the glibc functions memcpy(), memset() use POWER ISA Category:64-bit
>   instructions. By design, these are not implementatble in Valgrind in 32-bit
>   mode. Therefore, we override the library versions with plain classic POWER
>   32-bit alternate versions (emitted at -O0 by GCC).
> * Add COMPATIBLE_MACHINE
>
> Signed-off-by: Ting Liu <b28495 at freescale.com>
> Signed-off-by: Zhenhua Luo <zhenhua.luo at freescale.com>


If user is debugging memory in over 32bit space it will work?

...
> +++ b/recipes-devtools/valgrind/valgrind_3.10.1.bbappend
> @@ -0,0 +1,28 @@
> +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
> +
> +SRC_URI_append_qoriq-ppc = " \
> +    file://override-32-bit-glibc-memcpy-memset.patch \
> +"
> +EXTRA_OECONF_append_qoriq-ppc = " --program-prefix=${TARGET_ARCH}-"
> +
> +do_install_append_qoriq-ppc() {
> +    # Create a symbolic link as the user expects to see a /usr/bin/valgrind
> +    # On 64-bit MACHINE's, ensure that the link created, points to the *64-bit*
> +    # valgrind. Assume that the presence of the patterns: "\-64b" in ${MACHINE}
> +    # and "64" in ${TARGET_ARCH}, indicate the 64-bit flavour and that their
> +    # absence indicates 32-bit flavour respectively. Now, when both 32-bit and
> +    # 64-bit flavours are available to choose from; it does happen that even
> +    # though ${MACHINE} is chosen to indicate the choice of the 32-bit case, the
> +    # 64-bit tools are built too. So, ensure that on 32-bit, the link points
> +    # to the 32-bit valgrind, and of-course, that on 64-bit, the link points
> +    # to the 64-bit valgrind.
> +    if (!(echo "${MACHINE}"     | grep --quiet "\-64b") && # 32-bit
> +        !(echo "${TARGET_ARCH}" | grep --quiet "64")) ||
> +         (echo "${MACHINE}"     | grep --quiet "\-64b"  && # 64-bit
> +          echo "${TARGET_ARCH}" | grep --quiet "64"); then
> +        cd ${D}/${bindir}
> +        ln -sf ${TARGET_ARCH}-valgrind valgrind
> +    fi
> +}

I understand the need for this but I think a better way to do is:

 - use program-prefix always
 - use update-alternatives to maintain the link

This can be done upstream.

> +COMPATIBLE_MACHINE = "(e500mc|e5500|e5500-64b|e6500|e6500-64b)"

This breaks build of valgrind for all other machines.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


More information about the meta-freescale mailing list