Fwd: Compile issue for parisc/hppa platform

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Mon Sep 9 13:03:29 GMT 2024



On 06/09/24 22:11, Greg Chandler wrote:
> 
> 
> I was attempting to build an hppa-linux-gnu cross chain, and got this error:
> 
> 
> make[2]: Entering directory '/opt/cross-build/hppa-linux-gnu/glibc-2.40/elf'
> hppa-linux-gnu-gcc dl-find_object.c -c -std=gnu11 -fgnu89-inline  -g -O2 -Wall -Wwrite-strings -Wundef -Werror -fmerge-all-constants -frounding-math -fno-stack-protector -fno-common -Wp,-U_FORTIFY_SOURCE -Wstrict-prototypes -Wold-style-definition -fmath-errno    -fno-pie      -ftls-model=initial-exec     -I../include -I/opt/cross-build/hppa-linux-gnu/glibc/elf  -I/opt/cross-build/hppa-linux-gnu/glibc  -I../sysdeps/unix/sysv/linux/hppa  -I../sysdeps/hppa/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/hppa/hppa1.1  -I../sysdeps/wordsize-32  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/hppa/fpu  -I../sysdeps/hppa  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /opt/cross-compile/lib/gcc/hppa-linux-gnu/14.2.0/include -isystem
> /opt/cross-compile/lib/gcc/hppa-linux-gnu/14.2.0/include-fixed -isystem /opt/cross-compile/hppa-linux-gnu/include -D_LIBC_REENTRANT -include /opt/cross-build/hppa-linux-gnu/glibc/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h       -DTOP_NAMESPACE=glibc -o /opt/cross-build/hppa-linux-gnu/glibc/elf/dl-find_object.o -MD -MP -MF /opt/cross-build/hppa-linux-gnu/glibc/elf/dl-find_object.o.dt -MT /opt/cross-build/hppa-linux-gnu/glibc/elf/dl-find_object.o
> In file included from ../include/atomic.h:49,
>                  from dl-find_object.c:20:
> In function '_dlfo_update_init_seg',
>     inlined from '_dl_find_object_update_1' at dl-find_object.c:690:30,
>     inlined from '_dl_find_object_update' at dl-find_object.c:806:13:
> ../sysdeps/unix/sysv/linux/hppa/atomic-machine.h:44:4: error: '__atomic_store_4' writing 4 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=]
>    44 |    __atomic_store_n ((mem), (val), __ATOMIC_RELAXED);                        \
>       |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> dl-find_object.c:645:3: note: in expansion of macro 'atomic_store_relaxed'
>   645 |   atomic_store_relaxed (&seg->size, new_seg_size);
>       |   ^~~~~~~~~~~~~~~~~~~~
> In function '_dl_find_object_update':
> cc1: note: destination object is likely at address zero
> cc1: all warnings being treated as errors
> make[2]: *** [../o-iterator.mk:9: /opt/cross-build/hppa-linux-gnu/glibc/elf/dl-find_object.o] Error 1
> make[2]: Leaving directory '/opt/cross-build/hppa-linux-gnu/glibc-2.40/elf'
> make[1]: *** [Makefile:484: elf/subdir_lib] Error 2
> make[1]: Leaving directory '/opt/cross-build/hppa-linux-gnu/glibc-2.40'
> make: *** [Makefile:12: install] Error 2
> 
> 

This seems to be a gcc regression [1], and you can either build glibc
with --disable-werror or use the patch below:

diff --git a/elf/dl-find_object.c b/elf/dl-find_object.c
index 449302eda3..0f0ab2b930 100644
--- a/elf/dl-find_object.c
+++ b/elf/dl-find_object.c
@@ -26,6 +26,7 @@
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
+#include <libc-diag.h>

 /* Fallback implementation of _dl_find_object.  It uses a linear
    search, needs locking, and is not async-signal-safe.  It is used in
@@ -642,7 +643,10 @@ _dlfo_update_init_seg (struct dlfo_mappings_segment *seg,
     new_seg_size = remaining_to_add;
   else
     new_seg_size = seg->allocated;
+  DIAG_PUSH_NEEDS_COMMENT;
+  DIAG_IGNORE_NEEDS_COMMENT (14, "-Wstringop-overflow");
   atomic_store_relaxed (&seg->size, new_seg_size);
+  DIAG_POP_NEEDS_COMMENT;
   return new_seg_size;
 }


As Joseph has raised, to actually propose it we will need to come up
with a good description of the issue and why it is failing for hppa
because right now it disables the warning for all architectures.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112358

> 
> 
> Additional info:
> hppa-linux-gnu-gcc -v
> Using built-in specs.
> COLLECT_GCC=hppa-linux-gnu-gcc
> COLLECT_LTO_WRAPPER=/opt/cross-compile/libexec/gcc/hppa-linux-gnu/14.2.0/lto-wrapper
> Target: hppa-linux-gnu
> Configured with: ../gcc-14.2.0/configure --prefix=/opt/cross-compile --target=hppa-linux-gnu --enable-languages=c,c++ --disable-multilib
> Thread model: posix
> Supported LTO compression algorithms: zlib zstd
> gcc version 14.2.0 (GCC)
> 
> 
> 
> All commands used to do the build:
> TARGET_ARCH="hppa-linux-gnu"
> PLATFORM_ARCH="parisc"
> 
> cd /opt/cross-compile
> export PATH="/opt/cross-compile/bin:$PATH"
> rm -R /opt/cross-build 2>/dev/null
> mkdir /opt/cross-build
> 
> mkdir /opt/cross-build/$TARGET_ARCH
> cd /opt/cross-build/$TARGET_ARCH
> tar -xzf /opt/cross-compiler-sources/binutils-2.43.tar.gz
> tar -xzf /opt/cross-compiler-sources/cloog-0.18.1.tar.gz
> tar -xzf /opt/cross-compiler-sources/gcc-14.2.0.tar.gz
> tar -xzf /opt/cross-compiler-sources/glibc-2.40.tar.gz
> tar -xzf /opt/cross-compiler-sources/gmp-6.3.0.tar.gz
> tar -xjf /opt/cross-compiler-sources/isl-0.24.tar.bz2
> tar -xf /opt/cross-compiler-sources/linux-6.10.8.tar.xz
> tar -xzf /opt/cross-compiler-sources/mpc-1.3.1.tar.gz
> tar -xzf /opt/cross-compiler-sources/mpfr-4.2.1.tar.gz
> 
> cd /opt/cross-build/$TARGET_ARCH/gcc-14.2.0
> ln -s ../mpfr-4.2.1 mpfr
> ln -s ../gmp-6.3.0 gmp
> ln -s ../mpc-1.3.1 mpc
> ln -s ../isl-0.24 isl
> ln -s ../cloog-0.18.1 cloog
> cd ..
> 
> cd /opt/cross-build/$TARGET_ARCH/linux-6.10.8
> make ARCH=$PLATFORM_ARCH INSTALL_HDR_PATH=/opt/cross-compile/$TARGET_ARCH headers_install
> cd ..
> 
> mkdir /opt/cross-build/$TARGET_ARCH/binutils
> cd /opt/cross-build/$TARGET_ARCH/binutils
> ../binutils-2.43/configure --prefix=/opt/cross-compile --target=$TARGET_ARCH --disable-multilib
> make -j4
> make install
> cd ..
> 
> mkdir /opt/cross-build/$TARGET_ARCH/gcc
> cd /opt/cross-build/$TARGET_ARCH/gcc
> ../gcc-14.2.0/configure --prefix=/opt/cross-compile --target=$TARGET_ARCH --enable-languages=c,c++ --disable-multilib
> make -j4 all-gcc
> make install-gcc
> cd ..
> 
> mkdir /opt/cross-build/$TARGET_ARCH/glibc
> cd /opt/cross-build/$TARGET_ARCH/glibc
> ../glibc-2.40/configure --prefix=/opt/cross-compile/$TARGET_ARCH --build=$MACHTYPE --host=$TARGET_ARCH --target=$TARGET_ARCH --with-headers=/opt/cross-compile/$TARGET_ARCH/include --disable-multilib libc_cv_forced_unwind=yes
> make install-bootstrap-headers=yes install-headers
> make -j4 csu/subdir_lib
> install csu/crt1.o csu/crti.o csu/crtn.o /opt/cross-compile/$TARGET_ARCH/lib
> $TARGET_ARCH-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross-compile/$TARGET_ARCH/lib/libc.so
> touch /opt/cross-compile/$TARGET_ARCH/include/gnu/stubs.h
> cd ..
> 
> cd /opt/cross-build/$TARGET_ARCH/gcc
> make -j4 all-target-libgcc
> make install-target-libgcc
> cd ..
> 
> cd /opt/cross-build/$TARGET_ARCH/glibc
> make -j4


More information about the Libc-help mailing list