Skip to content

Commit ce65533

Browse files
LemonBoyandrewrk
authored andcommitted
std: Properly fix the TLS alignment problem
ad05509 introduced a fix for the wrong problem, the logic to align the start of main_thread_tls_buffer was already there but was flawed. Fix it for good and avoid wasting too many bytes for alignment purposes.
1 parent ad05509 commit ce65533

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

lib/std/os/linux/tls.zig

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ pub fn prepareTLS(area: []u8) usize {
327327
if (tls_tp_points_past_tcb) tls_image.data_offset else tls_image.tcb_offset;
328328
}
329329

330-
var main_thread_tls_buffer: [256]u8 align(16) = undefined;
330+
var main_thread_tls_buffer: [256]u8 = undefined;
331331

332332
pub fn initStaticTLS() void {
333333
initTLS();
@@ -351,7 +351,9 @@ pub fn initStaticTLS() void {
351351
};
352352

353353
// Make sure the slice is correctly aligned
354-
const start = @ptrToInt(alloc_tls_area.ptr) & (tls_image.alloc_align - 1);
354+
const begin_addr = @ptrToInt(alloc_tls_area.ptr);
355+
const begin_aligned_addr = mem.alignForward(begin_addr, tls_image.alloc_align);
356+
const start = begin_aligned_addr - begin_addr;
355357
const tls_area = alloc_tls_area[start .. start + tls_image.alloc_size];
356358

357359
const tp_value = prepareTLS(tls_area);

0 commit comments

Comments
 (0)