#pragma once #include "arch/CPU.h" #include "arch/MMU.h" #include "binfmt/BinaryFormat.h" #include "fs/VFS.h" #include "memory/AddressSpace.h" #include "thread/Thread.h" #include #include #include #include #include #include class Thread; class ThreadImage { public: static Result> try_load_from_binary(SharedPtr inode); static Result> clone_from_thread(Thread* parent); Result push_mem_on_stack(const u8* mem, usize size); Result push_string_vector_on_stack(const Vector& vec); void apply(Thread* thread); private: OwnedPtr m_address_space; Stack m_user_stack; Stack m_kernel_stack; u64 m_program_entry; u64 m_sp; };