| author | |
| committer | |
| log | eb36a45ed9fbdf5ab92c3cdb650375a13eaaa648 |
| tree | 79019b131472eb6c157755f5b603a53a0a1ce7d9 |
| parent | de3947608ceb6e4603e3d249fb07183e3a431536 |
| signature |
3 files changed, 66 insertions(+), 1 deletions(-)
lib/std/debug/Dwarf.zig+3| ... | @@ -1436,6 +1436,7 @@ pub fn ipRegNum(arch: std.Target.Cpu.Arch) ?u16 { | ... | @@ -1436,6 +1436,7 @@ pub fn ipRegNum(arch: std.Target.Cpu.Arch) ?u16 { |
| 1436 | .lanai => 2, | 1436 | .lanai => 2, |
| 1437 | .loongarch32, .loongarch64 => 64, | 1437 | .loongarch32, .loongarch64 => 64, |
| 1438 | .mips, .mipsel, .mips64, .mips64el => 66, | 1438 | .mips, .mipsel, .mips64, .mips64el => 66, |
| 1439 | .or1k => 35, | ||
| 1439 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 67, | 1440 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 67, |
| 1440 | .riscv32, .riscv32be, .riscv64, .riscv64be => 65, | 1441 | .riscv32, .riscv32be, .riscv64, .riscv64be => 65, |
| 1441 | .s390x => 65, | 1442 | .s390x => 65, |
| ... | @@ -1456,6 +1457,7 @@ pub fn fpRegNum(arch: std.Target.Cpu.Arch) u16 { | ... | @@ -1456,6 +1457,7 @@ pub fn fpRegNum(arch: std.Target.Cpu.Arch) u16 { |
| 1456 | .lanai => 5, | 1457 | .lanai => 5, |
| 1457 | .loongarch32, .loongarch64 => 22, | 1458 | .loongarch32, .loongarch64 => 22, |
| 1458 | .mips, .mipsel, .mips64, .mips64el => 30, | 1459 | .mips, .mipsel, .mips64, .mips64el => 30, |
| 1460 | .or1k => 2, | ||
| 1459 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 1, | 1461 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 1, |
| 1460 | .riscv32, .riscv32be, .riscv64, .riscv64be => 8, | 1462 | .riscv32, .riscv32be, .riscv64, .riscv64be => 8, |
| 1461 | .s390x => 11, | 1463 | .s390x => 11, |
| ... | @@ -1476,6 +1478,7 @@ pub fn spRegNum(arch: std.Target.Cpu.Arch) u16 { | ... | @@ -1476,6 +1478,7 @@ pub fn spRegNum(arch: std.Target.Cpu.Arch) u16 { |
| 1476 | .lanai => 4, | 1478 | .lanai => 4, |
| 1477 | .loongarch32, .loongarch64 => 3, | 1479 | .loongarch32, .loongarch64 => 3, |
| 1478 | .mips, .mipsel, .mips64, .mips64el => 29, | 1480 | .mips, .mipsel, .mips64, .mips64el => 29, |
| 1481 | .or1k => 1, | ||
| 1479 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 1, | 1482 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => 1, |
| 1480 | .riscv32, .riscv32be, .riscv64, .riscv64be => 2, | 1483 | .riscv32, .riscv32be, .riscv64, .riscv64be => 2, |
| 1481 | .s390x => 15, | 1484 | .s390x => 15, |
lib/std/debug/SelfInfo/Elf.zig+2-1| ... | @@ -101,7 +101,7 @@ pub const can_unwind: bool = s: { | ... | @@ -101,7 +101,7 @@ pub const can_unwind: bool = s: { |
| 101 | .x86, | 101 | .x86, |
| 102 | .x86_64, | 102 | .x86_64, |
| 103 | }, | 103 | }, |
| 104 | // Not supported yet: arc, arm/armeb/thumb/thumbeb, m68k, or1k, xtensa | 104 | // Not supported yet: arc, arm/armeb/thumb/thumbeb, m68k, xtensa |
| 105 | .linux => &.{ | 105 | .linux => &.{ |
| 106 | .aarch64, | 106 | .aarch64, |
| 107 | .aarch64_be, | 107 | .aarch64_be, |
| ... | @@ -111,6 +111,7 @@ pub const can_unwind: bool = s: { | ... | @@ -111,6 +111,7 @@ pub const can_unwind: bool = s: { |
| 111 | .mipsel, | 111 | .mipsel, |
| 112 | .mips64, | 112 | .mips64, |
| 113 | .mips64el, | 113 | .mips64el, |
| 114 | .or1k, | ||
| 114 | .riscv32, | 115 | .riscv32, |
| 115 | .riscv64, | 116 | .riscv64, |
| 116 | .s390x, | 117 | .s390x, |
lib/std/debug/cpu_context.zig+61| ... | @@ -11,6 +11,7 @@ else switch (native_arch) { | ... | @@ -11,6 +11,7 @@ else switch (native_arch) { |
| 11 | .lanai => Lanai, | 11 | .lanai => Lanai, |
| 12 | .loongarch32, .loongarch64 => LoongArch, | 12 | .loongarch32, .loongarch64 => LoongArch, |
| 13 | .mips, .mipsel, .mips64, .mips64el => Mips, | 13 | .mips, .mipsel, .mips64, .mips64el => Mips, |
| 14 | .or1k => Or1k, | ||
| 14 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => Powerpc, | 15 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => Powerpc, |
| 15 | .sparc, .sparc64 => Sparc, | 16 | .sparc, .sparc64 => Sparc, |
| 16 | .riscv32, .riscv32be, .riscv64, .riscv64be => Riscv, | 17 | .riscv32, .riscv32be, .riscv64, .riscv64be => Riscv, |
| ... | @@ -818,6 +819,66 @@ const Mips = extern struct { | ... | @@ -818,6 +819,66 @@ const Mips = extern struct { |
| 818 | } | 819 | } |
| 819 | }; | 820 | }; |
| 820 | 821 | ||
| 822 | /// This is an `extern struct` so that inline assembly in `current` can use field offsets. | ||
| 823 | const Or1k = extern struct { | ||
| 824 | /// The numbered general-purpose registers r0 - r31. | ||
| 825 | r: [32]u32, | ||
| 826 | pc: u32, | ||
| 827 | |||
| 828 | pub inline fn current() Or1k { | ||
| 829 | var ctx: Or1k = undefined; | ||
| 830 | asm volatile ( | ||
| 831 | \\ l.sw 0(r15), r0 | ||
| 832 | \\ l.sw 4(r15), r1 | ||
| 833 | \\ l.sw 8(r15), r2 | ||
| 834 | \\ l.sw 12(r15), r3 | ||
| 835 | \\ l.sw 16(r15), r4 | ||
| 836 | \\ l.sw 20(r15), r5 | ||
| 837 | \\ l.sw 24(r15), r6 | ||
| 838 | \\ l.sw 28(r15), r7 | ||
| 839 | \\ l.sw 32(r15), r8 | ||
| 840 | \\ l.sw 36(r15), r9 | ||
| 841 | \\ l.sw 40(r15), r10 | ||
| 842 | \\ l.sw 44(r15), r11 | ||
| 843 | \\ l.sw 48(r15), r12 | ||
| 844 | \\ l.sw 52(r15), r13 | ||
| 845 | \\ l.sw 56(r15), r14 | ||
| 846 | \\ l.sw 60(r15), r15 | ||
| 847 | \\ l.sw 64(r15), r16 | ||
| 848 | \\ l.sw 68(r15), r17 | ||
| 849 | \\ l.sw 72(r15), r18 | ||
| 850 | \\ l.sw 76(r15), r19 | ||
| 851 | \\ l.sw 80(r15), r20 | ||
| 852 | \\ l.sw 84(r15), r21 | ||
| 853 | \\ l.sw 88(r15), r22 | ||
| 854 | \\ l.sw 92(r15), r23 | ||
| 855 | \\ l.sw 96(r15), r24 | ||
| 856 | \\ l.sw 100(r15), r25 | ||
| 857 | \\ l.sw 104(r15), r26 | ||
| 858 | \\ l.sw 108(r15), r27 | ||
| 859 | \\ l.sw 112(r15), r28 | ||
| 860 | \\ l.sw 116(r15), r29 | ||
| 861 | \\ l.sw 120(r15), r30 | ||
| 862 | \\ l.sw 124(r15), r31 | ||
| 863 | \\ l.jal 1f | ||
| 864 | \\1: | ||
| 865 | \\ l.sw 128(r15), r9 | ||
| 866 | : | ||
| 867 | : [ctx] "{r15}" (&ctx), | ||
| 868 | : .{ .r9 = true, .memory = true }); | ||
| 869 | return ctx; | ||
| 870 | } | ||
| 871 | |||
| 872 | pub fn dwarfRegisterBytes(ctx: *Or1k, register_num: u16) DwarfRegisterError![]u8 { | ||
| 873 | switch (register_num) { | ||
| 874 | 0...31 => return @ptrCast(&ctx.r[register_num]), | ||
| 875 | 35 => return @ptrCast(&ctx.pc), | ||
| 876 | |||
| 877 | else => return error.InvalidRegister, | ||
| 878 | } | ||
| 879 | } | ||
| 880 | }; | ||
| 881 | |||
| 821 | /// This is an `extern struct` so that inline assembly in `current` can use field offsets. | 882 | /// This is an `extern struct` so that inline assembly in `current` can use field offsets. |
| 822 | const Powerpc = extern struct { | 883 | const Powerpc = extern struct { |
| 823 | /// The numbered general-purpose registers r0 - r31. | 884 | /// The numbered general-purpose registers r0 - r31. |