commit 5e3c31336668c2d221f82eb41b5ee1a2432948ad (tree)
parent 23055273421675a3709218a941d8cbb9c9d6ed0a
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Sat, 18 Oct 2025 12:13:41 +0200
std.pie: fix getDynamicSymbol() for mipsn32
Diffstat:
1 file changed, 25 insertions(+), 12 deletions(-)
diff --git a/lib/std/pie.zig b/lib/std/pie.zig
@@ -128,18 +128,31 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
: [ret] "=r" (-> [*]const elf.Dyn),
:
: .{ .lr = true }),
- .mips64, .mips64el => asm volatile (
- \\ .weak _DYNAMIC
- \\ .hidden _DYNAMIC
- \\ .balign 8
- \\ bal 1f
- \\ .gpdword _DYNAMIC
- \\1:
- \\ ld %[ret], 0($ra)
- \\ daddu %[ret], %[ret], $gp
- : [ret] "=r" (-> [*]const elf.Dyn),
- :
- : .{ .lr = true }),
+ .mips64, .mips64el => switch (builtin.abi) {
+ .gnuabin32, .muslabin32 => asm volatile (
+ \\ .weak _DYNAMIC
+ \\ .hidden _DYNAMIC
+ \\ bal 1f
+ \\ .gpword _DYNAMIC
+ \\1:
+ \\ lw %[ret], 0($ra)
+ \\ addu %[ret], %[ret], $gp
+ : [ret] "=r" (-> [*]const elf.Dyn),
+ :
+ : .{ .lr = true }),
+ else => asm volatile (
+ \\ .weak _DYNAMIC
+ \\ .hidden _DYNAMIC
+ \\ .balign 8
+ \\ bal 1f
+ \\ .gpdword _DYNAMIC
+ \\1:
+ \\ ld %[ret], 0($ra)
+ \\ daddu %[ret], %[ret], $gp
+ : [ret] "=r" (-> [*]const elf.Dyn),
+ :
+ : .{ .lr = true }),
+ },
.powerpc, .powerpcle => asm volatile (
\\ .weak _DYNAMIC
\\ .hidden _DYNAMIC