std.os.linux.tls: Add arc support.

This commit is contained in:
Alex Rønne Petersen 2024-07-28 21:10:16 +02:00
parent e6fe7a329a
commit 9abe3aeeea
No known key found for this signature in database

View File

@ -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);