All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andre McCurdy <armccurdy@gmail.com>
To: Khem Raj <raj.khem@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 16:38:09 -0700	[thread overview]
Message-ID: <CAJ86T=UTpUaBVcrp-6g_A7e51WhjiSuE7i8wjxzct1ii-xCuqw@mail.gmail.com> (raw)
In-Reply-To: <CAMKF1srdYY8MXiFWjk7Khh2TsDQ0faTPV4gn5tRfUwrXEUYpUA@mail.gmail.com>

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".

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.

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).

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

Votes?


  reply	other threads:[~2018-06-07 23:38 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 [this message]
2018-06-08  0:57                 ` Khem Raj
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='CAJ86T=UTpUaBVcrp-6g_A7e51WhjiSuE7i8wjxzct1ii-xCuqw@mail.gmail.com' \
    --to=armccurdy@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=raj.khem@gmail.com \
    /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.