1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 22:17:42 +00:00

Kernel: Make -pie work for x86_64

This commit is contained in:
Gunnar Beutner 2021-07-23 12:56:35 +02:00 committed by Andreas Kling
parent 9d8482c3e8
commit 0edc17ee76
2 changed files with 7 additions and 2 deletions

View file

@ -357,13 +357,14 @@ if (NOT ${CMAKE_HOST_SYSTEM_NAME} MATCHES SerenityOS)
endif() endif()
if ("${SERENITY_ARCH}" STREQUAL "x86_64") if ("${SERENITY_ARCH}" STREQUAL "x86_64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcmodel=large -fno-pic -mno-red-zone") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcmodel=large -mno-red-zone")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new=8") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new=8")
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new=4") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new=4")
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -Wl,--no-dynamic-linker")
# Kernel Undefined Behavior Sanitizer (KUBSAN) # Kernel Undefined Behavior Sanitizer (KUBSAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")

View file

@ -308,6 +308,7 @@ void signal_trampoline_dummy()
// necessary to preserve it here. // necessary to preserve it here.
asm( asm(
".intel_syntax noprefix\n" ".intel_syntax noprefix\n"
".globl asm_signal_trampoline\n"
"asm_signal_trampoline:\n" "asm_signal_trampoline:\n"
"push ebp\n" "push ebp\n"
"mov ebp, esp\n" "mov ebp, esp\n"
@ -319,6 +320,7 @@ void signal_trampoline_dummy()
"add esp, 8\n" "add esp, 8\n"
"mov eax, %P0\n" "mov eax, %P0\n"
"int 0x82\n" // sigreturn syscall "int 0x82\n" // sigreturn syscall
".globl asm_signal_trampoline_end\n"
"asm_signal_trampoline_end:\n" "asm_signal_trampoline_end:\n"
".att_syntax" ::"i"(Syscall::SC_sigreturn)); ".att_syntax" ::"i"(Syscall::SC_sigreturn));
#elif ARCH(X86_64) #elif ARCH(X86_64)
@ -329,6 +331,7 @@ void signal_trampoline_dummy()
// necessary to preserve it here. // necessary to preserve it here.
asm( asm(
".intel_syntax noprefix\n" ".intel_syntax noprefix\n"
".globl asm_signal_trampoline\n"
"asm_signal_trampoline:\n" "asm_signal_trampoline:\n"
"push rbp\n" "push rbp\n"
"mov rbp, rsp\n" "mov rbp, rsp\n"
@ -339,6 +342,7 @@ void signal_trampoline_dummy()
"add rsp, 8\n" "add rsp, 8\n"
"mov rax, %P0\n" "mov rax, %P0\n"
"int 0x82\n" // sigreturn syscall "int 0x82\n" // sigreturn syscall
".globl asm_signal_trampoline_end\n"
"asm_signal_trampoline_end:\n" "asm_signal_trampoline_end:\n"
".att_syntax" ::"i"(Syscall::SC_sigreturn)); ".att_syntax" ::"i"(Syscall::SC_sigreturn));
#endif #endif