aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-10-16 04:36:40 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2024-11-02 10:42:53 +0100
commit270fbbcd86b02fcd02ad9b818d9de39dfe671754 (patch)
treec81290bd31fdbfed3ba1a1d34394e271f30b80f2 /src
parent8045268698bb46e954c886b913fe216c59f5824e (diff)
downloadzig-270fbbcd86b02fcd02ad9b818d9de39dfe671754.tar.gz
zig-270fbbcd86b02fcd02ad9b818d9de39dfe671754.zip
std.Target: Add muslabin32 and muslabi64 tags to Abi.
Once we upgrade to LLVM 20, these should be lowered verbatim rather than to simply musl. Similarly, the special case in llvmMachineAbi() should go away.
Diffstat (limited to 'src')
-rw-r--r--src/codegen/llvm.zig2
-rw-r--r--src/link/Elf.zig8
-rw-r--r--src/target.zig10
3 files changed, 16 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index fc7d26a815..0a1073efcf 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -270,6 +270,8 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
.android => "android",
.androideabi => "androideabi",
.musl => "musl",
+ .muslabin32 => "musl", // Should be muslabin32 in LLVM 20.
+ .muslabi64 => "musl", // Should be muslabi64 in LLVM 20.
.musleabi => "musleabi",
.musleabihf => "musleabihf",
.muslx32 => "muslx32",
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index ccc9e24bf6..840ea02f5d 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -4100,21 +4100,21 @@ fn getLDMOption(target: std.Target) ?[]const u8 {
},
.mips64 => switch (target.os.tag) {
.freebsd => switch (target.abi) {
- .gnuabin32 => "elf32btsmipn32_fbsd",
+ .gnuabin32, .muslabin32 => "elf32btsmipn32_fbsd",
else => "elf64btsmip_fbsd",
},
else => switch (target.abi) {
- .gnuabin32 => "elf32btsmipn32",
+ .gnuabin32, .muslabin32 => "elf32btsmipn32",
else => "elf64btsmip",
},
},
.mips64el => switch (target.os.tag) {
.freebsd => switch (target.abi) {
- .gnuabin32 => "elf32ltsmipn32_fbsd",
+ .gnuabin32, .muslabin32 => "elf32ltsmipn32_fbsd",
else => "elf64ltsmip_fbsd",
},
else => switch (target.abi) {
- .gnuabin32 => "elf32ltsmipn32",
+ .gnuabin32, .muslabin32 => "elf32ltsmipn32",
else => "elf64ltsmip",
},
},
diff --git a/src/target.zig b/src/target.zig
index e4f1d28043..2327ff0c4a 100644
--- a/src/target.zig
+++ b/src/target.zig
@@ -438,6 +438,16 @@ pub fn arePointersLogical(target: std.Target, as: AddressSpace) bool {
}
pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {
+ // This special-casing should be removed with LLVM 20.
+ switch (target.cpu.arch) {
+ .mips, .mipsel => return "o32",
+ .mips64, .mips64el => return switch (target.abi) {
+ .gnuabin32, .muslabin32 => "n32",
+ else => "n64",
+ },
+ else => {},
+ }
+
// LLD does not support ELFv1. Rather than having LLVM produce ELFv1 code and then linking it
// into a broken ELFv2 binary, just force LLVM to use ELFv2 as well. This will break when glibc
// is linked as glibc only supports ELFv2 for little endian, but there's nothing we can do about