Cross-compilation ARM and D issues
Vincent Richomme
forumer at smartmobili.com
Wed Jul 9 14:25:53 PDT 2008
Hi,
When applying latest trunk to cegcc with mingw32ce configuration project
I get some issues but I think that more generally this report could help
people to cross-compile D on different architectures :
1) in libphobos/std/c/windows/com.d
It seems that Windows InterlockedIncrement function generates bad
instruction
make[3]: Entering directory
`/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/arm-mingw32ce/libphobos'
true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc"
"CC_FOR_TARGET=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/xgcc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include" "CFLAGS=-O2 -g -O2 "
"CXXFLAGS=-g -O2 " "CFLAGS_FOR_BUILD=-g -O2" "CFLAGS_FOR_TARGET=-O2 -g
-O2 " "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS=" "LIBCFLAGS=-O2 -g -O2 "
"LIBCFLAGS_FOR_TARGET=-O2 -g -O2 " "MAKE=make" "MAKEINFO=makeinfo
--split-size=5000000 --split-size=5000000 " "PICFLAG="
"PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "RUNTESTFLAGS="
"exec_prefix=/opt/mingw32ce" "infodir=/opt/mingw32ce/info"
"libdir=/opt/mingw32ce/lib" "includedir=/opt/mingw32ce/include"
"prefix=/opt/mingw32ce" "tooldir=/opt/mingw32ce/arm-mingw32ce"
"gdc_include_dir=/opt/mingw32ce/include/d2/4.1.0" "AR=arm-mingw32ce-ar"
"AS=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/as"
"LD=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/collect-ld"
"RANLIB=arm-mingw32ce-ranlib"
"NM=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/nm"
"NM_FOR_BUILD=" "NM_FOR_TARGET=arm-mingw32ce-nm" "DESTDIR=" "WERROR="
DO=all multi-do # make
/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/gdc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include -o std/c/windows/com.o -g
-frelease -O2 -nostdinc -pipe \
-I /d/Professionnel/Projets/cegcc/src/gcc/libphobos -I
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/internal/gc -I
./arm-mingw32ce -c
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/windows/com.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/windows/com.d: In
member function 'AddRef':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/windows/com.d:224:
error: unrecognizable insn:
(call_insn/j 13 12 14 0
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/windows/com.d:223
(parallel [
(set (reg:SI 0 r0)
(call (mem:SI (reg/f:SI 105) [0 S4 A32])
(const_int 0 [0x0])))
(return)
(use (const_int 0 [0x0]))
]) -1 (nil)
(nil)
(expr_list:REG_DEP_TRUE (use (reg:SI 0 r0))
(nil)))
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/windows/com.d:224:
internal compiler error: in extract_insn, at recog.c:2084
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make[3]: *** [std/c/windows/com.o] Error 1
make[3]: Leaving directory
`/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/arm-mingw32ce/libphobos'
make[2]: *** [all] Error 2
make[2]: Leaving directory
`/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/arm-mingw32ce/libphobos'
make[1]: *** [all-target-libphobos] Error 2
make[1]: Leaving directory
`/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc'
make: *** [all] Error 2
------------------------------------------------------------------------------
2)Same kind of error in libphobos/std/mmfile.d due to FlushViewOfFile
function
/* Flush any pending output. */
void flush()
{
debug (MMFILE) printf("MmFile.flush()\n");
version (Win32)
{
FlushViewOfFile(data.ptr, data.length);<< BAD INSN
}
...
}
true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc"
"CC_FOR_TARGET=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/xgcc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include" "CFLAGS=-O2 -g -O2 "
"CXXFLAGS=-g -O2 " "CFLAGS_FOR_BUILD=-g -O2" "CFLAGS_FOR_TARGET=-O2 -g
-O2 " "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS=" "LIBCFLAGS=-O2 -g -O2 "
"LIBCFLAGS_FOR_TARGET=-O2 -g -O2 " "MAKE=make" "MAKEINFO=makeinfo
--split-size=5000000 --split-size=5000000 " "PICFLAG="
"PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "RUNTESTFLAGS="
"exec_prefix=/opt/mingw32ce" "infodir=/opt/mingw32ce/info"
"libdir=/opt/mingw32ce/lib" "includedir=/opt/mingw32ce/include"
"prefix=/opt/mingw32ce" "tooldir=/opt/mingw32ce/arm-mingw32ce"
"gdc_include_dir=/opt/mingw32ce/include/d2/4.1.0" "AR=arm-mingw32ce-ar"
"AS=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/as"
"LD=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/collect-ld"
"RANLIB=arm-mingw32ce-ranlib"
"NM=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/nm"
"NM_FOR_BUILD=" "NM_FOR_TARGET=arm-mingw32ce-nm" "DESTDIR=" "WERROR="
DO=all multi-do # make
/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/gdc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include -o std/mmfile.o -g -frelease
-O2 -nostdinc -pipe \
-I /d/Professionnel/Projets/cegcc/src/gcc/libphobos -I
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/internal/gc -I
./arm-mingw32ce -c
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/mmfile.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/mmfile.d: In member
function 'flush':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/mmfile.d:414:
error: unrecognizable insn:
(call_insn/j 15 14 16 0
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/mmfile.d:397
(parallel [
(set (reg:SI 0 r0)
(call (mem:SI (reg/f:SI 104) [0 S4 A32])
(const_int 0 [0x0])))
(return)
(use (const_int 0 [0x0]))
]) -1 (nil)
(nil)
(expr_list:REG_DEP_TRUE (use (reg:SI 1 r1))
(expr_list:REG_DEP_TRUE (use (reg:SI 0 r0))
(nil))))
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/mmfile.d:414:
internal compiler error: in extract_insn, at recog.c:2084
Please submit a full bug report,
with preprocessed source if appropriate.
------------------------------------------------------------------------------
3) Same kind of error in libphobos/std/perf.d:202:
static void _qpc(out epoch_type interval)
{
QueryPerformanceCounter(&interval);
}
true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc"
"CC_FOR_TARGET=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/xgcc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include" "CFLAGS=-O2 -g -O2 "
"CXXFLAGS=-g -O2 " "CFLAGS_FOR_BUILD=-g -O2" "CFLAGS_FOR_TARGET=-O2 -g
-O2 " "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS=" "LIBCFLAGS=-O2 -g -O2 "
"LIBCFLAGS_FOR_TARGET=-O2 -g -O2 " "MAKE=make" "MAKEINFO=makeinfo
--split-size=5000000 --split-size=5000000 " "PICFLAG="
"PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "RUNTESTFLAGS="
"exec_prefix=/opt/mingw32ce" "infodir=/opt/mingw32ce/info"
"libdir=/opt/mingw32ce/lib" "includedir=/opt/mingw32ce/include"
"prefix=/opt/mingw32ce" "tooldir=/opt/mingw32ce/arm-mingw32ce"
"gdc_include_dir=/opt/mingw32ce/include/d2/4.1.0" "AR=arm-mingw32ce-ar"
"AS=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/as"
"LD=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/collect-ld"
"RANLIB=arm-mingw32ce-ranlib"
"NM=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/nm"
"NM_FOR_BUILD=" "NM_FOR_TARGET=arm-mingw32ce-nm" "DESTDIR=" "WERROR="
DO=all multi-do # make
/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/gdc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include -o std/perf.o -g -frelease -O2
-nostdinc -pipe \
-I /d/Professionnel/Projets/cegcc/src/gcc/libphobos -I
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/internal/gc -I
./arm-mingw32ce -c
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/perf.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/perf.d: In function
'_qpc':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/perf.d:203: error:
unrecognizable insn:
(call_insn/j 14 13 15 0
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/perf.d:202 (parallel [
(set (reg:SI 0 r0)
(call (mem:SI (reg/f:SI 102) [0 S4 A32])
(const_int 0 [0x0])))
(return)
(use (const_int 0 [0x0]))
]) -1 (nil)
(nil)
(expr_list:REG_DEP_TRUE (use (reg:SI 0 r0))
(nil)))
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/perf.d:203:
internal compiler error: in extract_insn, at recog.c:2084
Please submit a full bug report
------------------------------------------------------------------------------
4) Missing variable declaration in libphobos/gcc/deh.d:327
private _Unwind_Reason_Code personalityImpl(int iversion,
_Unwind_Action actions,
bool foreign_exception,
_Unwind_Exception *ue_header,
_Unwind_Context *context)
{
enum Found
{
nothing,
terminate,
cleanup,
handler
}
Found found_type;
lsda_header_info info;
OurUnwindException * xh = OurUnwindException.fromHeader(ue_header);
//ubyte *language_specific_data;
ubyte *p;
ubyte *action_record;
//int handler_switch_value;
_Unwind_Ptr /*landing_pad, */ip;
Phase1Info phase1;
As you can see landing_pad and ip are commented ...
------------------------------------------------------------------------------
5) function defined in a plateform dependent manner(x86)
In thread.d void *os_query_stackBottom() is defined as x86 ASM so it
cannot work other architecture...
true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc"
"CC_FOR_TARGET=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/xgcc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include" "CFLAGS=-O2 -g -O2 "
"CXXFLAGS=-g -O2 " "CFLAGS_FOR_BUILD=-g -O2" "CFLAGS_FOR_TARGET=-O2 -g
-O2 " "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS=" "LIBCFLAGS=-O2 -g -O2 "
"LIBCFLAGS_FOR_TARGET=-O2 -g -O2 " "MAKE=make" "MAKEINFO=makeinfo
--split-size=5000000 --split-size=5000000 " "PICFLAG="
"PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "RUNTESTFLAGS="
"exec_prefix=/opt/mingw32ce" "infodir=/opt/mingw32ce/info"
"libdir=/opt/mingw32ce/lib" "includedir=/opt/mingw32ce/include"
"prefix=/opt/mingw32ce" "tooldir=/opt/mingw32ce/arm-mingw32ce"
"gdc_include_dir=/opt/mingw32ce/include/d2/4.1.0" "AR=arm-mingw32ce-ar"
"AS=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/as"
"LD=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/collect-ld"
"RANLIB=arm-mingw32ce-ranlib"
"NM=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/nm"
"NM_FOR_BUILD=" "NM_FOR_TARGET=arm-mingw32ce-nm" "DESTDIR=" "WERROR="
DO=all multi-do # make
/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/gdc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include -o std/thread.o -g -frelease
-O2 -nostdinc -pipe \
-I /d/Professionnel/Projets/cegcc/src/gcc/libphobos -I
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/internal/gc -I
./arm-mingw32ce -c
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:522:
function std.thread.os_query_stackBottom expected to return a value of
type void*
make[3]: *** [std/thread.o] Error 1
void *os_query_stackBottom()
{
asm
{
naked ;
mov EAX,FS:4 ;
ret ;
}
}
------------------------------------------------------------------------------
6)BAD instruction in libphobos/std/thread.d:399 :
static void yield()
{
Sleep(0);
}
true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc"
"CC_FOR_TARGET=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/xgcc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include" "CFLAGS=-O2 -g -O2 "
"CXXFLAGS=-g -O2 " "CFLAGS_FOR_BUILD=-g -O2" "CFLAGS_FOR_TARGET=-O2 -g
-O2 " "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS=" "LIBCFLAGS=-O2 -g -O2 "
"LIBCFLAGS_FOR_TARGET=-O2 -g -O2 " "MAKE=make" "MAKEINFO=makeinfo
--split-size=5000000 --split-size=5000000 " "PICFLAG="
"PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "RUNTESTFLAGS="
"exec_prefix=/opt/mingw32ce" "infodir=/opt/mingw32ce/info"
"libdir=/opt/mingw32ce/lib" "includedir=/opt/mingw32ce/include"
"prefix=/opt/mingw32ce" "tooldir=/opt/mingw32ce/arm-mingw32ce"
"gdc_include_dir=/opt/mingw32ce/include/d2/4.1.0" "AR=arm-mingw32ce-ar"
"AS=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/as"
"LD=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/collect-ld"
"RANLIB=arm-mingw32ce-ranlib"
"NM=/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/nm"
"NM_FOR_BUILD=" "NM_FOR_TARGET=arm-mingw32ce-nm" "DESTDIR=" "WERROR="
DO=all multi-do # make
/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/gdc
-B/d/Professionnel/Projets/cegcc/src/build-mingw32ce/gcc/./gcc/
-B/opt/mingw32ce/arm-mingw32ce/bin/ -B/opt/mingw32ce/arm-mingw32ce/lib/
-isystem /opt/mingw32ce/arm-mingw32ce/include -isystem
/opt/mingw32ce/arm-mingw32ce/sys-include -o std/thread.o -g -frelease
-O2 -nostdinc -pipe \
-I /d/Professionnel/Projets/cegcc/src/gcc/libphobos -I
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/internal/gc -I
./arm-mingw32ce -c
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d: In
function 'yield':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:400:
error: unrecognizable insn:
(call_insn/j 11 10 12 0
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:399
(parallel [
(call (mem:SI (reg/f:SI 101) [0 S4 A32])
(const_int 0 [0x0]))
(return)
(use (const_int 0 [0x0]))
]) -1 (nil)
(nil)
(expr_list:REG_DEP_TRUE (use (reg:SI 0 r0))
(nil)))
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:400:
internal compiler error: in extract_insn, at recog.c:2084
Please submit a full bug report,
with preprocessed source if appropriate.
------------------------------------------------------------------------------
7) same kind - BAD INSN
~this()
{
if (state != TS.FINISHED)
CloseHandle(hdl); <<<<<< BAD INSN
}
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d: In member
function '_dtor':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:127:
error: unrecognizable insn:
(call_insn/j 19 18 20 1
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:126
(parallel [
(set (reg:SI 0 r0)
(call (mem:SI (reg/f:SI 104) [0 S4 A32])
(const_int 0 [0x0])))
(return)
(use (const_int 0 [0x0]))
]) -1 (nil)
(nil)
(expr_list:REG_DEP_TRUE (use (reg:SI 0 r0))
(nil)))
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/thread.d:127:
internal compiler error: in extract_insn, at recog.c:2084
Please submit a full bug report,
------------------------------------------------------------------------------
8)invariant not recomputed when ADDR_EXPR changed error
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/stdio.d
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/stdio.d: In
function 'stdout':
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/stdio.d:205:
error: invariant not recomputed when ADDR_EXPR changed
&_iobD.894[0];
/d/Professionnel/Projets/cegcc/src/gcc/libphobos/std/c/stdio.d:205:
internal compiler error: verify_stmts failed
Please submit a full bug report,
with preprocessed source if appropriate.
9) To be continued ...
More information about the D.gnu
mailing list