Commit 9abe3aeeea

Alex Rønne Petersen <alex@alexrp.com>
2024-07-28 21:10:16
std.os.linux.tls: Add arc support.
1 parent e6fe7a3
Changed files (1)
lib
std
os
linux
lib/std/os/linux/tls.zig
@@ -63,6 +63,7 @@ const Variant = enum {
 };
 
 const current_variant: Variant = switch (native_arch) {
+    .arc,
     .arm,
     .armeb,
     .aarch64,
@@ -239,6 +240,16 @@ pub fn setThreadPointer(addr: usize) void {
                 : [addr] "r" (addr),
             );
         },
+        .arc => {
+            // We apparently need to both set r25 (TP) *and* inform the kernel...
+            asm volatile (
+                \\ mov r25, %[addr]
+                :
+                : [addr] "r" (addr),
+            );
+            const rc = @call(.always_inline, linux.syscall1, .{ .arc_settls, addr });
+            assert(rc == 0);
+        },
         .arm, .armeb, .thumb, .thumbeb => {
             const rc = @call(.always_inline, linux.syscall1, .{ .set_tls, addr });
             assert(rc == 0);