Support for TLS on Win32
parent
93a49076f7
commit
6a687bda76
|
@ -116,7 +116,6 @@ test "AtomicFile" {
|
|||
|
||||
test "thread local storage" {
|
||||
if (builtin.single_threaded) return error.SkipZigTest;
|
||||
if (builtin.os == .windows) return error.SkipZigTest;
|
||||
const thread1 = try Thread.spawn({}, testTls);
|
||||
const thread2 = try Thread.spawn({}, testTls);
|
||||
testTls({});
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const std = @import("std");
|
||||
const builtin = @import("builtin");
|
||||
|
||||
export var _tls_index: u32 = std.os.windows.TLS_OUT_OF_INDEXES;
|
||||
export var _tls_start: u8 linksection(".tls") = 0;
|
||||
|
@ -6,6 +7,17 @@ export var _tls_end: u8 linksection(".tls$ZZZ") = 0;
|
|||
export var __xl_a: std.os.windows.PIMAGE_TLS_CALLBACK linksection(".CRT$XLA") = null;
|
||||
export var __xl_z: std.os.windows.PIMAGE_TLS_CALLBACK linksection(".CRT$XLZ") = null;
|
||||
|
||||
comptime {
|
||||
if (builtin.arch == .i386) {
|
||||
// The __tls_array is the offset of the ThreadLocalStoragePointer field
|
||||
// in the TEB block whose base address held in the %fs segment.
|
||||
asm (
|
||||
\\ .global __tls_array
|
||||
\\ __tls_array = 0x2C
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO this is how I would like it to be expressed
|
||||
// TODO also note, ReactOS has a +1 on StartAddressOfRawData and AddressOfCallBacks. Investigate
|
||||
// why they do that.
|
||||
|
|
|
@ -687,9 +687,6 @@ fn getNull() ?*i32 {
|
|||
}
|
||||
|
||||
test "thread local variable" {
|
||||
if (builtin.os == .windows and builtin.arch == .i386)
|
||||
return error.SkipZigTest;
|
||||
|
||||
const S = struct {
|
||||
threadlocal var t: i32 = 1234;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue