mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-06 16:09:30 +00:00
Kernel: Add a Thread member for arch-specific data
This will be used to store the fs_base value on x86-64, which is needed for thread-local storage.
This commit is contained in:
parent
57f4f8caf8
commit
216089c7a1
19
Kernel/Arch/ArchSpecificThreadData.h
Normal file
19
Kernel/Arch/ArchSpecificThreadData.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Platform.h>
|
||||||
|
|
||||||
|
#if ARCH(X86_64)
|
||||||
|
# include <Kernel/Arch/x86_64/ArchSpecificThreadData.h>
|
||||||
|
#elif ARCH(AARCH64)
|
||||||
|
# include <Kernel/Arch/aarch64/ArchSpecificThreadData.h>
|
||||||
|
#elif ARCH(RISCV64)
|
||||||
|
# include <Kernel/Arch/riscv64/ArchSpecificThreadData.h>
|
||||||
|
#else
|
||||||
|
# error Unknown architecture
|
||||||
|
#endif
|
16
Kernel/Arch/aarch64/ArchSpecificThreadData.h
Normal file
16
Kernel/Arch/aarch64/ArchSpecificThreadData.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Types.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
struct ArchSpecificThreadData {
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
16
Kernel/Arch/riscv64/ArchSpecificThreadData.h
Normal file
16
Kernel/Arch/riscv64/ArchSpecificThreadData.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Types.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
struct ArchSpecificThreadData {
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
16
Kernel/Arch/x86_64/ArchSpecificThreadData.h
Normal file
16
Kernel/Arch/x86_64/ArchSpecificThreadData.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Types.h>
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
|
||||||
|
struct ArchSpecificThreadData {
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1210,6 +1210,7 @@ ErrorOr<NonnullRefPtr<Thread>> Thread::clone(NonnullRefPtr<Process> process)
|
||||||
clone->m_signal_mask = m_signal_mask;
|
clone->m_signal_mask = m_signal_mask;
|
||||||
clone->m_fpu_state = m_fpu_state;
|
clone->m_fpu_state = m_fpu_state;
|
||||||
clone->m_thread_specific_data = m_thread_specific_data;
|
clone->m_thread_specific_data = m_thread_specific_data;
|
||||||
|
clone->m_arch_specific_data = m_arch_specific_data;
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <Kernel/API/POSIX/sched.h>
|
#include <Kernel/API/POSIX/sched.h>
|
||||||
#include <Kernel/API/POSIX/select.h>
|
#include <Kernel/API/POSIX/select.h>
|
||||||
#include <Kernel/API/POSIX/signal_numbers.h>
|
#include <Kernel/API/POSIX/signal_numbers.h>
|
||||||
|
#include <Kernel/Arch/ArchSpecificThreadData.h>
|
||||||
#include <Kernel/Arch/RegisterState.h>
|
#include <Kernel/Arch/RegisterState.h>
|
||||||
#include <Kernel/Arch/ThreadRegisters.h>
|
#include <Kernel/Arch/ThreadRegisters.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
|
@ -790,6 +791,8 @@ public:
|
||||||
StringView state_string() const;
|
StringView state_string() const;
|
||||||
|
|
||||||
VirtualAddress thread_specific_data() const { return m_thread_specific_data; }
|
VirtualAddress thread_specific_data() const { return m_thread_specific_data; }
|
||||||
|
ArchSpecificThreadData& arch_specific_data() { return m_arch_specific_data; }
|
||||||
|
ArchSpecificThreadData const& arch_specific_data() const { return m_arch_specific_data; }
|
||||||
|
|
||||||
ALWAYS_INLINE void yield_if_should_be_stopped()
|
ALWAYS_INLINE void yield_if_should_be_stopped()
|
||||||
{
|
{
|
||||||
|
@ -1193,6 +1196,7 @@ private:
|
||||||
IntrusiveListNode<Thread> m_blocked_threads_list_node;
|
IntrusiveListNode<Thread> m_blocked_threads_list_node;
|
||||||
LockRank m_lock_rank_mask {};
|
LockRank m_lock_rank_mask {};
|
||||||
bool m_allocation_enabled { true };
|
bool m_allocation_enabled { true };
|
||||||
|
ArchSpecificThreadData m_arch_specific_data;
|
||||||
|
|
||||||
// FIXME: remove this after annihilating Process::m_big_lock
|
// FIXME: remove this after annihilating Process::m_big_lock
|
||||||
IntrusiveListNode<Thread> m_big_lock_blocked_threads_list_node;
|
IntrusiveListNode<Thread> m_big_lock_blocked_threads_list_node;
|
||||||
|
|
Loading…
Reference in a new issue