commit 9abe3aeeea2f9b1d301a11046d43be279bf24fd5 (tree)
parent e6fe7a329ab42d259437b83a4294009feae7bfcd
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Sun, 28 Jul 2024 21:10:16 +0200
std.os.linux.tls: Add arc support.
Diffstat:
1 file changed, 11 insertions(+), 0 deletions(-)
diff --git a/lib/std/os/linux/tls.zig b/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);