1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:07:35 +00:00

Kernel: Pass trampolines instead of lambdas to create_kernel_process

With -Og, all calls to create_kernel_process were triggering -Wnonnull
when creating these lambdas that get implicitly converted to function
pointers. A different design of create_kernel_process to use
AK::Function instead might avoid this awkward behavior.
This commit is contained in:
Andrew Kaster 2021-05-23 13:45:58 -06:00 committed by Andreas Kling
parent 6459c5a713
commit 86e3010043
2 changed files with 22 additions and 19 deletions

View file

@ -151,17 +151,19 @@ public:
return current_thread ? &current_thread->process() : nullptr;
}
template<typename EntryFunction>
static void kernel_process_trampoline(void* data)
{
EntryFunction* func = reinterpret_cast<EntryFunction*>(data);
(*func)();
delete func;
}
template<typename EntryFunction>
static RefPtr<Process> create_kernel_process(RefPtr<Thread>& first_thread, String&& name, EntryFunction entry, u32 affinity = THREAD_AFFINITY_DEFAULT)
{
auto* entry_func = new EntryFunction(move(entry));
return create_kernel_process(
first_thread, move(name), [](void* data) {
EntryFunction* func = reinterpret_cast<EntryFunction*>(data);
(*func)();
delete func;
},
entry_func, affinity);
return create_kernel_process(first_thread, move(name), &Process::kernel_process_trampoline<EntryFunction>, entry_func, affinity);
}
static RefPtr<Process> create_kernel_process(RefPtr<Thread>& first_thread, String&& name, void (*entry)(void*), void* entry_data = nullptr, u32 affinity = THREAD_AFFINITY_DEFAULT);
@ -805,7 +807,6 @@ inline ProcessID Thread::pid() const
VERIFY_NOT_REACHED(); \
} \
} while (0)
}
inline static String copy_string_from_user(const Kernel::Syscall::StringArgument& string)