http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57291
Bug ID: 57291 Summary: Failure in build stages 2 and 3 concerning pseudo-op: .balign Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap Assignee: unassigned at gcc dot gnu.org Reporter: ExtraLeveLInSoftware at ntlworld dot com Failure in build stages 2 and 3 of gcc-4.7.2 To: gcc-bugs 1. Introduction Trying to build gcc-4.7.2. Running Mac OS X: System Version: Mac OS X 10.5.8 (9L30) Kernel Version: Darwin 9.8.0 >uname -mpv Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386 i386 This bug report concerns the following points. - An error reported by make in stage 2 - The same error reported by make in stage 3 2. Report from configure The existing compilation system for stage 1 was obtained as a ready built version of ada-4.3 in /usr/local/ada-4.3/bin/ (however, it reports that it is 4.4.0). bash> gcc --version gcc (GCC) 4.4.0 20080314 (experimental) [trunk revision 133226] Copyright (C) 2008 Free Software Foundation, Inc. Building in /Gnu/gcc/obj. Sources in /Gnu/gcc/src/gcc-4.7.2/. The configure command was ../src/gcc-4.7.2/gcc-4.7.2/configure --enable-languages=ada,c,c++ This completed OK. 3. An error reported by make in stage2 Ran make &> ../logs/make-4.log This redirects error stream too. The make failed, in stage2, last few lines of make-4.log: ../../src/gcc-4.7.2/libcpp/lex.c:463:Unknown pseudo-op: .balign ../../src/gcc-4.7.2/libcpp/lex.c:463:Rest of line ignored. 1st junk character valued 49 (1). make[3]: *** [lex.o] Error 1 make[2]: *** [all-stage2-libcpp] Error 2 make[1]: *** [stage2-bubble] Error 2 make: *** [all] Error 2 It seems that the first build using the older C and Ada compilers has completed OK, but the next bootstrap stage has failed. Help was sought from the gcc-help mailing list (see: 29 April 2013, Ongoing Error in make stage2 building gcc-4.7.2) Response on gcc-help from Ian Lance Taylor with suggestion for how to get round it: in libcpp/config.h "change HAVE_SSE4 to 0". The version of the assembler is a possible problem: as -v Apple Computer, Inc. version cctools-667.3~21, GNU assembler version 1.38 From its 'man' page: ----------------------------- The program /usr/bin/as is actually a driver that executes assemblers for specific target architectures. If no target architecture is speci- fied, it defaults to the architecture of the host it is running on. ... -v Display the version of the assembler (both the Mac OS X version and the GNU version it is based on). ----------------------------- 4. An error reported by make in stage3 Modified libcpp/config.h to change HAVE_SSE4 to 0. Reran make. Failed as before (but without redoing most of stage 1). Last few lines: ../../src/gcc-4.7.2/libcpp/lex.c:463:Unknown pseudo-op: .balign etc as before ... Modified prev-libcpp/config.h as well - failed with the same last few lines. Confirmed the test at the point of failure. The test in lex.c affecting line 463 is "#ifdef HAVE_SSE4". Modified libcpp/config.h and prev-libcpp/config.h to change HAVE_SSE4 to undef. With this it completed stage 2, but failed in stage 3 with the same effect: ../../src/gcc-4.7.2/libcpp/lex.c:463:Unknown pseudo-op: .balign ../../src/gcc-4.7.2/libcpp/lex.c:463:Rest of line ignored. 1st junk character valued 49 (1). make[3]: *** [lex.o] Error 1 make[2]: *** [all-stage3-libcpp] Error 2 make[1]: *** [stage3-bubble] Error 2 make: *** [all] Error 2 So a new config.h needed to be changed. The libcpp now matched the prev-libcpp original: Files libcpp/config.h and prev-libcpp/config.orig.h are identical There are also stage1-libcpp, and so on now. Applied this change; completed stage3: Comparing stages 2 and 3 warning: gcc/cc1-checksum.o differs warning: gcc/cc1plus-checksum.o differs Comparison successful. 5. Information from the gcc-help mailing list On 29 Apr 2013, at 16:07, Ian Lance Taylor wrote: I would describe this as a bug in libcpp, introduced here: 2010-08-21 Richard Henderson <rth at redhat dot com> Andi Kleen <ak at linux.intel dot com> David S. Miller <davem at davemloft dot net> * configure.ac (AC_C_BIGENDIAN, AC_TYPE_UINTPTR_T): New tests. (ssize_t): Check via AC_TYPE_SSIZE_T instead of AC_CHECK_TYPE. (ptrdiff_t): Check via AC_CHECK_TYPE. * config.in, configure: Rebuild. * system.h: Include stdint.h, if available. * lex.c (WORDS_BIGENDIAN): Provide default. (acc_char_mask_misalign, acc_char_replicate, acc_char_cmp, acc_char_index, search_line_acc_char, repl_chars, search_line_mmx, search_line_sse2, search_line_sse42, init_vectorized_lexer, search_line_fast): New. (_cpp_clean_line): Use search_line_fast. Restructure the fast loop to make it clear when we're leaving the loop. Stay in the fast loop for non-trigraph '?'. libcpp contains assembler code for faster processing. That assembler code uses .balign. That usually works, but evidently the Darwin assembler does not support it. I think this code needs to be fixed to check for .balign support. 6. Summary of Bug 6.1 Failure compiling libcpp/lex.c The failure "Unknown pseudo-op: .balign" occurs in stages 2 and 3. It can be worked round by changing libcpp/config.h to set HAVE_SSE4 to undef. This needs to be done at stages 2 and 3. 6.2 Suggested cure from Ian Lance Taylor On 9 May 2013, at 19:09, Ian Lance Taylor wrote: The fix will be to add .balign to to the SSE4 test near the end of libcpp/configure.ac, or to avoid using .balign in the SSE4 assembly code. I can't explain the results you showed for the libcpp config.log file, though. Based on those I would have expected to see a failure in stage 1 as well. Clearly I am missing something. 6.3 If extra information about the matters reported above would be of value please contact: ExtraLeveLInSoftware at ntlworld dot com Ellis N. Thomas/15-May-2013