From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 03/21] toolchain: add BR2_TOOLCHAIN_HAS_SYNC_x hidden booleans
Date: Wed, 27 Jan 2016 23:47:54 +0100 [thread overview]
Message-ID: <20160127224754.GA3365@free.fr> (raw)
In-Reply-To: <20160127224637.74ce1bb9@free-electrons.com>
Thomas, All,
On 2016-01-27 22:46 +0100, Thomas Petazzoni spake thusly:
> On Mon, 25 Jan 2016 19:27:37 +0100, Yann E. MORIN wrote:
> > > +# - 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 ?
What I meant, is that I had some problem matching this part of the commit
log:
> * X indicates a very special case for 8 bytes __sync built-ins on
> ARM. On ARMv7, there is no problem, starting from gcc 4.7, the
> __sync built-in for 8 bytes integers is implemented, fully in
> userspace. For cores < ARMv7, doing a 8 bytes atomic operation
> requires help from the kernel. Unfortunately, the libgcc code
> implementing this uses the __write() function to display an error,
> and this function is internal to glibc. Therefore, if you're using
> glibc everything is fine, but if you're using uClibc or musl, you
> cannot link an application that uses 8 bytes __sync
> operations. This has been fixed as part of gcc PR68095, merged in
> the gcc 5 branch but not yet part of any gcc release.
... with the actual dependencies you wrote.
But reading the blurb above again, it looks OK now. It's just a little
bit complex enough to need a second^Wthird^Wfourth read to fully grasp.
;-)
> > 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.
I was not implying 64-bit archictectures would not provide them. I
suggested we use the actual architectures just to get a similar
condition as we have for the other _SYNC_X options, for which we only
use the architecture names (or an intermediate option derived from the
architecture).
But indeed, a 64-bit arch that does not provide _SYNC_8 woudl be really
weird (and broken).
So, OK.
Regards,
Yann E. MORIN.
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2016-01-27 22:47 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
2016-01-27 22:47 ` Yann E. MORIN [this message]
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=20160127224754.GA3365@free.fr \
--to=yann.morin.1998@free.fr \
--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