LibELF: Add helpers for setting the thread pointer register

This commit is contained in:
Sönke Holz 2024-04-13 10:57:51 +02:00 committed by Andrew Kaster
commit cb48f31d79
Notes: sideshowbarker 2024-07-17 03:03:44 +09:00
6 changed files with 67 additions and 2 deletions

View file

@ -10,7 +10,7 @@ file(GLOB LIBC_SOURCES2 "../Libraries/LibC/*/*.cpp")
set(ARCH_FOLDER "${SERENITY_ARCH}")
file(GLOB LIBC_SOURCES3 "../Libraries/LibC/arch/${ARCH_FOLDER}/*.S")
set(ELF_SOURCES ${ELF_SOURCES} "../Libraries/LibELF/Arch/${ARCH_FOLDER}/entry.S" "../Libraries/LibELF/Arch/${ARCH_FOLDER}/plt_trampoline.S")
set(ELF_SOURCES ${ELF_SOURCES} "../Libraries/LibELF/Arch/${ARCH_FOLDER}/entry.S" "../Libraries/LibELF/Arch/${ARCH_FOLDER}/plt_trampoline.S" "../Libraries/LibELF/Arch/${ARCH_FOLDER}/tls.cpp")
set(LIBC_SOURCES3 ${LIBC_SOURCES3} "../Libraries/LibC/arch/${ARCH_FOLDER}/fenv.cpp")
if ("${SERENITY_ARCH}" STREQUAL "x86_64")
set(LIBC_SOURCES3 ${LIBC_SOURCES3} "../Libraries/LibC/arch/x86_64/memset.cpp")

View file

@ -97,7 +97,7 @@ foreach(RELATIVE_HEADER_PATH IN LISTS LIBC_HEADERS)
)
endforeach()
file(GLOB ELF_SOURCES CONFIGURE_DEPENDS "../LibELF/*.cpp")
file(GLOB ELF_SOURCES CONFIGURE_DEPENDS "../LibELF/*.cpp" "../LibELF/Arch/${SERENITY_ARCH}/*.cpp")
if ("${SERENITY_ARCH}" STREQUAL "aarch64")
set(LIBC_SOURCES ${LIBC_SOURCES} "arch/aarch64/fenv.cpp")

View file

@ -0,0 +1,16 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibELF/Arch/tls.h>
namespace ELF {
void set_thread_pointer_register(FlatPtr value)
{
asm volatile("msr tpidr_el0, %0" ::"r"(value));
}
}

View file

@ -0,0 +1,16 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibELF/Arch/tls.h>
namespace ELF {
void set_thread_pointer_register(FlatPtr value)
{
asm volatile("mv tp, %0" ::"r"(value));
}
}

View file

@ -0,0 +1,15 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Types.h>
namespace ELF {
void set_thread_pointer_register(FlatPtr);
}

View file

@ -0,0 +1,18 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/Assertions.h>
#include <LibELF/Arch/tls.h>
#include <sys/archctl.h>
namespace ELF {
void set_thread_pointer_register(FlatPtr)
{
TODO();
}
}