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: {...@@ -118,6 +118,7 @@ pub const can_unwind: bool = s: {
118 .aarch64_be,118 .aarch64_be,
119 .arc,119 .arc,
120 .csky,120 .csky,
121 .loongarch32,
121 .loongarch64,122 .loongarch64,
122 .m68k,123 .m68k,
123 .mips,124 .mips,
lib/std/debug/cpu_context.zig+12-1
...@@ -51,6 +51,16 @@ pub fn fromPosixSignalContext(ctx_ptr: ?*const anyopaque) ?Native {...@@ -51,6 +51,16 @@ pub fn fromPosixSignalContext(ctx_ptr: ?*const anyopaque) ?Native {
51 std.mem.reverse(native.r[0..]);51 std.mem.reverse(native.r[0..]);
5252
53 return native;53 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 };
54 } else if (native_arch.isMIPS32() and native_os == .linux) {64 } else if (native_arch.isMIPS32() and native_os == .linux) {
55 // The O32 kABI uses 64-bit fields for some reason.65 // The O32 kABI uses 64-bit fields for some reason.
56 return .{66 return .{
...@@ -1754,6 +1764,7 @@ const signal_ucontext_t = switch (native_os) {...@@ -1754,6 +1764,7 @@ const signal_ucontext_t = switch (native_os) {
1754 .aarch64,1764 .aarch64,
1755 .aarch64_be,1765 .aarch64_be,
1756 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/ucontext.h1766 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/ucontext.h
1767 .loongarch32,
1757 .loongarch64,1768 .loongarch64,
1758 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/powerpc/include/uapi/asm/ucontext.h1769 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/powerpc/include/uapi/asm/ucontext.h
1759 .powerpc64,1770 .powerpc64,
...@@ -1777,7 +1788,7 @@ const signal_ucontext_t = switch (native_os) {...@@ -1777,7 +1788,7 @@ const signal_ucontext_t = switch (native_os) {
1777 pc: u64,1788 pc: u64,
1778 },1789 },
1779 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/sigcontext.h1790 // https://github.com/torvalds/linux/blob/cd5a0afbdf8033dc83786315d63f8b325bdba2fd/arch/loongarch/include/uapi/asm/sigcontext.h
1780 .loongarch64 => extern struct {1791 .loongarch32, .loongarch64 => extern struct {
1781 pc: u64 align(16),1792 pc: u64 align(16),
1782 r: [32]u64,1793 r: [32]u64,
1783 },1794 },