authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-03-19 19:15:52+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-03-19 19:53:03+01:00
logeeb62ef3465702d54dd0c064c913b40c7b5b927f
tree6f98a1fe8114c1da38f0f7932a776993531f962e
parenta62d8e332330dbae2681bca6ca353dd26c9c7b3a
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.debug.cpu_context: add loongarch32-linux support


2 files changed, 13 insertions(+), 1 deletions(-)

lib/std/debug/SelfInfo/Elf.zig+1
......@@ -118,6 +118,7 @@ pub const can_unwind: bool = s: {
118118 .aarch64_be,
119119 .arc,
120120 .csky,
121 .loongarch32,
121122 .loongarch64,
122123 .m68k,
123124 .mips,
lib/std/debug/cpu_context.zig+12-1
......@@ -51,6 +51,16 @@ pub fn fromPosixSignalContext(ctx_ptr: ?*const anyopaque) ?Native {
5151 std.mem.reverse(native.r[0..]);
5252
5353 return native;
54 } else if (native_arch == .loongarch32 and native_os == .linux) {
55 // The 32-bit kABI (added later) kept the 64-bit layout.
56 return .{
57 .r = s: {
58 var regs: [32]LoongArch.Gpr = undefined;
59 for (uc.mcontext.r, 0..) |r, i| regs[i] = @truncate(r);
60 break :s regs;
61 },
62 .pc = @truncate(uc.mcontext.pc),
63 };
5464 } else if (native_arch.isMIPS32() and native_os == .linux) {
5565 // The O32 kABI uses 64-bit fields for some reason.
5666 return .{
......@@ -1754,6 +1764,7 @@ const signal_ucontext_t = switch (native_os) {
17541764 .aarch64,
17551765 .aarch64_be,
17561766 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/ucontext.h
1767 .loongarch32,
17571768 .loongarch64,
17581769 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/powerpc/include/uapi/asm/ucontext.h
17591770 .powerpc64,
......@@ -1777,7 +1788,7 @@ const signal_ucontext_t = switch (native_os) {
17771788 pc: u64,
17781789 },
17791790 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/sigcontext.h
1780 .loongarch64 => extern struct {
1791 .loongarch32, .loongarch64 => extern struct {
17811792 pc: u64 align(16),
17821793 r: [32]u64,
17831794 },