http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54719



             Bug #: 54719

           Summary: Bootstrap stuck in stage1 with message "checking for

                    compiler with PCH support"

    Classification: Unclassified

           Product: gcc

           Version: unknown

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: bootstrap

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: do...@gcc.gnu.org





Bootstrap fails when running with MALLOC_CHECK_=3. The

configure (actually config.log) of stage 1 in

x86_64-unknown-linux-gnu/libstdc++-v3 says:



    configure:15104: checking for compiler with PCH support



And it gets stuck there for ever.



It seems like the PCH support is broken somehow.  To reproduce:



$ cat conftest.h:



-------->8<------

extern int foo();

-------->8<------



$ cat conftest.cc:



-------->8<------

#include "conftest.h"

-------->8<------



$ export MALLOC_CHECK_=3

$ cc1plus -quiet conftest.h --output-pch=conftest.h.gch

$ cc1plus -quiet conftest.cc



The last command hangs for ever.



gdb says:



Program received signal SIGSEGV, Segmentation fault.

0x000000306e07a30a in mem2chunk_check () from /lib64/libc.so.6

Missing separate debuginfos, use: debuginfo-install glibc-2.15-56.fc17.x86_64

gmp-5.0.2-6.fc17.x86_64 libgcc-4.7.0-5.fc17.x86_64 libmpc-0.9-2.fc17.2.x86_64

libstdc++-4.7.0-5.fc17.x86_64 mpfr-3.1.0-2.fc17.x86_64

(gdb) bt

#0  0x000000306e07a30a in mem2chunk_check () from /lib64/libc.so.6

#1  0x000000306e07e276 in free_check () from /lib64/libc.so.6

#2  0x0000000001238d31 in location_adhoc_data_fini (set=0x1000176000)

    at /home/dodji/devel/git/gcc/bootstrap/libcpp/line-map.c:164

#3  0x0000000000bcc803 in toplev_main (argc=4, argv=0x7fffffffe398)

    at /home/dodji/devel/git/gcc/bootstrap/gcc/toplev.c:1949

#4  0x000000000120b348 in main (argc=4, argv=0x7fffffffe398)

    at /home/dodji/devel/git/gcc/bootstrap/gcc/main.c:36

(gdb) 



The issues is that after loading the pch file, toplev_main invokes

location_adhoc_data_fini which tries to free stuff in the

location_adhoc_data_map member of the instance of line_maps.  But

these pointers have been 're-set' by the loading the pch file, in

c_common_write_pch, AFAIU.  And that triggers a sigsev, and then the

process hangs.



If that data is to be saved to disk as part of the PCH, why isn't it

allocated in GCC memory?



The other issue I don't quite understand is, why is the process

hanging instead of just exiting after the sigsev?

Reply via email to