Boot OpenSolaris 2008.11 (64 bit OS) in 32 bit mode.

Configure gcc this way:

# gcc/xgcc -v
Using built-in specs.
Target: i386-pc-solaris2.11
Configured with: ../gcc_trunk/configure
--enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --enable-shared
--disable-static --enable-decimal-float --with-long-double-128 --enable-nls
--with-included-gettext --enable-gather-detailed-mem-stats --with-stabs
--enable-debug --enable-largefile --enable-symvers --without-system-zlib
--enable-gtk-cairo --enable-gconf-peer --enable-xmlj --enable-gtk-peer
--enable-qt-peer --enable-plugin --enable-tool-wrappers --enable-local-sockets
--enable-gjdoc --enable-java-awt=gtk,xlib,qt,x --enable-gc-debug
--enable-libgcj-debug --enable-objc-gc --enable-libstdcxx-debug
--disable-stage1-checking --enable-checking=release --without-system-libunwind
--with-gnu-as --with-as=/usr/local/bin/as --with-gnu-ld
--with-ld=/usr/local/bin/ld
Thread model: posix
gcc version 4.4.0 20090117 (experimental) [trunk revision 143454] (GCC) 


Build and then grep your log.

# gmake 2>&1 | tee made_log.txt
(wait until libffi is built both 32 and 64 bit)

# ggrep --colour size\ of\ long\ double made_log.txt
made_log.txt:checking size of long double... 12
made_log.txt:checking size of long double... 16


Load all the files into editor:

# gedit i386-pc-solaris2.11/libffi/config.log
# gedit i386-pc-solaris2.11/amd64/libffi/config.log 
# gedit /usr/share/src/gcc_trunk/libffi/configure


The _32_ bit 'libffi/config.log' shows:
...
configure:12455: checking size of long double
configure:12778: /usr/share/src/gcc_build/./gcc/xgcc
-B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/
-B/usr/local/i386-pc-solaris2.11/lib/ -isystem
/usr/local/i386-pc-solaris2.11/include -isystem
/usr/local/i386-pc-solaris2.11/sys-include -o conftest -g -O2     conftest.c 
>&5
configure:12781: $? = 0
configure:12783: ./conftest
configure:12786: $? = 0
configure:12811: result: 12
...


The _64_ bit 'libffi/config.log' shows:
...
configure:12455: checking size of long double
configure:12485: /usr/share/src/gcc_build/./gcc/xgcc
-B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/
-B/usr/local/i386-pc-solaris2.11/lib/ -isystem
/usr/local/i386-pc-solaris2.11/include -isystem
/usr/local/i386-pc-solaris2.11/sys-include  -m64 -c -g -O2    conftest.c >&5
configure:12491: $? = 0
configure:12495: test -z 
                         || test ! -s conftest.err
configure:12498: $? = 0
configure:12501: test -s conftest.o
configure:12504: $? = 0
configure:12526: /usr/share/src/gcc_build/./gcc/xgcc
-B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/
-B/usr/local/i386-pc-solaris2.11/lib/ -isystem
/usr/local/i386-pc-solaris2.11/include -isystem
/usr/local/i386-pc-solaris2.11/sys-include  -m64 -c -g -O2    conftest.c >&5
conftest.c: In function 'main':
conftest.c:70: error: size of array 'test_array' is negative
configure:12532: $? = 1
configure: failed program was:
| /* confdefs.h.  */
(MANY more lines, and failed tests)
configure:12708: $? = 0
configure:12689: /usr/share/src/gcc_build/./gcc/xgcc
-B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/
-B/usr/local/i386-pc-solaris2.11/lib/ -isystem
/usr/local/i386-pc-solaris2.11/include -isystem
/usr/local/i386-pc-solaris2.11/sys-include  -m64 -c -g -O2    conftest.c >&5
configure:12695: $? = 0
configure:12699: test -z 
                         || test ! -s conftest.err
configure:12702: $? = 0
configure:12705: test -s conftest.o
configure:12708: $? = 0
configure:12689: /usr/share/src/gcc_build/./gcc/xgcc
-B/usr/share/src/gcc_build/./gcc/ -B/usr/local/i386-pc-solaris2.11/bin/
-B/usr/local/i386-pc-solaris2.11/lib/ -isystem
/usr/local/i386-pc-solaris2.11/include -isystem
/usr/local/i386-pc-solaris2.11/sys-include  -m64 -c -g -O2    conftest.c >&5
configure:12695: $? = 0
configure:12699: test -z 
                         || test ! -s conftest.err
configure:12702: $? = 0
configure:12705: test -s conftest.o
configure:12708: $? = 0
configure:12811: result: 16
...


The "Bug":

The ./configure script "calculates" that 'long doubles' 
are size 12 for the 32 bit program that was _tested_.

The ./configure script _guesses_ that 'long doubles' 
are size 16 for the 64 bit program that was never ran
in 32 bit boot mode.


Thanks,
Rob


-- 
           Summary: gcc 4.4.0 20090117 - libffi guesses sizeof 'long double'
                    incorrectly (32bit/64bit)
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: bootstrap
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rob1weld at aol dot com
 GCC build triplet: i386-pc-solaris2.11
  GCC host triplet: i386-pc-solaris2.11
GCC target triplet: i386-pc-solaris2.11


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38893

Reply via email to