aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux/tls.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-04-08 06:04:16 +0200
committerGitHub <noreply@github.com>2025-04-08 06:04:16 +0200
commit2d33cc2e42d40ce0ee798d4d56c2d7da93ead44a (patch)
treebad7965f8787aaf5a84b63996cb384d0866f0743 /lib/std/os/linux/tls.zig
parentd8153fa74ab01f8cdc117e0049e0a2d2e4187892 (diff)
parentbcb4ba9afd610a0f3ab66ad828c90fd57dc95a6f (diff)
downloadzig-2d33cc2e42d40ce0ee798d4d56c2d7da93ead44a.tar.gz
zig-2d33cc2e42d40ce0ee798d4d56c2d7da93ead44a.zip
Merge pull request #23376 from sweiglbosker/m68k-archbits
Diffstat (limited to 'lib/std/os/linux/tls.zig')
-rw-r--r--lib/std/os/linux/tls.zig32
1 files changed, 14 insertions, 18 deletions
diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig
index fdaac29e5d..3587512e65 100644
--- a/lib/std/os/linux/tls.zig
+++ b/lib/std/os/linux/tls.zig
@@ -508,14 +508,7 @@ pub fn initStatic(phdrs: []elf.Phdr) void {
break :blk main_thread_area_buffer[0..area_desc.size];
}
- const begin_addr = mmap(
- null,
- area_desc.size + area_desc.alignment - 1,
- posix.PROT.READ | posix.PROT.WRITE,
- .{ .TYPE = .PRIVATE, .ANONYMOUS = true },
- -1,
- 0,
- );
+ const begin_addr = mmap_tls(area_desc.size + area_desc.alignment - 1);
if (@call(.always_inline, linux.E.init, .{begin_addr}) != .SUCCESS) @trap();
const area_ptr: [*]align(page_size_min) u8 = @ptrFromInt(begin_addr);
@@ -530,16 +523,19 @@ pub fn initStatic(phdrs: []elf.Phdr) void {
setThreadPointer(tp_value);
}
-inline fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: linux.MAP, fd: i32, offset: i64) usize {
+inline fn mmap_tls(length: usize) usize {
+ const prot = posix.PROT.READ | posix.PROT.WRITE;
+ const flags: linux.MAP = .{ .TYPE = .PRIVATE, .ANONYMOUS = true };
+
if (@hasField(linux.SYS, "mmap2")) {
return @call(.always_inline, linux.syscall6, .{
.mmap2,
- @intFromPtr(address),
+ 0,
length,
prot,
@as(u32, @bitCast(flags)),
- @as(usize, @bitCast(@as(isize, fd))),
- @as(usize, @truncate(@as(u64, @bitCast(offset)) / linux.MMAP2_UNIT)),
+ @as(usize, @bitCast(@as(isize, -1))),
+ 0,
});
} else {
// The s390x mmap() syscall existed before Linux supported syscalls with 5+ parameters, so
@@ -547,21 +543,21 @@ inline fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: linux.MAP, fd
return if (native_arch == .s390x) @call(.always_inline, linux.syscall1, .{
.mmap,
@intFromPtr(&[_]usize{
- @intFromPtr(address),
+ 0,
length,
prot,
@as(u32, @bitCast(flags)),
- @as(usize, @bitCast(@as(isize, fd))),
- @as(u64, @bitCast(offset)),
+ @as(usize, @bitCast(@as(isize, -1))),
+ 0,
}),
}) else @call(.always_inline, linux.syscall6, .{
.mmap,
- @intFromPtr(address),
+ 0,
length,
prot,
@as(u32, @bitCast(flags)),
- @as(usize, @bitCast(@as(isize, fd))),
- @as(u64, @bitCast(offset)),
+ @as(usize, @bitCast(@as(isize, -1))),
+ 0,
});
}
}