| ... | ... | @@ -3142,6 +3142,8 @@ pub fn spawnThread(context: var, comptime startFn: var) SpawnThreadError!*Thread |
| 3142 | 3142 | l = mem.alignForward(l, tls_phdr.p_align); |
| 3143 | 3143 | tls_start_offset = l; |
| 3144 | 3144 | l += tls_phdr.p_memsz; |
| 3145 | // the fs register address |
| 3146 | l += @sizeOf(usize); |
| 3145 | 3147 | } |
| 3146 | 3148 | } |
| 3147 | 3149 | break :blk l; |
| ... | ... | @@ -3184,7 +3186,7 @@ pub fn spawnThread(context: var, comptime startFn: var) SpawnThreadError!*Thread |
| 3184 | 3186 | var newtls: usize = undefined; |
| 3185 | 3187 | if (linux_tls_phdr) |tls_phdr| { |
| 3186 | 3188 | @memcpy(@intToPtr([*]u8, mmap_addr + tls_start_offset), linux_tls_img_src, tls_phdr.p_filesz); |
| 3187 | | newtls = mmap_addr + mmap_len; |
| 3189 | newtls = mmap_addr + mmap_len - @sizeOf(usize); |
| 3188 | 3190 | @intToPtr(*usize, newtls).* = newtls; |
| 3189 | 3191 | flags |= posix.CLONE_SETTLS; |
| 3190 | 3192 | } |