On hppa-linux, using gcc-3.3.4 as the system/stage1 compiler, building gcc-3.4.1 using the profiledbootstrap target, leaves the libstdc++ with === libstdc++ tests === Running target unix FAIL: 17_intro/header_cassert.cc (test for excess errors) WARNING: 17_intro/header_cassert.cc compilation failed to produce executable [...] === libstdc++ Summary === # of expected passes 75 # of unexpected failures 1367 # of expected failures 3 <command line>:1: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. $ gdb /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/cc1plus GNU gdb 6.1-debian Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "hppa-linux"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) set args -quiet -nostdinc++ -nostdinc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/include/hppa-linux -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/include -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/libsupc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/libsupc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/include/backward -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/testsuite -iprefix /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/../lib/gcc/hppa-linux/3.4.0/ -isystem /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/include -isystem /usr/hppa-linux/bin/include -isystem /usr/hppa-linux/lib/include -D_GNU_SOURCE -D_GLIBCXX_ASSERT -DLOCALEDIR=/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/po/share/locale -isystem /usr/hppa-linux/include -isystem /usr/hppa-linux/sys-include -include bits/stdc++.h /build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/testsuite/17_intro/header_cassert.cc -quiet -dumpbase header_cassert.cc -auxbase header_cassert -g -O2 -version -ffunction-sections -fdata-sections -fmessage-length=0 -o header_cassert.s (gdb) r Starting program: /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/cc1plus -quiet -nostdinc++ -nostdinc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/include/hppa-linux -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/include -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/libsupc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/libsupc++ -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/include/backward -I/build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/testsuite -iprefix /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/../lib/gcc/hppa-linux/3.4.0/ -isystem /build/packages/gcc/3.4/gcc-3.4-3.4.0/build/gcc/include -isystem /usr/hppa-linux/bin/include -isystem /usr/hppa-linux/lib/include -D_GNU_SOURCE -D_GLIBCXX_ASSERT -DLOCALEDIR=/build/packages/gcc/3.4/gcc-3.4-3.4.0/build/hppa-linux/libstdc++-v3/po/share/locale -isystem /usr/hppa-linux/include -isystem /usr/hppa-linux/sys-include -include bits/stdc++.h /build/packages/gcc/3.4/gcc-3.4-3.4.0/src/libstdc++-v3/testsuite/17_intro/header_cassert.cc -quiet -dumpbase header_cassert.cc -auxbase header_cassert -g -O2 -version -ffunction-sections -fdata-sections -fmessage-length=0 -o header_cassert.s GNU C++ version 3.4.0 (Debian 3.4.0-4) (hppa-linux) compiled by GNU C version 3.4.0 (Debian 3.4.0-4). GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=127775 Program received signal SIGSEGV, Segmentation fault. __canonicalize_funcptr_for_compare (fptr=@0x7fb602: 0) at fptr.c:80 80 got = (unsigned int *) (plabel[0] + GOT_FROM_PLT_STUB); (gdb) bt #0 __canonicalize_funcptr_for_compare (fptr=@0x7fb602: 0) at fptr.c:80 #1 0x400b0e5c in ?? () Cannot find bounds of current function (@0x0), unwinding will fail. building with the bootstrap target doesn't show these errors. Matthias
The SIGSEGV is caused by function pointer canonicalization in this code /* If the text segment was not loaded at the same address as it was when the PCH file was created, function pointers loaded from the PCH will not be valid. We could in theory remap all the function pointers, but no support for that exists at present. */ if (v.pch_init != &pch_init) in c-pch.c. Canonicalization will fail if v.pch_init or &pch_init point to invalid function descriptors. I believe that the SIGSEGV can be prevented by adding a "void *" cast to one of the sides of the comparison. If the function descriptor compare succeeds, then possibly it may be valid to do a canonicalized comparison. The above failure indicates an issue with mmap. With 2.4 hppa-linux kernels, the largefile.c pch test fails. There seems to be a similar problem here with the 2.6.6-pa4 kernel (that's what I used). I'm guessing but I think profiledbootstrap changes the size of the pch file causing this failure.
well not really true the G++ build by the profiledbootstrap is fine, it is the build of libstdc++'s PCH which is broken.
Subject: Bug 16344 CVSROOT: /cvs/gcc Module name: gcc Changes by: danglin@gcc.gnu.org 2004-07-08 21:49:45 Modified files: . : ChangeLog Makefile.tpl Makefile.in Log message: PR target/16344 * Makefile.tpl (profiledbootstrap): Build runtime libraries with feedback based compiler. * Makefile.in: Rebuilt. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/ChangeLog.diff?cvsroot=gcc&r1=1.949&r2=1.950 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/Makefile.tpl.diff?cvsroot=gcc&r1=1.107&r2=1.108 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/Makefile.in.diff?cvsroot=gcc&r1=1.229&r2=1.230
Subject: Bug 16344 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: danglin@gcc.gnu.org 2004-07-08 22:16:05 Modified files: . : ChangeLog Makefile.tpl Makefile.in Log message: PR target/16344 * Makefile.tpl (profiledbootstrap): Build runtime libraries with feedback based compiler. * Makefile.in: Rebuilt. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.856.2.17&r2=1.856.2.18 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/Makefile.tpl.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.79&r2=1.79.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/Makefile.in.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.195&r2=1.195.2.1
Fixed.
Subject: Re: libstdc++'s PCH built by profiledbootstrap doe > What |Removed |Added > ---------------------------------------------------------------------------- > Status|NEW |RESOLVED > Resolution| |FIXED > Target Milestone|--- |3.4.2 The patch fixes the cause of the PCH failure. However, it doesn't fix the SEGV caused by trying to canonicalize an invalid function address. I think this could be fixed by canonicalizing the address of pch_init before it is written to the PCH file. Dave