On 8/28/19 2:07 PM, Christophe Lyon wrote: > Hi, > > This patch causes an ICE when building libgcc's unwind-arm.o > when configuring GCC: > --target arm-none-linux-gnueabihf --with-mode thumb --with-cpu > cortex-a15 --with-fpu neon-vfpv4: > > The build works for the same target, but --with-mode arm --with-cpu > cortex a9 --with-fpu vfp > > In file included from > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/config/arm/unwind-arm.c:144: > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc: > In function 'get_eit_entry': > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc:245:29: > warning: cast discards 'const' qualifier from pointer target type > [-Wcast-qual] > 245 | ucbp->pr_cache.ehtp = (_Unwind_EHT_Header *)&eitp->content; > | ^ > during RTL pass: expand > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc: > In function 'unwind_phase2_forced': > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/unwind-arm-common.inc:319:18: > internal compiler error: in gen_movdi, at config/arm/arm.md:5235 > 319 | saved_vrs.core = entry_vrs->core; > | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ > 0x126530f gen_movdi(rtx_def*, rtx_def*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.md:5235 > 0x896d92 insn_gen_fn::operator()(rtx_def*, rtx_def*) const > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/recog.h:318 > 0x896d92 emit_move_insn_1(rtx_def*, rtx_def*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:3694 > 0x897083 emit_move_insn(rtx_def*, rtx_def*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:3790 > 0xfc25d6 gen_cpymem_ldrd_strd(rtx_def**) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.c:14582 > 0x126a1f1 gen_cpymemqi(rtx_def*, rtx_def*, rtx_def*, rtx_def*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.md:6688 > 0xb0bc08 maybe_expand_insn(insn_code, unsigned int, expand_operand*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/optabs.c:7440 > 0x89ba1e emit_block_move_via_cpymem > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1808 > 0x89ba1e emit_block_move_hints(rtx_def*, rtx_def*, rtx_def*, > block_op_methods, unsigned int, long, unsigned long, unsigned long, > unsigned long, bool, bool*) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1627 > 0x89c383 emit_block_move(rtx_def*, rtx_def*, rtx_def*, block_op_methods) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:1667 > 0x89fb4e store_expr(tree_node*, rtx_def*, int, bool, bool) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:5845 > 0x88c1f9 store_field > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:7149 > 0x8a0c22 expand_assignment(tree_node*, tree_node*, bool) > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/expr.c:5304 > 0x761964 expand_gimple_stmt_1 > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:3779 > 0x761964 expand_gimple_stmt > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:3875 > 0x768583 expand_gimple_basic_block > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:5915 > 0x76abc6 execute > /tmp/6852788_4.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/cfgexpand.c:6538 > > Christophe > Okay, sorry for the breakage. What is happening in gen_cpymem_ldrd_strd is of course against the rules: It uses emit_move_insn on only 4-byte aligned DI-mode memory operands. I have a patch for this, which is able to fix the libgcc build on a cross, but have no possibility to bootstrap the affected target. Could you please help? Thanks Bernd.