authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-06-04 14:54:25+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-06-04 16:08:38+02:00
log45c611a7afb51226dec31ef709090f762bfd9d38
tree64e201c2c8f9b47d1bdbc6595f4a813f0fa756c1
parentdf3a4468f1da279e5d0dfd7bef7bc435ad3bb620
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux: add microblaze arch bits

closes https://codeberg.org/ziglang/zig/issues/30944

2 files changed, 180 insertions(+), 0 deletions(-)

lib/std/os/linux.zig+10
......@@ -40,6 +40,7 @@ const arch_bits = switch (native_arch) {
4040 .loongarch32 => @import("linux/loongarch32.zig"),
4141 .loongarch64 => @import("linux/loongarch64.zig"),
4242 .m68k => @import("linux/m68k.zig"),
43 .microblaze, .microblazeel => @import("linux/microblaze.zig"),
4344 .mips, .mipsel => @import("linux/mips.zig"),
4445 .mips64, .mips64el => switch (builtin.abi) {
4546 .gnuabin32, .muslabin32 => @import("linux/mipsn32.zig"),
......@@ -297,6 +298,8 @@ pub const MAP = switch (native_arch) {
297298 .csky,
298299 .hexagon,
299300 .m68k,
301 .microblaze,
302 .microblazeel,
300303 .or1k,
301304 .s390x,
302305 => packed struct(u32) {
......@@ -527,6 +530,8 @@ pub const O = switch (native_arch) {
527530 .arceb,
528531 .csky,
529532 .hexagon,
533 .microblaze,
534 .microblazeel,
530535 .or1k,
531536 .s390x,
532537 .xtensa,
......@@ -6982,6 +6987,8 @@ pub const MINSIGSTKSZ = switch (native_arch) {
69826987 .mipsel,
69836988 .mips64,
69846989 .mips64el,
6990 .microblaze,
6991 .microblazeel,
69856992 .or1k,
69866993 .powerpc,
69876994 .powerpcle,
......@@ -7020,6 +7027,8 @@ pub const SIGSTKSZ = switch (native_arch) {
70207027 .mipsel,
70217028 .mips64,
70227029 .mips64el,
7030 .microblaze,
7031 .microblazeel,
70237032 .or1k,
70247033 .powerpc,
70257034 .powerpcle,
......@@ -10723,6 +10732,7 @@ pub const AUDIT = struct {
1072310732 .loongarch32 => .LOONGARCH32,
1072410733 .loongarch64 => .LOONGARCH64,
1072510734 .m68k => .M68K,
10735 .microblaze, .microblazeel => .MICROBLAZE,
1072610736 .mips => .MIPS,
1072710737 .mipsel => .MIPSEL,
1072810738 .mips64 => switch (native_abi) {
lib/std/os/linux/microblaze.zig created+170
......@@ -0,0 +1,170 @@
1const builtin = @import("builtin");
2const std = @import("../../std.zig");
3const SYS = std.os.linux.SYS;
4
5pub const syscall_arg_t = u32;
6
7pub fn syscall0(
8 number: SYS,
9) u32 {
10 return asm volatile ("brki r14, 0x8"
11 : [ret] "={r3}" (-> u32),
12 : [number] "{r12}" (@intFromEnum(number)),
13 : .{ .r4 = true, .memory = true });
14}
15
16pub fn syscall1(
17 number: SYS,
18 arg1: syscall_arg_t,
19) u32 {
20 return asm volatile ("brki r14, 0x8"
21 : [ret] "={r3}" (-> u32),
22 : [number] "{r12}" (@intFromEnum(number)),
23 [arg1] "{r5}" (arg1),
24 : .{ .r4 = true, .memory = true });
25}
26
27pub fn syscall2(
28 number: SYS,
29 arg1: syscall_arg_t,
30 arg2: syscall_arg_t,
31) u32 {
32 return asm volatile ("brki r14, 0x8"
33 : [ret] "={r3}" (-> u32),
34 : [number] "{r12}" (@intFromEnum(number)),
35 [arg1] "{r5}" (arg1),
36 [arg2] "{r6}" (arg2),
37 : .{ .r4 = true, .memory = true });
38}
39
40pub fn syscall3(
41 number: SYS,
42 arg1: syscall_arg_t,
43 arg2: syscall_arg_t,
44 arg3: syscall_arg_t,
45) u32 {
46 return asm volatile ("brki r14, 0x8"
47 : [ret] "={r3}" (-> u32),
48 : [number] "{r12}" (@intFromEnum(number)),
49 [arg1] "{r5}" (arg1),
50 [arg2] "{r6}" (arg2),
51 [arg3] "{r7}" (arg3),
52 : .{ .r4 = true, .memory = true });
53}
54
55pub fn syscall4(
56 number: SYS,
57 arg1: syscall_arg_t,
58 arg2: syscall_arg_t,
59 arg3: syscall_arg_t,
60 arg4: syscall_arg_t,
61) u32 {
62 return asm volatile ("brki r14, 0x8"
63 : [ret] "={r3}" (-> u32),
64 : [number] "{r12}" (@intFromEnum(number)),
65 [arg1] "{r5}" (arg1),
66 [arg2] "{r6}" (arg2),
67 [arg3] "{r7}" (arg3),
68 [arg4] "{r8}" (arg4),
69 : .{ .r4 = true, .memory = true });
70}
71
72pub fn syscall5(
73 number: SYS,
74 arg1: syscall_arg_t,
75 arg2: syscall_arg_t,
76 arg3: syscall_arg_t,
77 arg4: syscall_arg_t,
78 arg5: syscall_arg_t,
79) u32 {
80 return asm volatile ("brki r14, 0x8"
81 : [ret] "={r3}" (-> u32),
82 : [number] "{r12}" (@intFromEnum(number)),
83 [arg1] "{r5}" (arg1),
84 [arg2] "{r6}" (arg2),
85 [arg3] "{r7}" (arg3),
86 [arg4] "{r8}" (arg4),
87 [arg5] "{r9}" (arg5),
88 : .{ .r4 = true, .memory = true });
89}
90
91pub fn syscall6(
92 number: SYS,
93 arg1: syscall_arg_t,
94 arg2: syscall_arg_t,
95 arg3: syscall_arg_t,
96 arg4: syscall_arg_t,
97 arg5: syscall_arg_t,
98 arg6: syscall_arg_t,
99) u32 {
100 return asm volatile ("brki r14, 0x8"
101 : [ret] "={r3}" (-> u32),
102 : [number] "{r12}" (@intFromEnum(number)),
103 [arg1] "{r5}" (arg1),
104 [arg2] "{r6}" (arg2),
105 [arg3] "{r7}" (arg3),
106 [arg4] "{r8}" (arg4),
107 [arg5] "{r9}" (arg5),
108 [arg6] "{r10}" (arg6),
109 : .{ .r4 = true, .memory = true });
110}
111
112pub fn clone() callconv(.naked) u32 {
113 // __clone(func, stack, flags, arg, ptid, tls, ctid)
114 // r5, r6, r7, r8, r9, r10, +28
115 //
116 // syscall(SYS_clone, flags, stack, ptid, ctid, tls)
117 // r12 r5, r6, r8, r9, r10
118 asm volatile (
119 \\ andi r6, r6, -4
120 \\
121 \\ addi r6, r6, -8
122 \\ swi r5, r6, 0
123 \\ swi r8, r6, 4
124 \\
125 \\ ori r12, r0, 120 # SYS_clone
126 \\ ori r5, r7, 0
127 \\ ori r7, r0, 0 # stack size
128 \\ ori r8, r9, 0
129 \\ lwi r9, r1, 28
130 \\ brki r14, 0x8
131 \\ beqi r3, 1f
132 \\
133 \\ // parent
134 \\ rtsd r15, 8
135 \\ nop
136 \\
137 \\ // child
138 \\1:
139 \\ ori r15, r0, 0
140 \\ ori r19, r0, 0
141 \\
142 \\ lwi r3, r1, 0
143 \\ lwi r5, r1, 4
144 \\ brald r15, r3
145 \\ nop
146 \\
147 \\ ori r12, r0, 1 # SYS_exit
148 \\ brki r14, 0x8
149 );
150}
151
152pub fn restore() callconv(.naked) noreturn {
153 asm volatile (
154 \\ brki r14, 0x8
155 :
156 : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
157 );
158}
159
160pub fn restore_rt() callconv(.naked) noreturn {
161 asm volatile (
162 \\ brki r14, 0x8
163 :
164 : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
165 );
166}
167
168pub const time_t = i32;
169
170pub const VDSO = void;