Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 03/21] toolchain: add BR2_TOOLCHAIN_HAS_SYNC_x hidden booleans
Date: Wed, 27 Jan 2016 22:46:37 +0100	[thread overview]
Message-ID: <20160127224637.74ce1bb9@free-electrons.com> (raw)
In-Reply-To: <20160125182737.GD3386@free.fr>

Yann,

On Mon, 25 Jan 2016 19:27:37 +0100, Yann E. MORIN wrote:
> Thomas, All,
> 
> [Warning: pedantic-english mode engaged. ;-) But with real, interesting
>  comments, too! ]

Thanks for the detailed review! I'll skip over the english related
comments (which I've taken into account, of course!) and focus on the
cases where some additional reply is needed.

> > +#  - On ARMv7, there is no problem, it can be directly implemented in
> > +#    userspace.
> > +#
> > +#  - On < ARMv7, it requires help from the kernel. Unfortunately, the
> > +#    libgcc code implementing 8 bytes __sync with the help from the
> > +#    kernel calls __write() when a failure occurs, which is a function
> > +#    internal to glibc, not available in uClibc and musl. This means
> > +#    that the 8 bytes __sync operations are not available on < ARMv7
> > +#    with uClibc and musl. This problem was fixed as part of gcc
> > +#    PR68059, which was backported to the gcc 5 branch, but isn't yet
> > +#    part of any gcc 5.x release.
> > +#
> > +config BR2_TOOLCHAIN_ARM_HAS_SYNC_8
> > +	bool
> > +	default y
> > +	depends on BR2_arm || BR2_armeb
> > +	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
> > +	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A
> 
> I had a bit of difficulty parsing that one. It was not obvious from the
> commit log that gcc >= 4.7 was required, while the comment above makes
> it really explicit. Here's how I understood the commit log:
> 
>   - for armv7, with gcc-4.7+, it's OK
>   - for armv6-, it needs glibc and there is no gcc condition.
> 
> But the comment here states it differently, and matches the code.
> 
> Can you just confirm that I misunderstand the commit log?

Well, the commit log has:

                    __sync       __atomic    gcc

    ARM            Y  Y  Y  X    Y  Y  Y  Y   4.8, 4.7
    ARM            Y  Y  Y  -                 4.5

So, as you can see:

 - With a gcc 4.5 toolchain, there is no __sync for 8-byte types at all.

 - Starting with gcc 4.7, there *might* be a __sync for 8-byte types,
   but only if you're using glibc *or* if you're using ARMv7.

Hence the conditions:

	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A

So I believe the code, the comment and the commit log are matching
here. Am I missing something ?


> Well, I'd prefer we have a simpler conditional block, maybe something
> like:
> 
>     config BR2_TOOLCHAIN_i386_HAS_SYNC_8
>         bool
>         default y
>         depends on BR2_i386
>         depends on !BR2_x86_i386
>         depends on !BR2_x86_i486
>         depends on !BR2_x86_c3
>         depends on !BR2_x86_winchip_c6
>         depends on !BR2_x86_winchip2
> 
>     config BR2_TOOLCHAIN_HAS_SYNC_8
>         bool
>         default y if BR2_ARCH_IS_64
>         default y if BR2_TOOLCHAIN_i386_HAS_SYNC_8
>         default y if BR2_TOOLCHAIN_ARM_HAS_SYNC_8

Adopted.

> Also, I'm not sure about the 'default y if BR2_ARCH_IS_64' and I think
> we should just list those architectures (4 of them: AArch64, mips64,
> sparc64 and x86_64, with that last one already covered with i386).

I beg to disagree here. I don't see why a 64 bits architecture would
not provide the 8-byte intrinsics. I would like to suggest to keep it
as is for now, and revisit when/if we get a 64 bits architecture that
doesn't provide those 8-byte intrinsics.

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

  reply	other threads:[~2016-01-27 21:46 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24 23:07 [Buildroot] [PATCH 00/21] Rework atomic handling Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 01/21] libftdi: C++ bindings need boost Thomas Petazzoni
2016-01-25 17:04   ` Yann E. MORIN
2016-01-25 20:04     ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 02/21] libftdi: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 17:15   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 03/21] toolchain: add BR2_TOOLCHAIN_HAS_SYNC_x hidden booleans Thomas Petazzoni
2016-01-25 18:27   ` Yann E. MORIN
2016-01-27 21:46     ` Thomas Petazzoni [this message]
2016-01-27 22:47       ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 04/21] docs/manual: document usage of BR2_TOOLCHAIN_HAS_SYNC_x Thomas Petazzoni
2016-01-25 18:38   ` Yann E. MORIN
2016-01-25 20:07     ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 05/21] icu: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 18:42   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 06/21] json-c: needs __sync_val_compare_and_swap_4 Thomas Petazzoni
2016-01-25 18:47   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 07/21] pulseaudio: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 18:52   ` Yann E. MORIN
2016-01-27 21:56     ` Thomas Petazzoni
2016-01-27 22:51       ` Yann E. MORIN
2016-01-27 23:01         ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 08/21] apache, apr: fix atomic handling Thomas Petazzoni
2016-01-25 20:59   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 09/21] jack2: use the proper BR2_TOOLCHAIN_HAS_SYNC_x symbol Thomas Petazzoni
2016-01-25 21:12   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 10/21] libtorrent: use the proper BR2_TOOLCHAIN_HAS_SYNC_x symbols Thomas Petazzoni
2016-01-25 21:45   ` Yann E. MORIN
2016-01-25 22:07     ` Thomas Petazzoni
2016-01-25 22:14       ` Yann E. MORIN
2016-01-25 22:22         ` Thomas Petazzoni
2016-01-26 22:13   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 11/21] gauche: disable on SPARC(64), remove atomics dependency Thomas Petazzoni
2016-01-25 21:52   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 12/21] cairo, harfbuzz: rework atomic dependencies Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 13/21] openocd: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 23:05   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 14/21] squid: rework atomic handling Thomas Petazzoni
2016-01-25 22:53   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 15/21] thrift: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-26 22:31   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 16/21] msgpack: rework " Thomas Petazzoni
2016-01-26 22:17   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 17/21] arch: remove BR2_ARCH_HAS_ATOMICS option Thomas Petazzoni
2016-01-26 22:22   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 18/21] glog: fix atomic built-in problem Thomas Petazzoni
2016-01-26 22:25   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 19/21] openal: add missing BR2_TOOLCHAIN_HAS_SYNC_4 dependency Thomas Petazzoni
2016-01-26 22:32   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 20/21] freerdp: " Thomas Petazzoni
2016-01-26 22:33   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 21/21] neard: " Thomas Petazzoni
2016-01-26 22:35   ` Yann E. MORIN
2016-01-26 20:28 ` [Buildroot] [PATCH 00/21] Rework atomic handling Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160127224637.74ce1bb9@free-electrons.com \
    --to=thomas.petazzoni@free-electrons.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox