glibc2.32 build error for powerpc64-unknown-linux-gnu

Adhemerval Zanella adhemerval.zanella@linaro.org
Fri Sep 4 13:33:10 GMT 2020



On 03/09/2020 17:58, Chris Packham wrote:
> 
> On 3/09/20 10:53 pm, Adhemerval Zanella wrote:
>>
>> On 03/09/2020 06:09, Chris Packham wrote:
>>> On 3/09/20 2:39 pm, Chris Packham wrote:
>>>> On 3/09/20 9:14 am, Chris Packham wrote:
>>>>> On 3/09/20 2:20 am, Adhemerval Zanella wrote:
>>>>>> On 02/09/2020 05:05, Chris Packham wrote:
>>>>>>> On 2/09/20 7:40 am, Adhemerval Zanella wrote:
>>>>>>>> On 30/08/2020 07:40, Chris Packham via Libc-help wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> crosstool-ng was recently updated to add glibc-2.32. We're seeing
>>>>>>>>> the
>>>>>>>>> following error building for powerpc64
>>>>>>>>>
>>>>>>>>> [ALL  ]      In file included from
>>>>>>>>> ../sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-ppc32.c:26,
>>>>>>>>> [ALL  ]                       from
>>>>>>>>> ../sysdeps/powerpc/powerpc64/multiarch/wordcopy-ppc64.c:18:
>>>>>>>>> [ALL  ]      ../string/wordcopy.c: In function
>>>>>>>>> '_wordcopy_fwd_aligned':
>>>>>>>>> [ERROR]      ../string/wordcopy.c:98:26: error: 'a1' may be used
>>>>>>>>> uninitialized in this function [-Werror=maybe-uninitialized]
>>>>>>>>> [ALL  ]         98 |       ((op_t *) dstp)[0] = a1;
>>>>>>>>> [ALL  ]            |       ~~~~~~~~~~~~~~~~~~~^~~~
>>>>>>>>>
>>>>>>>>> Looking at the code in question I think it's a spurious warning.
>>>>>>>>> There
>>>>>>>>> even appears to be an attempt to turn off the warning in
>>>>>>>>> sysdeps/generic/Makefile but the file is #included for powerpc so
>>>>>>>>> the
>>>>>>>>> flags applied.
>>>>>>>>>
>>>>>>>>> Bug report with full logs
>>>>>>>>> https://github.com/crosstool-ng/crosstool-ng/issues/1380
>>>>>>>>>
>>>>>>>> I haven't see it with gcc version 9.3.1, so it might be something
>>>>>>>> related
>>>>>>>> to gcc 10 or newer.  I will build a gcc 10 and check if I can
>>>>>>>> reproduce it.
>>>>>>> I just tried a crosstool-ng config selecting gcc 9.3.0 and I still see
>>>>>>> the same error.
>>>>>>>
>>>>>> I just tried to reproduce it building powerpc64-linux-gnu,
>>>>>> powerpc-linux-gnu
>>>>>> and powerpc-linux-gnu-power4 (with --with-cpu-power4) with both gcc
>>>>>> 9.3.1
>>>>>> and 10, but without success. Are you using any special flags or
>>>>>> patch for gcc?
>>>>> There are a collection of patches
>>>>> https://github.com/crosstool-ng/crosstool-ng/tree/master/packages/gcc/10.2.0
>>>>> mostly just brought forward from older gcc versions. I'll try
>>>>> disabling them.
>>>> Even without any of the glibc or gcc patches and I still see the same
>>>> error.
>>> I think I might know why you can't see the error. crosstool-ng sets
>>> -Werror when building glibc. So it's a warning that gets promoted to an
>>> error by -Werror.
>>>
>>> I'll update crosstool-ng to stop doing that for powerpc64 + glibc-2.32.
>> We add -Werror by default since 2.21 and have added --disable-werror to
>> disable it.  I am trying to understand why you are seeing this error in
>> your environment because this specific code has not been touched in a long
>> time and constantly built *all* supported ABI some different gcc versions [1].
>>
>> And the last report for gcc 9 [1] and gcc 10 has not shown any issue, neither
>> any testing I did with gcc 8, gcc9, or gcc10.  I will try to build some
>> powerpc permutations with --with-cpu and/or --disable-multi-arch.
>>
>>
>> [1] https://sourceware.org/pipermail/libc-testresults/2020q3/thread.html
>> [2] https://sourceware.org/pipermail/libc-testresults/2020q3/006398.html
>> [3] https://sourceware.org/pipermail/libc-testresults/2020q3/006397.html
> 
> Hmm the plot thickens.
> 
> If it helps this is the configure line crosstool-ng ends up using
> 
> BUILD_CC='x86_64-build_pc-linux-gnu-gcc' 
> CC='powerpc64-unknown-linux-gnu-gcc -g -O2 -U_FORTIFY_SOURCE ' CFLAGS='' 
> AR='powerpc64-unknown-linux-gnu-ar' 
> RANLIB='powerpc64-unknown-linux-gnu-ranlib' '/bin/bash' 
> '/home/runner/work/crosstool-ng/crosstool-ng/.build/powerpc64-unknown-linux-gnu/src/glibc/configure' 
> '--prefix=/usr' '--build=x86_64-build_pc-linux-gnu' 
> '--host=powerpc64-unknown-linux-gnu' 
> '--cache-file=/home/runner/work/crosstool-ng/crosstool-ng/.build/powerpc64-unknown-linux-gnu/build/build-libc-final/multilib/config.cache' 
> '--without-cvs' '--disable-profile' '--without-gd' 
> '--with-headers=/home/runner/work/crosstool-ng/crosstool-ng/x-tools/powerpc64-unknown-linux-gnu/powerpc64-unknown-linux-gnu/sysroot/usr/include' 
> '--disable-debug' '--disable-sanity-checks' '--enable-obsolete-rpc' 
> '--enable-kernel=5.5.5' '--with-__thread' '--with-tls' '--enable-shared' 
> '--enable-add-ons=no' '--with-pkgversion=crosstool-NG UNKNOWN'

Some notes you might consider to add on crosstool-ng:

  --without-cvs            - this is a long time removed option.
  --disable-profile        - it is the default option, no need to add it.
  --disable-debug          - there is no such option.
  --disable-sanity-checks  - this is only useful to disable the warning that
                             using the default --prefix value (/usr/local) is not
                             valid.  Since it is already setting to the expected
                             value this is a superfluous option.
  --enable-obsolete-rpc    - This option was removed on 2.32.  The NEWS contains
                             more information.
  --with-__thread          - this is another deprecated/remove option, glibc now
                             requires TLS support.
  --with-tls               - Ditto.
  --enable-shared          - This is the default.
  --enable-add-ons         - Another deprecated/remove option.
  
> 
> It's the same between a glibc-2.31 build and a glibc-2.32 build.
> 

I check multiple build permutation with gcc-9 and gcc-10 native (building
on a powerpc64):

  powerpc64-linux-gnu-power4
  powerpc64-linux-gnu-power5
  powerpc64-linux-gnu-power5+
  powerpc64-linux-gnu-power6
  powerpc64-linux-gnu-power6x
  powerpc64-linux-gnu-power7
  powerpc64-linux-gnu-power8
  powerpc64-linux-gnu-power8-disable-multi-arch
  powerpc64-linux-gnu
  powerpc64-linux-gnu-disable-multi-arch
  powerpc64-linux-gnu-power4-disable-multi-arch
  powerpc64-linux-gnu-power5+-disable-multi-arch
  powerpc64-linux-gnu-power5-disable-multi-arch
  powerpc64-linux-gnu-power6-disable-multi-arch
  powerpc64-linux-gnu-power6x-disable-multi-arch
  powerpc64-linux-gnu-power7-disable-multi-arch

The "-powerN" means using "--with-cpu=powerN" which "-disable-multi-arch" means
using "-disable-multi-arch".

I also checked on a cross build using both gcc-9 and gcc-10 on a x86_64 host
to powerpc64-linux-gnu.

I really think this is environment issue on your side.  Maybe I can fix it by
disabling with pragmas, but it would be hard to get any reviews without
actually reproducing it :/


More information about the Libc-help mailing list