From eeb62ef3465702d54dd0c064c913b40c7b5b927f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Thu, 19 Mar 2026 19:15:52 +0100 Subject: [PATCH] std.debug.cpu_context: add loongarch32-linux support --- lib/std/debug/SelfInfo/Elf.zig | 1 + lib/std/debug/cpu_context.zig | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/std/debug/SelfInfo/Elf.zig b/lib/std/debug/SelfInfo/Elf.zig index a264b1170db05e5ee5510b75b0bdf354e3ae3026..263f292e9964f32cd16edd1c1519ccdd354d076e 100644 --- a/lib/std/debug/SelfInfo/Elf.zig +++ b/lib/std/debug/SelfInfo/Elf.zig @@ -118,6 +118,7 @@ pub const can_unwind: bool = s: { .aarch64_be, .arc, .csky, + .loongarch32, .loongarch64, .m68k, .mips, diff --git a/lib/std/debug/cpu_context.zig b/lib/std/debug/cpu_context.zig index de8baffea4d1fd6a01cc3cac94f9e0490b427dd5..244765b9a7b9227285c97ac436c28aabb7eb3b2c 100644 --- a/lib/std/debug/cpu_context.zig +++ b/lib/std/debug/cpu_context.zig @@ -51,6 +51,16 @@ pub fn fromPosixSignalContext(ctx_ptr: ?*const anyopaque) ?Native { std.mem.reverse(native.r[0..]); return native; + } else if (native_arch == .loongarch32 and native_os == .linux) { + // The 32-bit kABI (added later) kept the 64-bit layout. + return .{ + .r = s: { + var regs: [32]LoongArch.Gpr = undefined; + for (uc.mcontext.r, 0..) |r, i| regs[i] = @truncate(r); + break :s regs; + }, + .pc = @truncate(uc.mcontext.pc), + }; } else if (native_arch.isMIPS32() and native_os == .linux) { // The O32 kABI uses 64-bit fields for some reason. return .{ @@ -1754,6 +1764,7 @@ const signal_ucontext_t = switch (native_os) { .aarch64, .aarch64_be, // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/ucontext.h + .loongarch32, .loongarch64, // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/powerpc/include/uapi/asm/ucontext.h .powerpc64, @@ -1777,7 +1788,7 @@ const signal_ucontext_t = switch (native_os) { pc: u64, }, // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/sigcontext.h - .loongarch64 => extern struct { + .loongarch32, .loongarch64 => extern struct { pc: u64 align(16), r: [32]u64, }, -- 2.54.0