[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #19 from dhowells at redhat dot com dhowells at redhat dot com --- This seems to have done the trick, thanks!
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #20 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Unfortunately, at the face of it, I think the only factors common with PR61844 are rot at the RTL level and building libgcc. (My own involvement with SH64 is too far in the past and then only peripheral to the GCC port.)
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #21 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to Hans-Peter Nilsson from comment #20) Unfortunately, at the face of it, I think the only factors common with PR61844 are rot at the RTL level and building libgcc. Apparently also when handling PIC (register 12 on SH says grep). Unfortunately that's unlikely to help anyone not involved with SH64.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #22 from dhowells at redhat dot com dhowells at redhat dot com --- That's a shame. It's just that the error messages look very similar.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #16 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Author: hp Date: Thu Jul 17 02:03:52 2014 New Revision: 212708 URL: https://gcc.gnu.org/viewcvs?rev=212708root=gccview=rev Log: PR target/61737. * config/cris/cris.c (TARGET_LEGITIMATE_CONSTANT_P) (TARGET_CANNOT_FORCE_CONST_MEM): Define. (cris_cannot_force_const_mem, cris_legitimate_constant_p): New functions. (cris_print_index, cris_print_operand, cris_constant_index_p) (cris_side_effect_mode_ok): Replace CONSTANT_P with CRIS_CONSTANT_P. (cris_address_cost): Ditto last CONSTANT_P. (cris_symbol_type_of): Rename from cris_pic_symbol_type_of. All callers changed. Yield cris_offsettable_symbol for non-PIC constant symbolic expressions including labels. Yield cris_unspec for all unspecs. (cris_expand_pic_call_address): New parameter MARKERP. Set its target to pic_offset_table_rtx for calls that will likely go through PLT, const0_rtx when they can't. All callers changed. Assert flag_pic. Use CONSTANT_P, not CONSTANT_ADDRESS_P, for symbolic expressions to be PICified. Remove second, redundant, assert on can_create_pseudo_p returning non-zero. Use replace_equiv_address_nv, not replace_equiv_address, for final operand update. * config/cris/cris.md (movsi): Move variable t to pattern toplevel. Adjust assert for new cris_symbol_type member. Use CONSTANT_P instead of CONSTANT_ADDRESS_P. (*movsi_internal) case 9: Make check for valid unspec operands for lapc stricter. case CRIS_UNSPEC_PCREL, CRIS_UNSPEC_PLT_PCREL: Clear condition codes. (call, call_value): Use second incoming operand as a marker for pic-offset-table-register being used. (*expanded_call_non_v32, *expanded_call_v32) (*expanded_call_value_non_v32, *expanded_call_value_v32): For second incoming operand to CALL, match cris_call_type_marker. (*expanded_call_value_side): Ditto. Disable before reload_completed. (*expanded_call_side): Ditto. Fix typo in comment. (moverside, movemside peepholes): Check for CRIS_CONSTANT_P, not CONSTANT_P. * config/cris/predicates.md (cris_call_type_marker): New predicate. * config/cris/cris.h (CRIS_CONSTANT_P): New macro. (enum cris_symbol_type): Rename from cris_pic_symbol_type. All users changed. Add members cris_offsettable_symbol and cris_unspec. (cris_symbol_type): Rename from cris_pic_symbol_type. * config/cris/constraints.md (T): Use CRIS_CONSTANT_P, not just CONSTANT_P. * config/cris/cris-protos.h (cris_symbol_type_of, cris_expand_pic_call_address): Adjust prototypes. (cris_legitimate_constant_p): New prototype. Modified: trunk/gcc/ChangeLog trunk/gcc/config/cris/constraints.md trunk/gcc/config/cris/cris-protos.h trunk/gcc/config/cris/cris.c trunk/gcc/config/cris/cris.h trunk/gcc/config/cris/cris.md trunk/gcc/config/cris/predicates.md
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #17 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Author: hp Date: Thu Jul 17 03:53:23 2014 New Revision: 212713 URL: https://gcc.gnu.org/viewcvs?rev=212713root=gccview=rev Log: Backport from trunk. PR target/61737. * config/cris/cris.c (TARGET_LEGITIMATE_CONSTANT_P) (TARGET_CANNOT_FORCE_CONST_MEM): Define. (cris_cannot_force_const_mem, cris_legitimate_constant_p): New functions. (cris_print_index, cris_print_operand, cris_constant_index_p) (cris_side_effect_mode_ok): Replace CONSTANT_P with CRIS_CONSTANT_P. (cris_address_cost): Ditto last CONSTANT_P. (cris_symbol_type_of): Rename from cris_pic_symbol_type_of. All callers changed. Yield cris_offsettable_symbol for non-PIC constant symbolic expressions including labels. Yield cris_unspec for all unspecs. (cris_expand_pic_call_address): New parameter MARKERP. Set its target to pic_offset_table_rtx for calls that will likely go through PLT, const0_rtx when they can't. All callers changed. Assert flag_pic. Use CONSTANT_P, not CONSTANT_ADDRESS_P, for symbolic expressions to be PICified. Remove second, redundant, assert on can_create_pseudo_p returning non-zero. Use replace_equiv_address_nv, not replace_equiv_address, for final operand update. * config/cris/cris.md (movsi): Move variable t to pattern toplevel. Adjust assert for new cris_symbol_type member. Use CONSTANT_P instead of CONSTANT_ADDRESS_P. (*movsi_internal) case 9: Make check for valid unspec operands for lapc stricter. case CRIS_UNSPEC_PCREL, CRIS_UNSPEC_PLT_PCREL: Clear condition codes. (call, call_value): Use second incoming operand as a marker for pic-offset-table-register being used. (*expanded_call_non_v32, *expanded_call_v32) (*expanded_call_value_non_v32, *expanded_call_value_v32): For second incoming operand to CALL, match cris_call_type_marker. (*expanded_call_value_side): Ditto. Disable before reload_completed. (*expanded_call_side): Ditto. Fix typo in comment. (moverside, movemside peepholes): Check for CRIS_CONSTANT_P, not CONSTANT_P. * config/cris/predicates.md (cris_call_type_marker): New predicate. * config/cris/cris.h (CRIS_CONSTANT_P): New macro. (enum cris_symbol_type): Rename from cris_pic_symbol_type. All users changed. Add members cris_offsettable_symbol and cris_unspec. (cris_symbol_type): Rename from cris_pic_symbol_type. * config/cris/constraints.md (T): Use CRIS_CONSTANT_P, not just CONSTANT_P. * config/cris/cris-protos.h (cris_symbol_type_of, cris_expand_pic_call_address): Adjust prototypes. (cris_legitimate_constant_p): New prototype. Modified: branches/gcc-4_9-branch/gcc/ChangeLog branches/gcc-4_9-branch/gcc/config/cris/constraints.md branches/gcc-4_9-branch/gcc/config/cris/cris-protos.h branches/gcc-4_9-branch/gcc/config/cris/cris.c branches/gcc-4_9-branch/gcc/config/cris/cris.h branches/gcc-4_9-branch/gcc/config/cris/cris.md branches/gcc-4_9-branch/gcc/config/cris/predicates.md
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 Hans-Peter Nilsson hp at gcc dot gnu.org changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED Target Milestone|--- |4.9.2 --- Comment #18 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Prerequisite config.gcc patch committed separately.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #10 from dhowells at redhat dot com dhowells at redhat dot com --- (In reply to Hans-Peter Nilsson from comment #7) (In reply to dhowe...@redhat.com from comment #0) I'm also very intrigued by that last line - I can reproduce it quite easily. This is a RH local patch in your host gcc (by Jakub, IIRC) to help users re-running the actual ICEing command adding -save-temps. I'm guessing it has a bug and accidentally drops some option required to reproduce the ICE... It's in the gcc-4.9.0-20140702 tarball.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #11 from dhowells at redhat dot com dhowells at redhat dot com --- (In reply to Hans-Peter Nilsson from comment #3) libgcc is built with: make -C cris-linux-gnu tooldir=/usr all-target-libgcc I'd expect make all-target-libgcc to Just Work. So would I. However, it doesn't work for all arches that the SRPM builds a cross-compiler for. I need the compiler to build the kernel, but not normally libgcc, however, I've been asked to build libgcc if I can. The arches for which I can't build libgcc include: cris, sh, sh64 and tile.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #12 from dhowells at redhat dot com dhowells at redhat dot com --- (In reply to Hans-Peter Nilsson from comment #6) Created attachment 33121 [details] Patch to config.gcc Correct patch to config.gcc required to actually build the compiler proper. Okay, I've tried that. I can't see that it makes any obvious difference. Is there something I should look for?
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #13 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to dhowe...@redhat.com from comment #12) (In reply to Hans-Peter Nilsson from comment #6) Created attachment 33121 [details] Patch to config.gcc Correct patch to config.gcc required to actually build the compiler proper. Okay, I've tried that. I can't see that it makes any obvious difference. Is there something I should look for? Oh, it wasn't meant as a fix to the problem at hand, just a replacement for the prerequisite patch. The differences to *that* one is that the duplicate t-slibgcc t-linux are removed and the comment too, after checking why I had it; likely a libgcc-related issue with headers (and so moot after the libgcc split years ago).
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #14 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to dhowe...@redhat.com from comment #10) (In reply to Hans-Peter Nilsson from comment #7) (In reply to dhowe...@redhat.com from comment #0) I'm also very intrigued by that last line - I can reproduce it quite easily. This is a RH local patch in your host gcc (by Jakub, IIRC) to help users re-running the actual ICEing command adding -save-temps. I'm guessing it has a bug and accidentally drops some option required to reproduce the ICE... It's in the gcc-4.9.0-20140702 tarball. Oh it finally made into the FSF repo, good! Could you please consider open a separate PR for the is not reproducible misdisagnosis?
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #15 from dhowells at redhat dot com dhowells at redhat dot com --- (In reply to Hans-Peter Nilsson from comment #14) Could you please consider open a separate PR for the is not reproducible misdisagnosis? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61812
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 Hans-Peter Nilsson hp at gcc dot gnu.org changed: What|Removed |Added CC||hp at gcc dot gnu.org --- Comment #3 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to dhowe...@redhat.com from comment #1) Thanks for reporting, I'll take this. (I don't autotest cris-linux not crisv32-linux; they aren't in general use anymore.) I needed the following change to gcc (courtesy of Nick Clifton) to get cris-gcc to build at all, even without libgcc: Index: gcc/config.gcc === --- gcc/config.gcc +++ gcc/config.gcc @@ -1130,7 +1130,7 @@ crisv32-*-linux* | cris-*-linux*) tm_file=dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h cris/linux.h # We need to avoid using t-linux, so override default tmake_file - tmake_file=cris/t-cris cris/t-linux t-slibgcc t-linux + tmake_file=${tmake_file} cris/t-cris cris/t-linux t-slibgcc extra_options=${extra_options} cris/linux.opt case $target in cris-*-*) Obvious breakages (for obvious reasons with obvious correct results) is covered by the obviousness rule and thus free to commit for anyone (including you). In fact, this typo (missing prepending of ${tmake_file}), supposedly introduced at the time of some general config-revision, is shared with several targets. JFTR: This behaviour can be produced with the SVNREV 212237 (2014-07-02) gcc-4.9.0 compiler tarball plus one patch and then the following config: [...] No need for specific options besides --target nor special paths given target binutils in the PATH; you should set that instead. (Sadly, no specific options with the exception of sysroot / build-sysroot options unless hoops are jumped through, but I hope to fix that one day for all cross-targets.) Also, a multitude of options like this magnitude is a red flag. (Your cross-build setup is flawed, but I doubt that's the root of the build problem.) Anyway, I've added a reduced libgcc2.i that causes the error to occur. Thanks. I don't think it'll help because you need the intermediate-stage compiler binaries also. Incorrect. This is a *cross-compiler*. Even if it was a native build, failing building the first stage libgcc build makes the stageness issue moot. :) libgcc is built with: make -C cris-linux-gnu tooldir=/usr all-target-libgcc I'd expect make all-target-libgcc to Just Work.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #4 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to Hans-Peter Nilsson from comment #3) (In reply to dhowe...@redhat.com from comment #1) Index: gcc/config.gcc === --- gcc/config.gcc +++ gcc/config.gcc @@ -1130,7 +1130,7 @@ crisv32-*-linux* | cris-*-linux*) tm_file=dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h cris/linux.h # We need to avoid using t-linux, so override default tmake_file - tmake_file=cris/t-cris cris/t-linux t-slibgcc t-linux + tmake_file=${tmake_file} cris/t-cris cris/t-linux t-slibgcc Obvious breakages (for obvious reasons with obvious correct results) is covered by the obviousness rule and thus free to commit for anyone (including you). Except it's only obvious in the absence of a comment explaining the exception. Doh! So, there's another issue and that patch is incorrect (do *not* apply it). Also, I don't remember what aspects of t-linux needs avoiding. Looking into it...
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 Hans-Peter Nilsson hp at gcc dot gnu.org changed: What|Removed |Added Last reconfirmed||2014-7-15 --- Comment #5 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Confirmed the observation at r212508, with the patch in the attachment in the next comment.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #6 from Hans-Peter Nilsson hp at gcc dot gnu.org --- Created attachment 33121 -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33121action=edit Patch to config.gcc Correct patch to config.gcc required to actually build the compiler proper.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 Hans-Peter Nilsson hp at gcc dot gnu.org changed: What|Removed |Added Status|UNCONFIRMED |NEW Ever confirmed|0 |1
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #7 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to dhowe...@redhat.com from comment #0) BTW, Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See http://bugzilla.redhat.com/bugzilla/ for instructions. The bug is not reproducible, so it is likely a hardware or OS problem. I'm also very intrigued by that last line - I can reproduce it quite easily. This is a RH local patch in your host gcc (by Jakub, IIRC) to help users re-running the actual ICEing command adding -save-temps. I'm guessing it has a bug and accidentally drops some option required to reproduce the ICE...
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #8 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to dhowe...@redhat.com from comment #0) ../../../gcc-4.9.0-20140702/libgcc/libgcc2.c: In function ‘__subvsi3’: ../../../gcc-4.9.0-20140702/libgcc/libgcc2.c:122:1: error: unrecognizable insn: } ^ (call_insn 27 26 28 7 (parallel [ (call (mem:QI (symbol_ref:SI (abort) [flags 0x41] function_decl 0x7f5784e05d00 abort) [0 __builtin_abort S1 A8]) This symbol_ref must be wrapped inside a CONST by the middle-end. Something changed such that that doesn't happen anymore; that's the bug. Unless this was a deliberate general change in representation, which I doubt. Still investigating...
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #9 from Hans-Peter Nilsson hp at gcc dot gnu.org --- (In reply to Hans-Peter Nilsson from comment #8) This symbol_ref must be wrapped inside a CONST by the middle-end. Uh, strike that, I'm hallucinating.
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #1 from dhowells at redhat dot com dhowells at redhat dot com --- I needed the following change to gcc (courtesy of Nick Clifton) to get cris-gcc to build at all, even without libgcc: Index: gcc/config.gcc === --- gcc/config.gcc +++ gcc/config.gcc @@ -1130,7 +1130,7 @@ crisv32-*-linux* | cris-*-linux*) tm_file=dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h cris/linux.h # We need to avoid using t-linux, so override default tmake_file -tmake_file=cris/t-cris cris/t-linux t-slibgcc t-linux +tmake_file=${tmake_file} cris/t-cris cris/t-linux t-slibgcc extra_options=${extra_options} cris/linux.opt case $target in cris-*-*) This behaviour can be produced with the SVNREV 212237 (2014-07-02) gcc-4.9.0 compiler tarball plus one patch and then the following config: AR_FOR_TARGET=/usr/bin/cris-linux-gnu-ar \ AS_FOR_TARGET=/usr/bin/cris-linux-gnu-as \ DLLTOOL_FOR_TARGET=/usr/bin/cris-linux-gnu-dlltool \ LD_FOR_TARGET=/usr/bin/cris-linux-gnu-ld \ NM_FOR_TARGET=/usr/bin/cris-linux-gnu-nm \ OBJDUMP_FOR_TARGET=/usr/bin/cris-linux-gnu-objdump \ RANLIB_FOR_TARGET=/usr/bin/cris-linux-gnu-ranlib \ STRIP_FOR_TARGET=/usr/bin/cris-linux-gnu-strip \ WINDRES_FOR_TARGET=/usr/bin/cris-linux-gnu-windres \ WINDMC_FOR_TARGET=/usr/bin/cris-linux-gnu-windmc \ LDFLAGS='-Wl,-z,relro ' \ ../gcc-4.9.0-20140702/configure --bindir=/usr/bin --build=x86_64-redhat-linux-gnu \ --datadir=/usr/share --disable-decimal-float --disable-dependency-tracking \ --disable-gold --disable-libgomp --disable-libmudflap --disable-libquadmath \ --disable-libssp --disable-nls --disable-plugin --disable-shared \ --disable-silent-rules --disable-sjlj-exceptions --disable-threads \ --enable-checking= --enable-gnu-unique-object --enable-initfini-array \ --enable-languages=c,c++ --enable-linker-build-id --enable-nls --enable-obsolete \ --enable-targets=all --exec-prefix=/usr --host=x86_64-redhat-linux-gnu \ --includedir=/usr/include --infodir=/usr/share/info --libexecdir=/usr/libexec \ --localstatedir=/var --mandir=/usr/share/man --prefix=/usr \ --program-prefix=cris-linux-gnu- --sbindir=/usr/sbin --sharedstatedir=/var/lib \ --sysconfdir=/etc --target=cris-linux-gnu \ --with-bugurl=http://bugzilla.redhat.com/bugzilla/ \ --with-linker-hash-style=gnu --with-newlib --with-sysroot=/usr/cris-linux-gnu/sys-root \ --with-system-libunwind --with-system-zlib --without-headers --without-isl \ --without-cloog The binutils is: cris-linux-gnu-as -v GNU assembler version 2.24.0 (cris-linux-gnu) using BFD version version 2.24.0-4.fc20 20140613 The compiler is built with: AR_FOR_TARGET=/usr/bin/cris-linux-gnu-ar \ AS_FOR_TARGET=/usr/bin/cris-linux-gnu-as \ DLLTOOL_FOR_TARGET=/usr/bin/cris-linux-gnu-dlltool \ LD_FOR_TARGET=/usr/bin/cris-linux-gnu-ld \ NM_FOR_TARGET=/usr/bin/cris-linux-gnu-nm \ OBJDUMP_FOR_TARGET=/usr/bin/cris-linux-gnu-objdump \ RANLIB_FOR_TARGET=/usr/bin/cris-linux-gnu-ranlib \ STRIP_FOR_TARGET=/usr/bin/cris-linux-gnu-strip \ WINDRES_FOR_TARGET=/usr/bin/cris-linux-gnu-windres \ WINDMC_FOR_TARGET=/usr/bin/cris-linux-gnu-windmc \ make -C cris-linux-gnu tooldir=/usr all-gcc libgcc is built with: make -C cris-linux-gnu tooldir=/usr all-target-libgcc
[Bug target/61737] ICE when building libgcc for cris cross-compiler
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61737 --- Comment #2 from dhowells at redhat dot com dhowells at redhat dot com --- This also appears to occur for --target=sh64-linux on an unpatched gcc tree.