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.

qemu-riscv64-strace.log

source.zip

Edited by Naomi Rennie-Waldock