NPTL in glibc uses libgcc_eh.a. With gcc 3.4.0 20040317, "make check" in glibc failed in nptl: make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx4.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx5.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx10.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx11.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx12.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx14.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx17.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx18.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx15.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cleanupx0.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cleanupx1.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cleanupx3.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx16.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cleanupx4.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-oncex3.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx20.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-cancelx21.out] Error 1 make[4]: *** [/export/build/gnu/glibc-nptl-3.4/build-i686-linux/nptl/tst-oncex4.out] Error 1 make[3]: *** [nptl/xtests] Error 2 make[2]: *** [xcheck] Error 2 make[1]: *** [check] Error 2 make: *** [one] Error 2 When I replace unwind-dw2.o in libgcc_eh.a with the one from gcc 3.3.3, the failed test passes.
It is a glibc bug. We have 2 copies of _Unwind_GetGR/_Unwind_SetGR, one in executable and the other in libgcc_s.so.1. They don't work that way because of 2 copies of dwarf_reg_size_table.