[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: