mirror of
https://github.com/rui314/mold.git
synced 2024-09-11 13:06:59 +03:00
I made a fair amount of effort to try to support MIPS, but it turned out that it is much harder than expected. I punted it instead of making further efforts. The problem is the MIPS ABI is hostile to the linker in the modern environment. MIPS object files are still compiled for the small code model in which GOT entries and data in the small data area are expected to be accessible with a single machine instruction with a 16-bit displacement. In other words, .got/.sdata/.sbss are expected to be smaller than 64 KiB. This might have been a reasonable assumption in the 90s, but it's not suitable for modern applications that can be 1000x larger than the binaries in the 90s. MIPS requires the linker to implement tons of workarounds for its legacy ABI assumptions. Our incomplete MIPS support can build binaries that pass all our unit tests. However, it needed more effort to support real-world programs that are larger than our test cases. At this point, I don't think it is productive to implement workarounds for the old ABI that is stuck in the 90s. It is honestly annoying to think about workarounds for the code that is intentionally compiled to be hostile to the linker. The situation is unfortunate, but if the Open Source community is still serious about MIPS, they should improve the ABI and the compiler instead of asking us to implement the legacy ABI. Closes https://github.com/rui314/mold/issues/1040
20 lines
550 B
Bash
Executable File
20 lines
550 B
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
. /etc/os-release
|
|
|
|
set -x
|
|
|
|
# This script install packages for -DMOLD_ENABLE_QEMU_TESTS=1
|
|
# to enable cross-target tests.
|
|
#
|
|
# Feel free to send me a PR if your OS is not on this list.
|
|
|
|
case "$ID-$VERSION_ID" in
|
|
ubuntu-* | pop-* | linuxmint-* | debian-* | raspbian-*)
|
|
apt-get install -y qemu-user {gcc,g++}-{i686,aarch64,riscv64,powerpc,powerpc64,powerpc64le,s390x,sparc64,m68k,sh4,alpha}-linux-gnu {gcc,g++}-arm-linux-gnueabihf
|
|
;;
|
|
*)
|
|
echo "Error: don't know anything about build dependencies on $ID-$VERSION_ID"
|
|
exit 1
|
|
esac
|