mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-26 07:34:11 +00:00
8305aa29c2
Upstream binutils is missing sensible defaults for a few flags (notably linker personality) when cross-compiling to mips64el-*-*abi64. Most of the time this isn't an issue because packages that invoke the linker directly detect the flags from gcc's behavior (for example, libtool does this) and gcc has good code for detecting the right defaults. However some do not; notably nix, itself lacks this. Presumably Debian is working on upstreaming this, and has more clout than we do. I propose we carry their patch in the meantime. The patch is conditioned on stdenv.targetPlatform.isMips64n64 in order to avoid mass-rebuilds. Closes #164835.
83 lines
3.1 KiB
Diff
83 lines
3.1 KiB
Diff
--- a/bfd/config.bfd
|
|
+++ b/bfd/config.bfd
|
|
@@ -927,11 +927,21 @@ case "${targ}" in
|
|
targ_defvec=mips_elf32_be_vec
|
|
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
|
|
;;
|
|
- mips64*el-*-linux*)
|
|
+ mips*64*el-*-linux*-gnuabi64)
|
|
+ targ_defvec=mips_elf64_trad_le_vec
|
|
+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec"
|
|
+ want64=true
|
|
+ ;;
|
|
+ mips*64*-*-linux*-gnuabi64)
|
|
+ targ_defvec=mips_elf64_trad_be_vec
|
|
+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
|
|
+ want64=true
|
|
+ ;;
|
|
+ mips*64*el-*-linux*)
|
|
targ_defvec=mips_elf32_ntrad_le_vec
|
|
targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
|
|
;;
|
|
- mips64*-*-linux*)
|
|
+ mips*64*-*-linux*)
|
|
targ_defvec=mips_elf32_ntrad_be_vec
|
|
targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
|
|
;;
|
|
--- a/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
|
|
+++ b/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
|
|
@@ -1,4 +1,5 @@
|
|
#PROG: objcopy
|
|
+#as: -n32
|
|
#readelf: --notes --wide
|
|
#objcopy: --merge-notes
|
|
#name: MIPS merge notes section (n32)
|
|
--- a/gas/configure
|
|
+++ b/gas/configure
|
|
@@ -12167,6 +12167,9 @@ _ACEOF
|
|
esac
|
|
# Decide which ABI to target by default.
|
|
case ${target} in
|
|
+ mips*64*-linux-gnuabi64)
|
|
+ mips_default_abi=N64_ABI
|
|
+ ;;
|
|
mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
|
|
| mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
|
|
mips_default_abi=N32_ABI
|
|
--- a/gas/configure.ac
|
|
+++ b/gas/configure.ac
|
|
@@ -384,6 +384,9 @@ changequote([,])dnl
|
|
esac
|
|
# Decide which ABI to target by default.
|
|
case ${target} in
|
|
+ mips*64*-linux-gnuabi64)
|
|
+ mips_default_abi=N64_ABI
|
|
+ ;;
|
|
mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
|
|
| mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
|
|
mips_default_abi=N32_ABI
|
|
--- a/ld/configure.tgt
|
|
+++ b/ld/configure.tgt
|
|
@@ -543,11 +543,19 @@ mips*-*-vxworks*) targ_emul=elf32ebmipvx
|
|
;;
|
|
mips*-*-windiss) targ_emul=elf32mipswindiss
|
|
;;
|
|
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
|
+mips*64*el-*-linux-gnuabi64) targ_emul=elf64ltsmip
|
|
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
|
|
+ targ_extra_libpath=$targ_extra_emuls
|
|
+ ;;
|
|
+mips*64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
|
targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
|
|
targ_extra_libpath=$targ_extra_emuls
|
|
;;
|
|
-mips64*-*-linux-*) targ_emul=elf32btsmipn32
|
|
+mips*64*-*-linux-gnuabi64) targ_emul=elf64btsmip
|
|
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
|
|
+ targ_extra_libpath=$targ_extra_emuls
|
|
+ ;;
|
|
+mips*64*-*-linux-*) targ_emul=elf32btsmipn32
|
|
targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
|
|
targ_extra_libpath=$targ_extra_emuls
|
|
;;
|