| ... | ... | @@ -63,6 +63,7 @@ const Variant = enum { |
| 63 | 63 | }; |
| 64 | 64 | |
| 65 | 65 | const current_variant: Variant = switch (native_arch) { |
| 66 | .arc, |
| 66 | 67 | .arm, |
| 67 | 68 | .armeb, |
| 68 | 69 | .aarch64, |
| ... | ... | @@ -239,6 +240,16 @@ pub fn setThreadPointer(addr: usize) void { |
| 239 | 240 | : [addr] "r" (addr), |
| 240 | 241 | ); |
| 241 | 242 | }, |
| 243 | .arc => { |
| 244 | // We apparently need to both set r25 (TP) *and* inform the kernel... |
| 245 | asm volatile ( |
| 246 | \\ mov r25, %[addr] |
| 247 | : |
| 248 | : [addr] "r" (addr), |
| 249 | ); |
| 250 | const rc = @call(.always_inline, linux.syscall1, .{ .arc_settls, addr }); |
| 251 | assert(rc == 0); |
| 252 | }, |
| 242 | 253 | .arm, .armeb, .thumb, .thumbeb => { |
| 243 | 254 | const rc = @call(.always_inline, linux.syscall1, .{ .set_tls, addr }); |
| 244 | 255 | assert(rc == 0); |