master
1fn assert(ok: bool) void {
2 if (!ok) unreachable;
3}
4
5fn setFs(value: c_ulong) void {
6 asm volatile (
7 \\syscall
8 :
9 : [number] "{rax}" (158),
10 [code] "{rdi}" (0x1002),
11 [val] "{rsi}" (value),
12 : .{ .rcx = true, .r11 = true, .memory = true }
13 );
14}
15
16fn getFs() c_ulong {
17 var result: c_ulong = undefined;
18 asm volatile (
19 \\syscall
20 :
21 : [number] "{rax}" (158),
22 [code] "{rdi}" (0x1003),
23 [ptr] "{rsi}" (@intFromPtr(&result)),
24 : .{ .rcx = true, .r11 = true, .memory = true }
25 );
26 return result;
27}
28
29var test_value: u64 = 12345;
30
31pub fn main() void {
32 const orig_fs = getFs();
33
34 setFs(@intFromPtr(&test_value));
35 assert(getFs() == @intFromPtr(&test_value));
36
37 var test_ptr: *allowzero addrspace(.fs) u64 = @ptrFromInt(0);
38 _ = &test_ptr;
39 assert(test_ptr.* == 12345);
40 test_ptr.* = 98765;
41 assert(test_value == 98765);
42
43 setFs(orig_fs);
44}
45
46// run
47// backend=llvm
48// target=x86_64-linux
49//