I compile a cross compiler --host=x86_64-redhat-linux-gnu
--target=x86_64-pc-mingw32,
Then use this cross compiler to compile a native binutils and gcc,
Then I run the native x86_64-pc-mingw32-g++.exe which call native
as.exe under winxp x64.
It produce such error :
$ /c/tools/target/bin/x86_64-pc-mingw32-g++.exe -v -Wall hello.cpp
Using built-in specs.
Target: x86_64-pc-mingw32
Configured with: ../gcc/configure --host=x86_64-pc-mingw32
--enable-languages=c,c++ --disable-nls --disable-multilib
--disable-libstdcxx-pch --enable-long-long
--with-gmp=/home/drangon/mingw/target/forgcc
--prefix=/home/drangon/mingw/target
Thread model: win32
gcc version 4.3.0 20070914 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-v' '-Wall' '-mtune=generic'
c:/tools/target/bin/../libexec/gcc/x86_64-pc-mingw32/4.3.0/cc1plus.exe
-quiet -v -iprefix
c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/ hello.cpp
-quiet -dumpbase hello.cpp -mtune=generic -auxbase hello -Wall
-version -o C:/DOCUME~1/drangon/LOCALS~1/Temp/ccMH.s
ignoring nonexistent directory
"c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0"
ignoring nonexistent directory
"c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0/x86_64-pc-mingw32"
ignoring nonexistent directory
"c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0/backward"
ignoring nonexistent directory
"c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0"
ignoring nonexistent directory
"c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0/x86_64-pc-mingw32"
ignoring nonexistent directory
"c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include/c++/4.3.0/backward"
ignoring nonexistent directory "/home/drangon/mingw/target/include"
ignoring nonexistent directory "/mingw/include64"
#include "..." search starts here:
#include <...> search starts here:
c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../include
c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/include
c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/include-fixed
c:\tools\target\bin\../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include
c:/tools/target/lib/gcc/../../include
c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/include
c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/include-fixed
c:/tools/target/lib/gcc/../../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include
End of search list.
GNU C++ (GCC) version 4.3.0 20070914 (experimental) (x86_64-pc-mingw32)
compiled by GNU C version 4.3.0 20070914 (experimental), GMP
version 4.2.2, MPFR version 2.3.0.
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 952c5c349b801e679ce084d69ae4e018
hello.cpp: In function 'int main(int, char**)':
hello.cpp:9: warning: format '%d' expects type 'int', but argument 2
has type 'long long unsigned int'
hello.cpp:9: warning: format '%d' expects type 'int', but argument 3
has type 'long long unsigned int'
hello.cpp:9: warning: format '%d' expects type 'int', but argument 4
has type 'long long unsigned int'
COLLECT_GCC_OPTIONS='-v' '-Wall' '-mtune=generic'
c:/tools/target/bin/../lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/bin/as.exe
-o C:/DOCUME~1/drangon/LOCALS~1/Temp/ccofbaaa.o
C:/DOCUME~1/drangon/LOCALS~1/Temp/ccMH.s
C:/DOCUME~1/drangon/LOCALS~1/Temp/ccMH.s: Assembler messages:
C:/DOCUME~1/drangon/LOCALS~1/Temp/ccMH.s:2: Internal error!
Assertion failure in obj_coff_endef at
../../binutils/gas/config/obj-coff.c line 780.
Please report this bug.
=
I read the source code binutils/gas/config/obj-coff.c 780 line it is :
778 if (SF_GET_FUNCTION (def_symbol_in_progress))
779 {
780 know (sizeof (def_symbol_in_progress) <= sizeof (long));
781 set_function (def_symbol_in_progress);
782 SF_SET_PROCESS (def_symbol_in_progress);
x86_64-pc-mingw32 has a ABI that pointer is 8 bytes and int / long is 4 bytes,
so maybe sizeof( pointer ) <= sizeof(long) is not true.
I remove this line and compile a new as.exe, then run g++, it print
out this log :
$ /c/tools/target/bin/x86_64-pc-mingw32-g++.exe -v -Wall hello.cpp
Using built-in specs.
Target: x86_64-pc-mingw32
Configured with: ../gcc/configure --host=x86_64-pc-mingw32
--enable-languages=c,c++ --disable-nls --disable-multilib
--disable-libstdcxx-pch --enable-long-long
--with-gmp=/home/drangon/mingw/target/forgcc
--prefix=/home/drangon/mingw/target
Thread model: win32
gcc version 4.3.0 20070914 (experimental) (