[OE-core] [PATCH 1/1] glibc: Allow 64 bit atomics for x86

Mark Hatle mark.hatle at windriver.com
Thu Oct 29 21:00:59 UTC 2015


On 10/29/15 3:43 PM, Juro Bystricky wrote:
> This patch fixes [YOCTO#8140].
> 
> The fix consist of allowing 64bit atomic ops for x86.
> This should be safe for i586 and newer CPUs.
> It also makes the synchronization more efficient.

I'm not sure this is correct.. see below.

> Signed-off-by: Juro Bystricky <juro.bystricky at intel.com>
> ---
>  .../glibc/glibc/use_64bit_atomics.patch            | 24 ++++++++++++++++++++++
>  meta/recipes-core/glibc/glibc_2.22.bb              |  1 +
>  2 files changed, 25 insertions(+)
>  create mode 100644 meta/recipes-core/glibc/glibc/use_64bit_atomics.patch
> 
> diff --git a/meta/recipes-core/glibc/glibc/use_64bit_atomics.patch b/meta/recipes-core/glibc/glibc/use_64bit_atomics.patch
> new file mode 100644
> index 0000000..eb7f2b2
> --- /dev/null
> +++ b/meta/recipes-core/glibc/glibc/use_64bit_atomics.patch
> @@ -0,0 +1,24 @@
> +This patch alows using 64 bit atomic instructions on a
> +32 bit platform. This is safe, providing x86 is Pentium or
> +later (would not work on i386, i486). Using 64 bit atomic 
> +instructions bypasses code containing a bug as documented in
> +https://bugzilla.yoctoproject.org/show_bug.cgi?id=8140
> +
> +Upstream-Status: TBD
> +
> +Signed-off-by: Juro Bystricky <juro.bystricky at intel.com>
> +
> +
> +Index: libc/sysdeps/i386/i486/bits/atomic.h
> +===================================================================
> +--- libc.orig/sysdeps/i386/i486/bits/atomic.h
> ++++ libc/sysdeps/i386/i486/bits/atomic.h
> +@@ -54,7 +54,7 @@ typedef uintmax_t uatomic_max_t;
> + # endif
> + #endif
> + 
> +-#define __HAVE_64B_ATOMICS 0
> ++#define __HAVE_64B_ATOMICS 1
> + #define USE_ATOMIC_COMPILER_BUILTINS 0

The patch will enable it for i486 and above, but you comment says i486 isn't
supported.

Normally you'd resolve this by creating a new

sysdeps/i386/i586/bits/atomic.h

(include or copy the original file)

and adjust the HAVE_64B_ATOMICS value at that point.

Then the sources will work for older systems and newer.

While 386/486 is likely not used much these days... I do also have a concern
about Quark CPUs.  Do you know if they support the 64B ATOMICS?  (I suspect they
do not.)  If that is the case, we might need to special case this patch and make
it 'i686' and above?

--Mark

> + 
> diff --git a/meta/recipes-core/glibc/glibc_2.22.bb b/meta/recipes-core/glibc/glibc_2.22.bb
> index 020e417..2494ad7 100644
> --- a/meta/recipes-core/glibc/glibc_2.22.bb
> +++ b/meta/recipes-core/glibc/glibc_2.22.bb
> @@ -50,6 +50,7 @@ SRC_URI_append_class-nativesdk = "\
>             file://0001-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch \
>             file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
>             file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
> +           file://use_64bit_atomics.patch \
>  "
>  
>  S = "${WORKDIR}/git"
> 




More information about the Openembedded-core mailing list