diff --git a/Kernel/CoreDump.cpp b/Kernel/CoreDump.cpp index feaf75a1f3a..7b81f61793e 100644 --- a/Kernel/CoreDump.cpp +++ b/Kernel/CoreDump.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2019-2020, Jesse Buhagiar * Copyright (c) 2020, Itamar S. + * Copyright (c) 2020-2021, Linus Groh * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,6 +27,7 @@ */ #include +#include #include #include #include @@ -225,6 +227,8 @@ ByteBuffer CoreDump::create_notes_process_data() const process_obj.set("pid", m_process->pid().value()); process_obj.set("termination_signal", m_process->termination_signal()); process_obj.set("executable_path", m_process->executable() ? m_process->executable()->absolute_path() : String::empty()); + process_obj.set("arguments", JsonArray(m_process->arguments())); + process_obj.set("environment", JsonArray(m_process->environment())); auto json_data = process_obj.to_string(); process_data.append(json_data.characters(), json_data.length() + 1); diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index edc448fb020..05b83cb753c 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -641,6 +641,8 @@ void Process::finalize() m_cwd = nullptr; m_root_directory = nullptr; m_root_directory_relative_to_global_root = nullptr; + m_arguments.clear(); + m_environment.clear(); m_dead = true; diff --git a/Kernel/Process.h b/Kernel/Process.h index fbc669bd2d0..f6772bae624 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -400,6 +400,9 @@ public: Custody* executable() { return m_executable.ptr(); } const Custody* executable() const { return m_executable.ptr(); } + const Vector& arguments() const { return m_arguments; }; + const Vector& environment() const { return m_environment; }; + int number_of_open_file_descriptors() const; int max_open_file_descriptors() const { @@ -614,6 +617,9 @@ private: RefPtr m_root_directory; RefPtr m_root_directory_relative_to_global_root; + Vector m_arguments; + Vector m_environment; + RefPtr m_tty; Region* find_region_from_range(const Range&); diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 4d302fb19c4..0f806a6fc98 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -507,6 +507,8 @@ int Process::do_exec(NonnullRefPtr main_program_description, Ve #endif m_executable = main_program_description->custody(); + m_arguments = arguments; + m_environment = environment; m_promises = m_execpromises;