| author | |
| committer | |
| log | 043bd716210b0233f1bc0bb90a8fb063cd63d0b8 |
| tree | bcdd994a11bcef3e1b3a679e31159141bb0275fd |
| parent | b1db696c10f3895d59d26ddfb4f2ef7a6e7384fb |
2 files changed, 7 insertions(+), 3 deletions(-)
std/os/linux/tls.zig+2-3| ... | @@ -109,9 +109,8 @@ pub var tls_image: ?TLSImage = null; | ... | @@ -109,9 +109,8 @@ pub var tls_image: ?TLSImage = null; |
| 109 | pub fn setThreadPointer(addr: usize) void { | 109 | pub fn setThreadPointer(addr: usize) void { |
| 110 | switch (builtin.arch) { | 110 | switch (builtin.arch) { |
| 111 | .x86_64 => { | 111 | .x86_64 => { |
| 112 | const ARCH_SET_FS = 0x1002; | 112 | const rc = std.os.linux.syscall2(std.os.linux.SYS_arch_prctl, |
| 113 | const rc = std.os.linux.syscall2(std.os.linux.SYS_arch_prctl, ARCH_SET_FS, addr); | 113 | std.os.linux.ARCH_SET_FS, addr); |
| 114 | // arch_prctl is documented to never fail | ||
| 115 | assert(rc == 0); | 114 | assert(rc == 0); |
| 116 | }, | 115 | }, |
| 117 | .aarch64 => { | 116 | .aarch64 => { |
std/os/linux/x86_64.zig+5| ... | @@ -388,6 +388,11 @@ pub const VDSO_CGT_VER = "LINUX_2.6"; | ... | @@ -388,6 +388,11 @@ pub const VDSO_CGT_VER = "LINUX_2.6"; |
| 388 | pub const VDSO_GETCPU_SYM = "__vdso_getcpu"; | 388 | pub const VDSO_GETCPU_SYM = "__vdso_getcpu"; |
| 389 | pub const VDSO_GETCPU_VER = "LINUX_2.6"; | 389 | pub const VDSO_GETCPU_VER = "LINUX_2.6"; |
| 390 | 390 | ||
| 391 | pub const ARCH_SET_GS = 0x1001; | ||
| 392 | pub const ARCH_SET_FS = 0x1002; | ||
| 393 | pub const ARCH_GET_FS = 0x1003; | ||
| 394 | pub const ARCH_GET_GS = 0x1004; | ||
| 395 | |||
| 391 | pub fn syscall0(number: usize) usize { | 396 | pub fn syscall0(number: usize) usize { |
| 392 | return asm volatile ("syscall" | 397 | return asm volatile ("syscall" |
| 393 | : [ret] "={rax}" (-> usize) | 398 | : [ret] "={rax}" (-> usize) |