authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-10-06 16:45:51+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-10-06 16:45:51+02:00
log6a687bda76a34775bde35ee386e59f53961341f7
treeb6ed1c723a5cdc2655e68ceea5c7dd4e609d0c71
parent93a49076f725e6e64f05b6be8422312c7dcda6d0

Support for TLS on Win32


3 files changed, 12 insertions(+), 4 deletions(-)

lib/std/os/test.zig-1
......@@ -116,7 +116,6 @@ test "AtomicFile" {
116116
117117test "thread local storage" {
118118 if (builtin.single_threaded) return error.SkipZigTest;
119 if (builtin.os == .windows) return error.SkipZigTest;
120119 const thread1 = try Thread.spawn({}, testTls);
121120 const thread2 = try Thread.spawn({}, testTls);
122121 testTls({});
lib/std/special/start_windows_tls.zig+12
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34export var _tls_index: u32 = std.os.windows.TLS_OUT_OF_INDEXES;
45export var _tls_start: u8 linksection(".tls") = 0;
......@@ -6,6 +7,17 @@ export var _tls_end: u8 linksection(".tls$ZZZ") = 0;
67export var __xl_a: std.os.windows.PIMAGE_TLS_CALLBACK linksection(".CRT$XLA") = null;
78export var __xl_z: std.os.windows.PIMAGE_TLS_CALLBACK linksection(".CRT$XLZ") = null;
89
10comptime {
11 if (builtin.arch == .i386) {
12 // The __tls_array is the offset of the ThreadLocalStoragePointer field
13 // in the TEB block whose base address held in the %fs segment.
14 asm (
15 \\ .global __tls_array
16 \\ __tls_array = 0x2C
17 );
18 }
19}
20
921// TODO this is how I would like it to be expressed
1022// TODO also note, ReactOS has a +1 on StartAddressOfRawData and AddressOfCallBacks. Investigate
1123// why they do that.
test/stage1/behavior/misc.zig-3
......@@ -687,9 +687,6 @@ fn getNull() ?*i32 {
687687}
688688
689689test "thread local variable" {
690 if (builtin.os == .windows and builtin.arch == .i386)
691 return error.SkipZigTest;
692
693690 const S = struct {
694691 threadlocal var t: i32 = 1234;
695692 };