https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81495
--- Comment #4 from John Paul Adrian Glaubitz <glaubitz at physik dot fu-berlin.de> --- (In reply to Eric Botcazou from comment #3) > > Looks like the compiler itself is not functioning properly. > > Do you mean the cross-compiled native compiler or the cross-compiler itself? The cross-compiled native compiler. The cross-compiler works fine. > > I have tried building libgmpada, for example, and when trying to compile > > src/gnu_multiple_precision-big_integers.adb, the compiler is constantly > > generating segfaults: > > It would be nice to have a backtrace for one of them. I haven't been able to create a backtrace with gdb. The command line is: gcc-7 -c -Isrc/ -O2 -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,defs -specs=/usr/share/dpkg/pie-link.specs -specs=/usr/share/dpkg/pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I- -o /build/libgmpada/libgmpada-1.1/obj-dynamic/gnu_multiple_precision-big_integers.o src/gnu_multiple_precision-big_integers.adb This hangs. Attaching with strace to the process shows the segfaults. I ran "gdb /usr/bin/gcc-7" and ran it with "r -c -Isrc/ -O2 -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,defs -specs=/usr/share/dpkg/pie-link.specs -specs=/usr/share/dpkg/pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I- -o /build/libgmpada/libgmpada-1.1/obj-dynamic/gnu_multiple_precision-big_integers.o src/gnu_multiple_precision-big_integers.adb" but it seems to be stuck as well. One observation I made is that reduducing the optimization to "-O0" resolves the segfault issue, i.e. pressing "Ctrl+C" above, then copying and pasting the command line, replacing "-O2" with "-O0" makes the compile process succeed. The linker issue is resolved by removing "-Wl,-z,defs" from the final linker command line: root@pacman:/build/libgmpada/libgmpada-1.1# gcc-7 -shared -o obj/libgmpada.so.4 -Wl,-soname,libgmpada.so.4 obj-dynamic/*.o -specs=/usr/share/dpkg/pie-link.specs -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,defs -lgmp -lgnat obj-dynamic/gnu_multiple_precision-big_floats.o: In function `gnu_multiple_precision__big_floats__Oadd': gnu_multiple_precision-big_floats.adb:(.text+0x19e): undefined reference to `gnu_multiple_precision__big_floatIP' obj-dynamic/gnu_multiple_precision-big_floats.o: In function `gnu_multiple_precision__big_floats__Osubtract': gnu_multiple_precision-big_floats.adb:(.text+0x37c): undefined reference to `gnu_multiple_precision__big_floatIP' obj-dynamic/gnu_multiple_precision-big_floats.o: In function `gnu_multiple_precision__big_floats__Oabs': gnu_multiple_precision-big_floats.adb:(.text+0x55a): undefined reference to `gnu_multiple_precision__big_floatIP' obj-dynamic/gnu_multiple_precision-big_floats.o: In function `gnu_multiple_precision__big_floats__Oadd__2': gnu_multiple_precision-big_floats.adb:(.text+0x738): undefined reference to `gnu_multiple_precision__big_floatIP' obj-dynamic/gnu_multiple_precision-big_floats.o: In function `gnu_multiple_precision__big_floats__Osubtract__2': gnu_multiple_precision-big_floats.adb:(.text+0x91c): undefined reference to `gnu_multiple_precision__big_floatIP' obj-dynamic/gnu_multiple_precision-big_floats.o:gnu_multiple_precision-big_floats.adb:(.text+0xb00): more undefined references to `gnu_multiple_precision__big_floatIP' follow obj-dynamic/gnu_multiple_precision-big_integers.o: In function `gnu_multiple_precision__big_integers__value__scan__get_mpz_t.2564': gnu_multiple_precision-big_integers.adb:(.text+0x2650): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-big_rationals.o: In function `gnu_multiple_precision__big_rationals__Oadd': gnu_multiple_precision-big_rationals.adb:(.text+0x13c): undefined reference to `gnu_multiple_precision__big_rationalIP' obj-dynamic/gnu_multiple_precision-big_rationals.o: In function `gnu_multiple_precision__big_rationals__Oadd__2': gnu_multiple_precision-big_rationals.adb:(.text+0x6e0): undefined reference to `gnu_multiple_precision__big_rationalIP' obj-dynamic/gnu_multiple_precision-big_rationals.o: In function `gnu_multiple_precision__big_rationals__Osubtract': gnu_multiple_precision-big_rationals.adb:(.text+0x8fc): undefined reference to `gnu_multiple_precision__big_rationalIP' obj-dynamic/gnu_multiple_precision-big_rationals.o: In function `gnu_multiple_precision__big_rationals__Omultiply': gnu_multiple_precision-big_rationals.adb:(.text+0xb18): undefined reference to `gnu_multiple_precision__big_rationalIP' obj-dynamic/gnu_multiple_precision-big_rationals.o: In function `gnu_multiple_precision__big_rationals(double &&, int, void, int, double,...)': gnu_multiple_precision-big_rationals.adb:(.text+0xd5c): undefined reference to `gnu_multiple_precision__big_rationalIP' obj-dynamic/gnu_multiple_precision-big_rationals.o:gnu_multiple_precision-big_rationals.adb:(.text+0xf6e): more undefined references to `gnu_multiple_precision__big_rationalIP' follow obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x24): undefined reference to `gnu_multiple_precision__random_numbers___size__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x44): undefined reference to `gnu_multiple_precision__random_numbers___size__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x48): undefined reference to `gnu_multiple_precision__random_numbers__stateSR__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x4c): undefined reference to `gnu_multiple_precision__random_numbers__stateSW__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x50): undefined reference to `gnu_multiple_precision__random_numbers__stateSI__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x54): undefined reference to `gnu_multiple_precision__random_numbers__stateSO__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x58): undefined reference to `gnu_multiple_precision__random_numbers__Oeq__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x5c): undefined reference to `gnu_multiple_precision__random_numbers___assign__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x60): undefined reference to `gnu_multiple_precision__random_numbers__stateDA__2' obj-dynamic/gnu_multiple_precision-random_numbers.o:(.data.rel.ro+0x64): undefined reference to `gnu_multiple_precision__random_numbers__stateDF__2' obj-dynamic/gnu_multiple_precision-text_io.o: In function `gnu_multiple_precision__text_io__get__scan__get_mpz_t__2.1984': gnu_multiple_precision-text_io.ads:(.text+0x8e0): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-text_io.o: In function `gnu_multiple_precision__text_io__get__scan__get_mpz_t__4.2228': gnu_multiple_precision-text_io.ads:(.text+0x1464): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-wide_text_io.o: In function `gnu_multiple_precision__wide_text_io__get__scan__get_mpz_t__2.2008': gnu_multiple_precision-wide_text_io.ads:(.text+0x8e6): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-wide_text_io.o: In function `gnu_multiple_precision__wide_text_io__get__scan__get_mpz_t__4.2252': gnu_multiple_precision-wide_text_io.ads:(.text+0x14c8): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-wide_wide_text_io.o: In function `gnu_multiple_precision__wide_wide_text_io__get__scan__get_mpz_t__2.2008': gnu_multiple_precision-wide_wide_text_io.ads:(.text+0x8e4): undefined reference to `gmp__binding__mpz_tIP' obj-dynamic/gnu_multiple_precision-wide_wide_text_io.o:gnu_multiple_precision-wide_wide_text_io.ads:(.text+0x14c6): more undefined references to `gmp__binding__mpz_tIP' follow obj-dynamic/gnu_multiple_precision.o: In function `gnu_multiple_precision__read': gnu_multiple_precision.adb:(.text+0x3a2): undefined reference to `gmp__binding__mpz_tSR' gnu_multiple_precision.adb:(.text+0x3e0): undefined reference to `gmp__binding__mpz_tSR' obj-dynamic/gnu_multiple_precision.o: In function `gnu_multiple_precision__write': gnu_multiple_precision.adb:(.text+0x436): undefined reference to `gmp__binding__mpz_tSW' gnu_multiple_precision.adb:(.text+0x474): undefined reference to `gmp__binding__mpz_tSW' obj-dynamic/gnu_multiple_precision.o: In function `gnu_multiple_precision__read__mpz_t_11SI__2.2824': gnu_multiple_precision.adb:(.text+0x538): undefined reference to `gmp__binding__mpz_tIP' gnu_multiple_precision.adb:(.text+0x54e): undefined reference to `gmp__binding__mpz_tSR' obj-dynamic/gnu_multiple_precision.o: In function `gnu_multiple_precision__write__2': gnu_multiple_precision.adb:(.text+0x738): undefined reference to `gmp__binding__mpz_tIP' gnu_multiple_precision.adb:(.text+0x8ea): undefined reference to `gmp__binding__mpz_tSW' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x34): undefined reference to `gnu_multiple_precision___size__4' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x54): undefined reference to `gnu_multiple_precision___size__4' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x58): undefined reference to `gnu_multiple_precision__big_integerSR__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x5c): undefined reference to `gnu_multiple_precision__big_integerSW__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x60): undefined reference to `gnu_multiple_precision__big_integerSI__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x64): undefined reference to `gnu_multiple_precision__big_integerSO__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x6c): undefined reference to `gnu_multiple_precision___assign__4' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x70): undefined reference to `gnu_multiple_precision__big_integerDA__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x74): undefined reference to `gnu_multiple_precision__big_integerDF__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xb6): undefined reference to `gnu_multiple_precision___size__5' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xd6): undefined reference to `gnu_multiple_precision___size__5' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xe2): undefined reference to `gnu_multiple_precision__big_rationalSI__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xe6): undefined reference to `gnu_multiple_precision__big_rationalSO__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xee): undefined reference to `gnu_multiple_precision___assign__5' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xf2): undefined reference to `gnu_multiple_precision__big_rationalDA__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0xf6): undefined reference to `gnu_multiple_precision__big_rationalDF__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x140): undefined reference to `gnu_multiple_precision___size__6' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x160): undefined reference to `gnu_multiple_precision___size__6' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x16c): undefined reference to `gnu_multiple_precision__big_floatSI__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x170): undefined reference to `gnu_multiple_precision__big_floatSO__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x178): undefined reference to `gnu_multiple_precision___assign__6' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x17c): undefined reference to `gnu_multiple_precision__big_floatDA__2' obj-dynamic/gnu_multiple_precision.o:(.data.rel.ro+0x180): undefined reference to `gnu_multiple_precision__big_floatDF__2' collect2: error: ld returned 1 exit status root@pacman:/build/libgmpada/libgmpada-1.1# root@pacman:/build/libgmpada/libgmpada-1.1# gcc-7 -shared -o obj/libgmpada.so.4 -Wl,-soname,libgmpada.so.4 obj-dynamic/*.o -specs=/usr/share/dpkg/pie-link.specs -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -lgmp -lgnat root@pacman:/build/libgmpada/libgmpada-1.1#