Bug#959524: cross-config: ac_cv_sizeof_* variables make gcc FTCBFS
Package: cross-config
Version: 2.6.15-3
Tags: patch
User: debian-cross@lists.debian.org
Usertags: ftcbfs
Control: affects -1 + src:gcc-9 src:gcc-10
gcc-N fails to cross build from source from 64bit architectures to 32bit
architectures due to cross-config cache variables. gcc is a little
unusual here as it has a number of configure scripts and invokes them
with varying build/host/target combinations during a cross build.
However, cross-config's cache variables fail to distinguish this and in
some cases, gcc picks up wrong sizeof results from cross-config. An
example failure is:
http://crossqa.debian.net/build/gcc-10_10-20200418-1_armhf_20200420204732.log
| configure: loading site script /etc/dpkg-cross/cross-config.armhf
| checking build system type... x86_64-pc-linux-gnu
| checking host system type... x86_64-pc-linux-gnu
| checking target system type... arm-unknown-linux-gnueabihf
...
| checking size of void *... (cached) 4
...
| g++ -c -DIN_GCC -DGENERATOR_FILE -I. -Ibuild -I../../src/gcc -I../../src/gcc/build -I../../src/gcc/../include -I../../src/gcc/../libcpp/include \
| -o build/genpreds.o ../../src/gcc/genpreds.c
| In file included from ../../src/gcc/rtl.h:27,
| from ../../src/gcc/genpreds.c:27:
| ../../src/gcc/real.h:81:76: error: narrowing conversion of '-1' from 'int' to 'long unsigned int' [-Wnarrowing]
| 81 | [sizeof (REAL_VALUE_TYPE) <= REAL_WIDTH * sizeof (HOST_WIDE_INT) ? 1 : -1];
| | ^
| ../../src/gcc/real.h:81:68: error: size '-1' of array 'test_real_width' is negative
| 81 | [sizeof (REAL_VALUE_TYPE) <= REAL_WIDTH * sizeof (HOST_WIDE_INT) ? 1 : -1];
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
| make[4]: *** [Makefile:2709: build/genpreds.o] Error 1
| make[4]: Leaving directory '/<<PKGBUILDDIR>>/build/gcc'
| make[3]: *** [Makefile:4449: all-gcc] Error 2
| make[3]: Leaving directory '/<<PKGBUILDDIR>>/build'
| make[2]: *** [Makefile:978: all] Error 2
| make[2]: Leaving directory '/<<PKGBUILDDIR>>/build'
As one can see, the size of void * is incorrectly determined as 4 for
amd64 due to a cache variable.
One should note that since a few years, autoconf is able to compute
compile time integers (including sizeof) using bisection during cross
compilation. Therefore the benefit of providing these variables is quite
limited. I propose removing them entirely.
I would like to very much thank Jessica Clarke for spotting the cause of
this issue. All I did here was implement the obvious patch, test it and
write this up.
Helmut
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.alpha dpkg-cross-2.6.15/config/cross-config.alpha
--- dpkg-cross-2.6.15/config/cross-config.alpha 2019-04-06 07:21:56.000000000 +0200
+++ dpkg-cross-2.6.15/config/cross-config.alpha 2020-05-03 10:08:53.000000000 +0200
@@ -7,19 +7,3 @@
#
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=8
-ac_cv_sizeof_unsigned_long=8
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_char=1
-ac_cv_sizeof_unsigned_char=1
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=8
-ac_cv_sizeof_void_p=8
-ac_cv_sizeof_char_p=8
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.amd64 dpkg-cross-2.6.15/config/cross-config.amd64
--- dpkg-cross-2.6.15/config/cross-config.amd64 2019-04-06 07:21:56.000000000 +0200
+++ dpkg-cross-2.6.15/config/cross-config.amd64 2020-05-03 10:07:59.000000000 +0200
@@ -6,16 +6,3 @@
#
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=8
-ac_cv_sizeof_unsigned_long=8
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=16
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.arm64 dpkg-cross-2.6.15/config/cross-config.arm64
--- dpkg-cross-2.6.15/config/cross-config.arm64 2015-01-22 20:10:23.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.arm64 2020-05-03 10:09:09.000000000 +0200
@@ -6,23 +6,6 @@
# now ensure the real architecture-dependent values take priority
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=yes
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=8
-ac_cv_sizeof_unsigned_long=8
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_char=1
-ac_cv_sizeof_unsigned_char=1
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=16
-ac_cv_sizeof_void_p=8
-ac_cv_sizeof_char_p=8
-ac_cv_sizeof_time_t=8
#lots of things: turn off stack protector
libc_cv_fno_stack_protector=no
@@ -43,7 +26,6 @@
#Verifed with native test program
apr_cv_mutex_robust_shared=yes
#probably more general than just APR. verifed by cross compiling and running test from configure
-ac_cv_sizeof_struct_iovec=16
# mysql
# mysql wants to know stack direction:
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.armel dpkg-cross-2.6.15/config/cross-config.armel
--- dpkg-cross-2.6.15/config/cross-config.armel 2015-01-22 20:17:29.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.armel 2020-05-03 10:07:55.000000000 +0200
@@ -3,22 +3,6 @@
# now ensure the real architecture-dependent values take priority
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=yes
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_char=1
-ac_cv_sizeof_unsigned_char=1
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=8
-ac_cv_sizeof_void_p=4
-ac_cv_sizeof_char_p=4
path=`dirname $ac_site_file`
# now allow package-specific architecture-independent values to be set
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.armhf dpkg-cross-2.6.15/config/cross-config.armhf
--- dpkg-cross-2.6.15/config/cross-config.armhf 2015-01-22 20:16:56.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.armhf 2020-05-03 10:08:15.000000000 +0200
@@ -3,22 +3,6 @@
# now ensure the real architecture-dependent values take priority
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=yes
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_char=1
-ac_cv_sizeof_unsigned_char=1
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=8
-ac_cv_sizeof_void_p=4
-ac_cv_sizeof_char_p=4
path=`dirname $ac_site_file`
# now allow package-specific architecture-independent values to be set
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.cache dpkg-cross-2.6.15/config/cross-config.cache
--- dpkg-cross-2.6.15/config/cross-config.cache 2012-11-24 22:14:14.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.cache 2020-05-03 10:08:05.000000000 +0200
@@ -27,7 +27,6 @@
apr_cv_epoll_create1=yes
# apr_cv_process_shared_works: maybe arch specific?
# apr_cv_mutex_robust_shared: maybe arch specific?
-# ac_cv_sizeof_struct_iovec: is arch specific
fi
# avahi
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.cygwin-i386 dpkg-cross-2.6.15/config/cross-config.cygwin-i386
--- dpkg-cross-2.6.15/config/cross-config.cygwin-i386 2011-03-27 08:14:10.000000000 +0200
+++ dpkg-cross-2.6.15/config/cross-config.cygwin-i386 2020-05-03 10:08:30.000000000 +0200
@@ -9,8 +9,6 @@
# host. So supply them manually...
#
ac_cv_c_bigendian=no
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_unsigned_long=4
#ac_cv_header_stdc=yes
#ac_cv_func_closedir_void=no
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.hppa dpkg-cross-2.6.15/config/cross-config.hppa
--- dpkg-cross-2.6.15/config/cross-config.hppa 2019-04-06 07:21:56.000000000 +0200
+++ dpkg-cross-2.6.15/config/cross-config.hppa 2020-05-03 10:07:40.000000000 +0200
@@ -7,19 +7,6 @@
#
ac_cv_c_bigendian=yes
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=12
## bash
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.i386 dpkg-cross-2.6.15/config/cross-config.i386
--- dpkg-cross-2.6.15/config/cross-config.i386 2009-02-10 17:51:19.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.i386 2020-05-03 10:08:24.000000000 +0200
@@ -9,19 +9,6 @@
#
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=12
path=`dirname $ac_site_file`
# now allow package-specific architecture-independent values to be set
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.m32r dpkg-cross-2.6.15/config/cross-config.m32r
--- dpkg-cross-2.6.15/config/cross-config.m32r 2015-01-22 20:17:47.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.m32r 2020-05-03 10:07:50.000000000 +0200
@@ -4,21 +4,6 @@
# m32r specific configure variables
ac_cv_c_bigendian=yes
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_char=1
-ac_cv_sizeof_double=8
-ac_cv_sizeof_float=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_long=4
-ac_cv_sizeof_long_double=12
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_short=2
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_void_p=4
#
ac_cv_func_setpgrp_void=yes
ac_cv_prog_cc_cross=yes
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.m68k dpkg-cross-2.6.15/config/cross-config.m68k
--- dpkg-cross-2.6.15/config/cross-config.m68k 2019-04-06 07:21:56.000000000 +0200
+++ dpkg-cross-2.6.15/config/cross-config.m68k 2020-05-03 10:08:44.000000000 +0200
@@ -7,16 +7,3 @@
#
ac_cv_c_bigendian=yes
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
-ac_cv_sizeof_long_double=12
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.mips dpkg-cross-2.6.15/config/cross-config.mips
--- dpkg-cross-2.6.15/config/cross-config.mips 2009-02-10 17:51:19.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.mips 2020-05-03 10:08:40.000000000 +0200
@@ -5,12 +5,6 @@
#
ac_cv_c_bigendian=yes
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_char_p=4
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_unsigned_int=4
path=`dirname $ac_site_file`
# now allow package-specific architecture-independent values to be set
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.mipsel dpkg-cross-2.6.15/config/cross-config.mipsel
--- dpkg-cross-2.6.15/config/cross-config.mipsel 2009-02-10 22:04:18.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.mipsel 2020-05-03 10:08:48.000000000 +0200
@@ -5,12 +5,6 @@
#
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=no
-ac_cv_sizeof_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_char_p=4
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_unsigned_int=4
path=`dirname $ac_site_file`
# now allow package-specific architecture-independent values to be set
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.powerpc dpkg-cross-2.6.15/config/cross-config.powerpc
--- dpkg-cross-2.6.15/config/cross-config.powerpc 2009-02-10 17:51:19.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.powerpc 2020-05-03 10:08:36.000000000 +0200
@@ -9,18 +9,6 @@
#
ac_cv_c_bigendian=yes
ac_cv_c_char_unsigned=yes
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_long=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_float=4
-ac_cv_sizeof_double=8
# for glib2.0
if [ "$PACKAGE" = "glib2.0" -o "$PACKAGE_NAME" = "glib2.0" ]; then
diff --minimal -Nru dpkg-cross-2.6.15/config/cross-config.sh dpkg-cross-2.6.15/config/cross-config.sh
--- dpkg-cross-2.6.15/config/cross-config.sh 2015-01-22 20:18:13.000000000 +0100
+++ dpkg-cross-2.6.15/config/cross-config.sh 2020-05-03 10:08:11.000000000 +0200
@@ -6,21 +6,6 @@
ac_cv_func_setpgrp_void=yes
ac_cv_prog_cc_cross=yes
ac_cv_search_clock_gettime=no
-ac_cv_sizeof_char=1
-ac_cv_sizeof_double=8
-ac_cv_sizeof_float=4
-ac_cv_sizeof_int=4
-ac_cv_sizeof_long=4
-ac_cv_sizeof_long_double=12
-ac_cv_sizeof_long_long=8
-ac_cv_sizeof_short=2
-ac_cv_sizeof_signed_char=1
-ac_cv_sizeof_unsigned_int=4
-ac_cv_sizeof_unsigned_long=4
-ac_cv_sizeof_unsigned_long_long=8
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_unsigned_short=2
-ac_cv_sizeof_void_p=4
# DB2, DB3
db_cv_alignp_t=int
db_cv_fcntl_f_setfd=yes
diff --minimal -Nru dpkg-cross-2.6.15/debian/changelog dpkg-cross-2.6.15/debian/changelog
--- dpkg-cross-2.6.15/debian/changelog 2019-05-26 23:33:37.000000000 +0200
+++ dpkg-cross-2.6.15/debian/changelog 2020-05-03 10:09:29.000000000 +0200
@@ -1,3 +1,11 @@
+dpkg-cross (2.6.15-3.1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * Remove all ac_cv_sizeof_* variables. (Closes: #-1)
+ Thanks to Jessica Clarke for identifying the gcc-V FTCBFS cause.
+
+ -- Helmut Grohne <helmut@subdivi.de> Sun, 03 May 2020 10:09:29 +0200
+
dpkg-cross (2.6.15-3) unstable; urgency=medium
[ Helmut Grohne ]
Reply to: