cc1 segfault under qemu-riscv64
Host environment
- Operating system: Alpine Linux (edge)
- OS/kernel version: Linux alpine-edge 6.12.41-0-virt #1-Alpine SMP PREEMPT_DYNAMIC 2025-08-07 05:37:03 x86_64 GNU/Linux
- Architecture: x86_64
- QEMU flavor: qemu-riscv64
- QEMU version: qemu-riscv64 version 10.0.94 (v10.1.0-rc4) (built from 88f72048)
- QEMU command line:
Emulated/Virtualized environment
- Operating system: Alpine Linux (edge)
- OS/kernel version:
- Architecture: riscv64
Description of problem
I'm currently working on porting ghc to RISC-V for Alpine Linux, and one of the build tools (happy-1.20.1.1) is giving me a cc1 segfault when building the testsuite under qemu-riscv64:
GNU C23 (Alpine 15.2.0) version 15.2.0 (riscv64-alpine-linux-musl)
compiled by GNU C version 15.2.0, GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.3.1, isl version isl-0.26-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 69da9ad1f38ae3974367fa5100813d00
gcc: internal compiler error: Segmentation fault signal terminated program cc1
Please submit a full bug report, with preprocessed source (by using -freport-bug).
See <https://gitlab.alpinelinux.org/alpine/aports/-/issues> for instructions.
<no location info>: error:
`gcc' failed in phase `C Compiler'. (Exit code: 4)
make: *** [Makefile:101: issue93.a.bin] Error 1
Steps to reproduce
Start a container with the alpinelinux/build-base@sha256:908e1d8d49808fab9ebf22c572d817721b2f73d0de7a2c71a6bc64ccd2902f2d image, and compile the preprocessed source (attached) for the failing test:
/usr/libexec/gcc/riscv64-alpine-linux-musl/15.2.0/cc1 -quiet -fpreprocessed ghc_5.i -march=rv64gc -mabi=lp64d -misa-spec=20191213 -mtls-dialect=trad -march=rv64imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd -Wimplicit -version -fno-PIC -fwrapv -fno-builtin -fno-strict-aliasing -o ghc_5.s
Additional information
I've been able to reproduce this using:
- Ubuntu 24.04, distro qemu 1:8.2.2+ds-0ubuntu1.9
- Alpine Linux (edge), distro qemu 10.0.2-r0
- Alpine Linux (edge), self-built qemu 88f72048
My build was of 88f72048 done with:
./configure --without-default-features --enable-linux-user --static --disable-system --disable-docs --enable-debug
make -C build
I have tested this natively on a Milk-V Mars and cc1 does not segfault:
alpine-riscv64:~/cc1-segfault-repro$ dmesg | head
[ 0.000000] Linux version 6.12.42-0-lts (buildozer@build-3-22-riscv64) (cc (Alpine 14.2.0) 14.2.0, GNU ld (GNU Binutils) 2.44) #1-Alpine SMP PREEMPT_DYNAMIC 2025-08-18 15:59:37
[ 0.000000] Machine model: Milk-V Mars
[ 0.000000] SBI specification v2.0 detected
[ 0.000000] SBI implementation ID=0x1 Version=0x10005
[ 0.000000] SBI TIME extension detected
[ 0.000000] SBI IPI extension detected
[ 0.000000] SBI RFENCE extension detected
[ 0.000000] SBI SRST extension detected
[ 0.000000] SBI DBCN extension detected
[ 0.000000] efi: EFI v2.11 by Das U-Boot
alpine-riscv64:~/cc1-segfault-repro$ docker run --rm -it -v $PWD:/src alpinelinux/build-base@sha256:908e1d8d49808fab9ebf22c572d817721b2f73d0de7a2c71a6bc64ccd2902f2d
/ $ cd /src
/src $ time /usr/libexec/gcc/riscv64-alpine-linux-musl/15.2.0/cc1 -quiet -fpreprocessed ghc_5.i -march=rv64gc -mabi=lp64d -misa-spec=20191213 -mtls-dialect=trad -march=rv64imafdc_zicsr_zife
ncei_zmmul_zaamo_zalrsc_zca_zcd -Wimplicit -version -fno-PIC -fwrapv -fno-builtin -fno-strict-aliasing -o ghc_5.s
GNU C23 (Alpine 15.2.0) version 15.2.0 (riscv64-alpine-linux-musl)
compiled by GNU C version 15.2.0, GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.3.1, isl version isl-0.26-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 69da9ad1f38ae3974367fa5100813d00
real 7m 52.90s
user 7m 29.13s
sys 0m 23.12s
/src $ ls -l
total 208272
-rw-r--r-- 1 buildozer buildozer 114053609 Aug 26 10:41 ghc_5.i
-rw-r--r-- 1 buildozer buildozer 99210493 Aug 26 21:18 ghc_5.s
Attached trace from QEMU_STRACE=1, and preprocessed source requiring only a C compiler for testing.
Edited by Naomi Rennie-Waldock