mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-31 15:32:51 +00:00
This removes the allocate_tls syscall and adds an archctl option to set the fs_base for the current thread on x86-64, since you can't set that register from userspace. enter_thread_context loads the fs_base for the next thread on each context switch. This also moves tpidr_el0 (the thread pointer register on AArch64) to the register state, so it gets properly saved/restored on context switches. The userspace TLS allocation code is kept pretty similar to the original kernel TLS code, aside from a couple of style changes. We also have to add a new argument "tls_pointer" to SC_create_thread_params, as we otherwise can't prevent race conditions between setting the thread pointer register and signal handling code that might be triggered before the thread pointer was set, which could use TLS.
27 lines
879 B
C
27 lines
879 B
C
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/API/POSIX/sys/mman.h>
|
|
#include <sys/cdefs.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
void* mmap(void* addr, size_t, int prot, int flags, int fd, off_t);
|
|
void* mmap_with_name(void* addr, size_t, int prot, int flags, int fd, off_t, char const* name);
|
|
void* serenity_mmap(void* addr, size_t, int prot, int flags, int fd, off_t, size_t alignment, char const* name);
|
|
void* mremap(void* old_address, size_t old_size, size_t new_size, int flags);
|
|
int munmap(void*, size_t);
|
|
int mprotect(void*, size_t, int prot);
|
|
int set_mmap_name(void*, size_t, char const*);
|
|
int madvise(void*, size_t, int advice);
|
|
int posix_madvise(void*, size_t, int advice);
|
|
int mlock(void const*, size_t);
|
|
int munlock(void const*, size_t);
|
|
int msync(void*, size_t, int flags);
|
|
|
|
__END_DECLS
|