aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux/tls.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-09-10 15:56:27 -0400
committerGitHub <noreply@github.com>2020-09-10 15:56:27 -0400
commit2315331d23d1cfe38f431ec5b81e52101e01dfd7 (patch)
tree7ce52b1c1034cb4ad145721218f69bc699410a59 /lib/std/os/linux/tls.zig
parentea9b38c93c38e402c807b20802eb003bcc4ddc5b (diff)
parent51fcf949f97d068e917c0c3301ba63a4a305ab6e (diff)
downloadzig-2315331d23d1cfe38f431ec5b81e52101e01dfd7.tar.gz
zig-2315331d23d1cfe38f431ec5b81e52101e01dfd7.zip
Merge pull request #5527 from shawnanastasio/ppc64le
Implement support for powerpc64{,le}
Diffstat (limited to 'lib/std/os/linux/tls.zig')
-rw-r--r--lib/std/os/linux/tls.zig13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig
index b10dae14d7..0330a4e410 100644
--- a/lib/std/os/linux/tls.zig
+++ b/lib/std/os/linux/tls.zig
@@ -53,7 +53,7 @@ const TLSVariant = enum {
};
const tls_variant = switch (builtin.arch) {
- .arm, .armeb, .aarch64, .aarch64_be, .riscv32, .riscv64, .mips, .mipsel => TLSVariant.VariantI,
+ .arm, .armeb, .aarch64, .aarch64_be, .riscv32, .riscv64, .mips, .mipsel, .powerpc, .powerpc64, .powerpc64le => TLSVariant.VariantI,
.x86_64, .i386 => TLSVariant.VariantII,
else => @compileError("undefined tls_variant for this architecture"),
};
@@ -77,12 +77,12 @@ const tls_tp_points_past_tcb = switch (builtin.arch) {
// make the generated code more efficient
const tls_tp_offset = switch (builtin.arch) {
- .mips, .mipsel => 0x7000,
+ .mips, .mipsel, .powerpc, .powerpc64, .powerpc64le => 0x7000,
else => 0,
};
const tls_dtv_offset = switch (builtin.arch) {
- .mips, .mipsel => 0x8000,
+ .mips, .mipsel, .powerpc, .powerpc64, .powerpc64le => 0x8000,
.riscv32, .riscv64 => 0x800,
else => 0,
};
@@ -165,6 +165,13 @@ pub fn setThreadPointer(addr: usize) void {
const rc = std.os.linux.syscall1(.set_thread_area, addr);
assert(rc == 0);
},
+ .powerpc, .powerpc64, .powerpc64le => {
+ asm volatile (
+ \\ mr 13, %[addr]
+ :
+ : [addr] "r" (addr)
+ );
+ },
else => @compileError("Unsupported architecture"),
}
}