The following line in ./compilers will be skipped by default: c sparc32 elfulator: diet-sparc32 sparc-linux-gcc -Os Here's how to make this line work, along with c sparc64 elfulator: diet-sparc64 sparc64-linux-gcc -Os c arm32 elfulator: diet-arm32 arm-linux-gnueabi-gcc -Os c arm64 elfulator: diet-arm64 aarch64-linux-gnu-gcc -Os if you want to try those via elfulator. Beware that unrolling via elfulator increases costs; see README-resources. These instructions assume that you have already followed steps 1 through 3 of README and are in the saferewrite directory. Set up environment variables to use below: VENV=saferewrite BUILDROOT=buildroot-2025.11.1 DIETLIBC=dietlibc-0.35 export LIBRARY_PATH=$HOME/unicorn/build export LD_LIBRARY_PATH=$HOME/unicorn/build export CPATH=$HOME/unicorn/include Download and run buildroot to compile sparc-linux-gcc and sparc64-linux-gcc (for sparc64 it is also possible to use Debian packages, but compiling with buildroot seems more future-proof): ( cd wget https://buildroot.org/downloads/$BUILDROOT.tar.xz tar -xf $BUILDROOT.tar.xz cd $BUILDROOT echo BR2_sparc=y > configs/sparc_defconfig echo BR2_sparc64=y > configs/sparc64_defconfig make sparc_defconfig O=build-sparc time make O=build-sparc make sparc64_defconfig O=build-sparc64 time make O=build-sparc64 ) Link the cross-compilers into the saferewrite environment: ln -s $HOME/$BUILDROOT/build-sparc/host/bin/sparc-* $HOME/.virtualenvs/$VENV/bin/ ln -s $HOME/$BUILDROOT/build-sparc64/host/bin/sparc64-* $HOME/.virtualenvs/$VENV/bin/ Test cross-compiling and running a small program: ( echo '#include ' echo 'int main() { write(1,"works\n",6); return 0; }' ) > ok.c sparc-linux-gcc -o ok ok.c -static ./ok sparc64-linux-gcc -o ok ok.c -static ./ok If you see "sparc-linux-gcc: command not found" and "sparc64-linux-gcc: command not found", switch to the saferewrite environment--- . $HOME/.virtualenvs/$VENV/bin/activate ---and then run the test again. Each "./ok" run should print "works". Download and compile dietlibc (plus a SPARC patch) for various architectures, with amd64 first: ( cd wget https://cr.yp.to/mirror/www.fefe.de/dietlibc/$DIETLIBC.tar.xz tar -xf $DIETLIBC.tar.xz cd $DIETLIBC sed -i 's/glob /globl /' sparc/memcmp.S time make -j8 time make -j8 ARCH=arm CROSS=arm-linux-gnueabi- CFLAGS='-Os -static' all time make -j8 ARCH=aarch64 CROSS=aarch64-linux-gnu- CFLAGS='-Os -static' all time make -j8 ARCH=sparc CROSS=sparc-linux- CFLAGS='-Os -static' all time make -j8 ARCH=sparc64 CROSS=sparc64-linux- CFLAGS='-Os -static -Wno-implicit-function-declaration' all ) Link the diet program into the saferewrite environment: ln -s $HOME/$DIETLIBC/bin-x86_64/diet $HOME/.virtualenvs/$VENV/bin/diet-amd64 ln -s $HOME/$DIETLIBC/bin-arm/diet $HOME/.virtualenvs/$VENV/bin/diet-arm32 ln -s $HOME/$DIETLIBC/bin-aarch64/diet $HOME/.virtualenvs/$VENV/bin/diet-arm64 ln -s $HOME/$DIETLIBC/bin-sparc/diet $HOME/.virtualenvs/$VENV/bin/diet-sparc32 ln -s $HOME/$DIETLIBC/bin-sparc64/diet $HOME/.virtualenvs/$VENV/bin/diet-sparc64 Test cross-compiling and running with dietlibc: diet-amd64 gcc -o ok ok.c ./ok diet-arm32 arm-linux-gnueabi-gcc -o ok ok.c ./ok diet-arm64 aarch64-linux-gnu-gcc -o ok ok.c ./ok diet-sparc32 sparc-linux-gcc -o ok ok.c ./ok diet-sparc64 sparc64-linux-gcc -o ok ok.c ./ok Each "./ok" run should print "works". Download unicorn, switch to the version that these instructions were tested with, apply a patch, and compile: cp unicorn-patch $HOME ( cd git clone https://github.com/unicorn-engine/unicorn.git cd unicorn git checkout 8a2846369c4070c948d8b1d3b84069de4a686b1c patch -p1 < ../unicorn-patch mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release time make -j8 ) In the saferewrite directory, compile elfulator: gcc -Os -o elfulator elfulator.c setjmp.s -lunicorn Test running dietlibc cross-compiled executables under elfulator: diet-amd64 gcc -o ok ok.c ./elfulator ok `wc -c < ok` diet-arm32 arm-linux-gnueabi-gcc -o ok ok.c ./elfulator ok `wc -c < ok` diet-arm64 aarch64-linux-gnu-gcc -o ok ok.c ./elfulator ok `wc -c < ok` diet-sparc32 sparc-linux-gcc -o ok ok.c ./elfulator ok `wc -c < ok` diet-sparc64 sparc64-linux-gcc -o ok ok.c ./elfulator ok `wc -c < ok` Each run should again print "works".