All of lore.kernel.org
 help / color / mirror / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: Andre McCurdy <armccurdy@gmail.com>
Cc: OE Core mailing list <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 01/12] tune/arm: Set -mtune instead of -mcpu
Date: Thu, 7 Jun 2018 17:57:42 -0700	[thread overview]
Message-ID: <d9536882-8db8-9fb0-91c1-fe1f023efb49@gmail.com> (raw)
In-Reply-To: <CAJ86T=UTpUaBVcrp-6g_A7e51WhjiSuE7i8wjxzct1ii-xCuqw@mail.gmail.com>



On 6/7/18 4:38 PM, Andre McCurdy wrote:
> On Thu, Jun 7, 2018 at 7:04 AM, Khem Raj <raj.khem@gmail.com> wrote:
>> On Thu, Jun 7, 2018 at 12:14 AM, Andre McCurdy <armccurdy@gmail.com> wrote:
>>> On Wed, Jun 6, 2018 at 10:58 PM, Khem Raj <raj.khem@gmail.com> wrote:
>>>> On 6/6/18 4:42 PM, Andre McCurdy wrote:
>>>>> On Wed, Jun 6, 2018 at 3:43 PM, Khem Raj <raj.khem@gmail.com> wrote:
>>>>>
>>>>> The -mcpu, -march and -mtune options are not new and gcc 6 and 7 catch
>>>>> the same conflicts. It doesn't make sense that gcc8 is just catching
>>>>> more issues.
>>>>
>>>> It does make sense. the option parsing for these specific options on arm
>>>> have been revamped after gcc7, see
>>>>
>>>> https://github.com/kraj/gcc/compare/a99ae290af49793cd3db7a74f3dbc59e64d356a1...68b54adbd7b10c66d968d74b96fba552bd46ebb7
>>>
>>> Thanks. These commits seem to be related to handling of options like
>>> "-mcpu=cortexa9+nosimd". Was that the error you saw in testing?
>>>
>>> If you can provide the command line that caused the error then it
>>> should be quick to establish whether it's gcc8 being more picky.
>>>
>>> Or perhaps there's always been a warning and -Werror has been added to
>>> a gcc8 Makefile where it wasn't before?
>>>
>>>>> If we are trying to build something which is reusable across multiple
>>>>> machines with the same architecture then it's a bug to be passing
>>>>> machine specific CFLAGS. Making the machine specific CFLAGS more
>>>>> generic is not the right solution.
>>>>
>>>> being reusable is a side-effect and a good one. Real problem is we are not
>>>> matching to what we say in package arches, Probably you are confusing tunes
>>>> to be meant for static code generation for a given CPU.
>>>
>>> Sorry, I don't really follow what you mean?
>>>
>>>> I am interested to
>>>> hear more ideas to what would be right solution if this is not it.
>>>
>>> I'd like to understand what the problem is first before trying to
>>> propose any solutions.
>>>
>>> ie what specifically has changed with gcc8 to cause the error which
>>> wasn't seen before?
>>
>> I would suggest take this gcc8 patch series and revert this one then build
>> gcc-runtime for rpi3
> 
> That's the answer to "how do I reproduce the issue" not to "what is the issue".
> 

another way to nudge for some help :) Thanks for digging further details.

> Anyway, I can reproduce the issue. The root cause is that gcc-runtime
> libatomic tries to support runtime selection between different
> implementations of a few low level functions by making use of the gcc
> "ifunc" function attribute:
> 
>    https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Function-Attributes.html#index-ifunc-function-attribute
> 
> ie libatomic can contain versions of functions specific to armv6 or
> armv7 with selection between them being made at runtime via ifunc.
> 
> In order to build the armv7 versions of these few functions, the
> libatomic Makefiles selectively add -march=armv7-a to CFLAGS. This
> isn't new - it goes back to at least 2012 in gcc git history.
> 
>    https://gcc.gnu.org/ml/gcc/2014-01/msg00141.html
> 
> What _is_ new is that for ARM, support for ifunc function attributes
> was not enabled prior to gcc8. ie when building with gcc7, the
> libatomic configure script determines that the toolchain doesn't
> support ifunc and libatomic therefore builds without support for
> runtime function selection... since it never needs to compile armv7
> specific versions of the runtime selectable functions the -march -vs-
> -mcpu conflict never happens.
> 
>    https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00521.html
> 
> (Note that ifunc support for ARM in gcc8 is still only enabled for
> glibc, so this issue doesn't show up at all with musl).
> 
> Various solutions are possible:
> 
> 1) Let libatomic continue to build with ifunc support enabled, but
> avoid -march -vs- mcpu conflicts by dropping -mcpu from OE's CFLAGS in
> the gcc-runtime recipe.

I don't think this is required. Even though it might be useful for other 
reasons.

> 
> 2) Let libatomic continue to build with ifunc support enabled, but
> avoid -march -vs- -mcpu conflicts by updating the libatomic Makefiles
> so that they always safely over-ride any combination of -march, -mcpu,
> etc passed in from the build environment. ie patch the libatomic
> Makefiles to replace:
> 
>    IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
> 
> with:
> 
>    IFUNC_OPTIONS = -march=armv7-a+fp -mcpu=generic-armv7-a -DHAVE_KERNEL64
> 
> (Regardless of the solution we pick for OE, I think that fix should be
> submitted upstream to libatomic. There's no need for libatomic to risk
> build errors by not defining -mcpu in cases where it specifically
> wants to target armv7a).

I think this is better. Now my memory serves me right I had a local 
patch few months ago which I discarded where I was using -march with 
armv7ve but it was limiting for other reasons. I think it would be 
better to drop -march completely.

IFUNC_OPTIONS = -mcpu=generic-armv7-a -DHAVE_KERNEL64

I will test it out locally and see if that works.

> 
> 3) Prevent libatomic from building with ifunc support enabled for ARM
> by forcing "libat_cv_have_ifunc=no" from the gcc-runtime recipe.
> 

This would be ok too for OE ifuncs dont serve much since we target a 
specific CPU anyway.

> Votes?
> 

approach 2 is what we should use.




  reply	other threads:[~2018-06-08  0:57 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-06 21:37 [PATCH V2 00/12] Add GCC 8 recipes Khem Raj
2018-06-06 21:37 ` [PATCH 01/12] tune/arm: Set -mtune instead of -mcpu Khem Raj
2018-06-06 22:15   ` Andre McCurdy
2018-06-06 22:43     ` Khem Raj
2018-06-06 23:42       ` Andre McCurdy
2018-06-07  5:58         ` Khem Raj
2018-06-07  6:36           ` Martin Jansa
2018-06-07 16:55             ` Khem Raj
2018-06-07  7:14           ` Andre McCurdy
2018-06-07 14:04             ` Khem Raj
2018-06-07 23:38               ` Andre McCurdy
2018-06-08  0:57                 ` Khem Raj [this message]
2018-06-08  1:20                   ` Andre McCurdy
2018-06-08  1:48                     ` Khem Raj
2018-06-08  8:12                     ` Khem Raj
2018-06-06 21:37 ` [PATCH 02/12] valgrind: Remove code to remove -mcpu option on arm Khem Raj
2018-06-06 21:37 ` [PATCH 03/12] tune-mips-74k.inc: add tune file for 74kc mips Khem Raj
2018-06-06 21:37 ` [PATCH 04/12] gcc-8: Add recipes for 8.1 release Khem Raj
2018-06-06 21:37 ` [PATCH 05/12] gcc-8: Disable libssp for non mingw targets Khem Raj
2018-06-06 21:37 ` [PATCH 06/12] gcc-8: Disable float128 for ppc/musl Khem Raj
2018-06-06 21:37 ` [PATCH 07/12] gcc-8: Enabled mspe options for rs6000 ppc backend Khem Raj
2018-06-06 21:37 ` [PATCH 08/12] tcmode-default: Switch to gcc 8.0 Khem Raj
2018-06-06 21:37 ` [PATCH 09/12] linux-yocto: Fix build with gcc8 for ppc Khem Raj
2018-06-06 21:37 ` [PATCH 10/12] linux-yocto: Fix mips build with gcc8 Khem Raj
2018-06-06 21:37 ` [PATCH 11/12] linux-yocto: Fix mips64 " Khem Raj
2018-06-06 21:37 ` [PATCH 12/12] linux-yocto: Fix GCC 8 -Wrestrict error Khem Raj
2018-06-07  0:45 ` [PATCH V2 00/12] Add GCC 8 recipes Bruce Ashfield
2018-06-07 10:42   ` Richard Purdie
2018-06-07 12:08     ` Kevin Hao
2018-06-07 13:58     ` Khem Raj

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=d9536882-8db8-9fb0-91c1-fe1f023efb49@gmail.com \
    --to=raj.khem@gmail.com \
    --cc=armccurdy@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.