diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 3692259382b4de..3c80c972ae1496 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -48,7 +48,7 @@ set(KERNEL_SOURCES CMOS.cpp CommandLine.cpp ConsoleDevice.cpp - CoreDump.cpp + Coredump.cpp Devices/AsyncDeviceRequest.cpp Devices/BlockDevice.cpp Devices/CharacterDevice.cpp diff --git a/Kernel/CoreDump.cpp b/Kernel/Coredump.cpp similarity index 90% rename from Kernel/CoreDump.cpp rename to Kernel/Coredump.cpp index 3c33ea3ae405c5..eb4657060d421e 100644 --- a/Kernel/CoreDump.cpp +++ b/Kernel/Coredump.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -19,41 +19,41 @@ #include #include #include -#include +#include namespace Kernel { -OwnPtr CoreDump::create(NonnullRefPtr process, const String& output_path) +OwnPtr Coredump::create(NonnullRefPtr process, const String& output_path) { if (!process->is_dumpable()) { - dbgln("Refusing to generate CoreDump for non-dumpable process {}", process->pid().value()); + dbgln("Refusing to generate coredump for non-dumpable process {}", process->pid().value()); return {}; } auto fd = create_target_file(process, output_path); if (!fd) return {}; - return adopt_own_if_nonnull(new (nothrow) CoreDump(move(process), fd.release_nonnull())); + return adopt_own_if_nonnull(new (nothrow) Coredump(move(process), fd.release_nonnull())); } -CoreDump::CoreDump(NonnullRefPtr process, NonnullRefPtr&& fd) +Coredump::Coredump(NonnullRefPtr process, NonnullRefPtr&& fd) : m_process(move(process)) , m_fd(move(fd)) , m_num_program_headers(m_process->address_space().region_count() + 1) // +1 for NOTE segment { } -RefPtr CoreDump::create_target_file(const Process& process, const String& output_path) +RefPtr Coredump::create_target_file(const Process& process, const String& output_path) { auto output_directory = KLexicalPath::dirname(output_path); auto dump_directory = VirtualFileSystem::the().open_directory(output_directory, VirtualFileSystem::the().root_custody()); if (dump_directory.is_error()) { - dbgln("Can't find directory '{}' for core dump", output_directory); + dbgln("Can't find directory '{}' for coredump", output_directory); return nullptr; } auto dump_directory_metadata = dump_directory.value()->inode().metadata(); if (dump_directory_metadata.uid != 0 || dump_directory_metadata.gid != 0 || dump_directory_metadata.mode != 040777) { - dbgln("Refusing to put core dump in sketchy directory '{}'", output_directory); + dbgln("Refusing to put coredump in sketchy directory '{}'", output_directory); return nullptr; } auto fd_or_error = VirtualFileSystem::the().open( @@ -64,14 +64,14 @@ RefPtr CoreDump::create_target_file(const Process& process, con UidAndGid { process.uid(), process.gid() }); if (fd_or_error.is_error()) { - dbgln("Failed to open core dump '{}' for writing", output_path); + dbgln("Failed to open coredump '{}' for writing", output_path); return nullptr; } return fd_or_error.value(); } -KResult CoreDump::write_elf_header() +KResult Coredump::write_elf_header() { ElfW(Ehdr) elf_file_header; elf_file_header.e_ident[EI_MAG0] = 0x7f; @@ -117,7 +117,7 @@ KResult CoreDump::write_elf_header() return KSuccess; } -KResult CoreDump::write_program_headers(size_t notes_size) +KResult Coredump::write_program_headers(size_t notes_size) { size_t offset = sizeof(ElfW(Ehdr)) + m_num_program_headers * sizeof(ElfW(Phdr)); for (auto& region : m_process->address_space().regions()) { @@ -159,7 +159,7 @@ KResult CoreDump::write_program_headers(size_t notes_size) return KSuccess; } -KResult CoreDump::write_regions() +KResult Coredump::write_regions() { for (auto& region : m_process->address_space().regions()) { if (region->is_kernel()) @@ -190,7 +190,7 @@ KResult CoreDump::write_regions() return KSuccess; } -KResult CoreDump::write_notes_segment(ByteBuffer& notes_segment) +KResult Coredump::write_notes_segment(ByteBuffer& notes_segment) { auto result = m_fd->write(UserOrKernelBuffer::for_kernel_buffer(notes_segment.data()), notes_segment.size()); if (result.is_error()) @@ -198,7 +198,7 @@ KResult CoreDump::write_notes_segment(ByteBuffer& notes_segment) return KSuccess; } -ByteBuffer CoreDump::create_notes_process_data() const +ByteBuffer Coredump::create_notes_process_data() const { ByteBuffer process_data; @@ -232,7 +232,7 @@ ByteBuffer CoreDump::create_notes_process_data() const return process_data; } -ByteBuffer CoreDump::create_notes_threads_data() const +ByteBuffer Coredump::create_notes_threads_data() const { ByteBuffer threads_data; @@ -253,7 +253,7 @@ ByteBuffer CoreDump::create_notes_threads_data() const return threads_data; } -ByteBuffer CoreDump::create_notes_regions_data() const +ByteBuffer Coredump::create_notes_regions_data() const { ByteBuffer regions_data; size_t region_index = 0; @@ -282,7 +282,7 @@ ByteBuffer CoreDump::create_notes_regions_data() const return regions_data; } -ByteBuffer CoreDump::create_notes_metadata_data() const +ByteBuffer Coredump::create_notes_metadata_data() const { ByteBuffer metadata_data; @@ -303,7 +303,7 @@ ByteBuffer CoreDump::create_notes_metadata_data() const return metadata_data; } -ByteBuffer CoreDump::create_notes_segment_data() const +ByteBuffer Coredump::create_notes_segment_data() const { ByteBuffer notes_buffer; @@ -319,7 +319,7 @@ ByteBuffer CoreDump::create_notes_segment_data() const return notes_buffer; } -KResult CoreDump::write() +KResult Coredump::write() { SpinlockLocker lock(m_process->address_space().get_lock()); ProcessPagingScope scope(m_process); diff --git a/Kernel/CoreDump.h b/Kernel/Coredump.h similarity index 86% rename from Kernel/CoreDump.h rename to Kernel/Coredump.h index 1bbb98bf455143..9fb9200c576fb9 100644 --- a/Kernel/CoreDump.h +++ b/Kernel/Coredump.h @@ -13,15 +13,15 @@ namespace Kernel { -class CoreDump { +class Coredump { public: - static OwnPtr create(NonnullRefPtr, const String& output_path); + static OwnPtr create(NonnullRefPtr, const String& output_path); - ~CoreDump() = default; + ~Coredump() = default; [[nodiscard]] KResult write(); private: - CoreDump(NonnullRefPtr, NonnullRefPtr&&); + Coredump(NonnullRefPtr, NonnullRefPtr&&); static RefPtr create_target_file(const Process&, const String& output_path); [[nodiscard]] KResult write_elf_header(); diff --git a/Kernel/Forward.h b/Kernel/Forward.h index ca14baeae5de0e..1d228d06193ec2 100644 --- a/Kernel/Forward.h +++ b/Kernel/Forward.h @@ -12,7 +12,7 @@ namespace Kernel { class BlockDevice; class CharacterDevice; -class CoreDump; +class Coredump; class Custody; class DevFSDeviceInode; class DevFSDirectoryInode; diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 6db7f71e599b8b..0d92fa7d2f62e7 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #ifdef ENABLE_KERNEL_COVERAGE_COLLECTION # include @@ -406,7 +406,7 @@ void Process::crash(int signal, FlatPtr ip, bool out_of_memory) ProtectedDataMutationScope scope { *this }; m_protected_values.termination_signal = signal; } - set_dump_core(!out_of_memory); + set_should_generate_coredump(!out_of_memory); address_space().dump_regions(); VERIFY(is_user_process()); die(); @@ -561,10 +561,10 @@ KResultOr> Process::get_syscall_path_argument(Syscall::St bool Process::dump_core() { VERIFY(is_dumpable()); - VERIFY(should_core_dump()); + VERIFY(should_generate_coredump()); dbgln("Generating coredump for pid: {}", pid().value()); auto coredump_path = String::formatted("/tmp/coredump/{}_{}_{}", name(), pid().value(), kgettimeofday().to_truncated_seconds()); - auto coredump = CoreDump::create(*this, coredump_path); + auto coredump = Coredump::create(*this, coredump_path); if (!coredump) return false; return !coredump->write().is_error(); @@ -615,7 +615,7 @@ void Process::finalize() dbgln_if(PROCESS_DEBUG, "Finalizing process {}", *this); if (is_dumpable()) { - if (m_should_dump_core) + if (m_should_generate_coredump) dump_core(); if (m_perf_event_buffer) { dump_perfcore(); diff --git a/Kernel/Process.h b/Kernel/Process.h index 47e65adbbec38c..8e4fc19c9c217d 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -118,7 +118,7 @@ class Process final MAKE_ALIGNED_ALLOCATED(Process, PAGE_SIZE); friend class Thread; - friend class CoreDump; + friend class Coredump; friend class ProcFSProcessFileDescriptions; // Helper class to temporarily unprotect a process's protected data so you can write to it. @@ -190,8 +190,9 @@ class Process final bool is_profiling() const { return m_profiling; } void set_profiling(bool profiling) { m_profiling = profiling; } - bool should_core_dump() const { return m_should_dump_core; } - void set_dump_core(bool dump_core) { m_should_dump_core = dump_core; } + + bool should_generate_coredump() const { return m_should_generate_coredump; } + void set_should_generate_coredump(bool b) { m_should_generate_coredump = b; } bool is_dying() const { return m_state.load(AK::MemoryOrder::memory_order_acquire) != State::Running; } bool is_dead() const { return m_state.load(AK::MemoryOrder::memory_order_acquire) == State::Dead; } @@ -498,7 +499,7 @@ class Process final KResult set_coredump_property(NonnullOwnPtr key, NonnullOwnPtr value); KResult try_set_coredump_property(StringView key, StringView value); - const NonnullRefPtrVector& threads_for_coredump(Badge) const { return m_threads_for_coredump; } + const NonnullRefPtrVector& threads_for_coredump(Badge) const { return m_threads_for_coredump; } PerformanceEventBuffer* perf_events() { return m_perf_event_buffer; } @@ -754,7 +755,7 @@ class Process final Atomic m_state { State::Running }; bool m_profiling { false }; Atomic m_is_stopped { false }; - bool m_should_dump_core { false }; + bool m_should_generate_coredump { false }; RefPtr m_executable; RefPtr m_cwd; diff --git a/Kernel/Syscalls/profiling.cpp b/Kernel/Syscalls/profiling.cpp index 3580ba8910dd49..45153f68fd9ac0 100644 --- a/Kernel/Syscalls/profiling.cpp +++ b/Kernel/Syscalls/profiling.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include #include diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 9b7a00d8ecc9bf..31bff2ec58d955 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -890,7 +890,7 @@ DispatchSignalResult Thread::dispatch_signal(u8 signal) set_state(Stopped, signal); return DispatchSignalResult::Yield; case DefaultSignalAction::DumpCore: - process.set_dump_core(true); + process.set_should_generate_coredump(true); process.for_each_thread([](auto& thread) { thread.set_dump_backtrace_on_finalization(); }); diff --git a/Userland/Applications/CrashReporter/CMakeLists.txt b/Userland/Applications/CrashReporter/CMakeLists.txt index e89bce6d9a0d41..3cc04bb72cac80 100644 --- a/Userland/Applications/CrashReporter/CMakeLists.txt +++ b/Userland/Applications/CrashReporter/CMakeLists.txt @@ -13,4 +13,4 @@ set(SOURCES ) serenity_app(CrashReporter ICON app-crash-reporter) -target_link_libraries(CrashReporter LibCore LibCoreDump LibDesktop LibGUI) +target_link_libraries(CrashReporter LibCore LibCoredump LibDesktop LibGUI) diff --git a/Userland/Applications/CrashReporter/main.cpp b/Userland/Applications/CrashReporter/main.cpp index d14f37f0a1a87c..1227c5a1e20593 100644 --- a/Userland/Applications/CrashReporter/main.cpp +++ b/Userland/Applications/CrashReporter/main.cpp @@ -11,11 +11,11 @@ #include #include #include -#include -#include +#include +#include #include #include -#include +#include #include #include #include @@ -36,9 +36,9 @@ struct TitleAndText { String text; }; -static TitleAndText build_backtrace(const CoreDump::Reader& coredump, const ELF::Core::ThreadInfo& thread_info, size_t thread_index) +static TitleAndText build_backtrace(Coredump::Reader const& coredump, ELF::Core::ThreadInfo const& thread_info, size_t thread_index) { - CoreDump::Backtrace backtrace(coredump, thread_info); + Coredump::Backtrace backtrace(coredump, thread_info); auto metadata = coredump.metadata(); StringBuilder builder; @@ -129,7 +129,7 @@ int main(int argc, char** argv) u8 termination_signal { 0 }; { - auto coredump = CoreDump::Reader::create(coredump_path); + auto coredump = Coredump::Reader::create(coredump_path); if (!coredump) { warnln("Could not open coredump '{}'", coredump_path); return 1; diff --git a/Userland/Libraries/CMakeLists.txt b/Userland/Libraries/CMakeLists.txt index c4ebb79bb06bd8..ac96530081896b 100644 --- a/Userland/Libraries/CMakeLists.txt +++ b/Userland/Libraries/CMakeLists.txt @@ -5,7 +5,7 @@ add_subdirectory(LibCards) add_subdirectory(LibChess) add_subdirectory(LibCompress) add_subdirectory(LibCore) -add_subdirectory(LibCoreDump) +add_subdirectory(LibCoredump) add_subdirectory(LibCpp) add_subdirectory(LibCrypt) add_subdirectory(LibCrypto) diff --git a/Userland/Libraries/LibCoreDump/CMakeLists.txt b/Userland/Libraries/LibCoreDump/CMakeLists.txt deleted file mode 100644 index d1b05fed07d8d3..00000000000000 --- a/Userland/Libraries/LibCoreDump/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SOURCES - Backtrace.cpp - Reader.cpp -) - -serenity_lib(LibCoreDump coredump) -target_link_libraries(LibCoreDump LibC LibCompress LibCore LibDebug) diff --git a/Userland/Libraries/LibCoreDump/Backtrace.cpp b/Userland/Libraries/LibCoredump/Backtrace.cpp similarity index 97% rename from Userland/Libraries/LibCoreDump/Backtrace.cpp rename to Userland/Libraries/LibCoredump/Backtrace.cpp index 0d0a361ab59240..1edbccc256949b 100644 --- a/Userland/Libraries/LibCoreDump/Backtrace.cpp +++ b/Userland/Libraries/LibCoredump/Backtrace.cpp @@ -10,12 +10,12 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include -namespace CoreDump { +namespace Coredump { ELFObjectInfo const* Backtrace::object_info_for_region(ELF::Core::MemoryRegionInfo const& region) { diff --git a/Userland/Libraries/LibCoreDump/Backtrace.h b/Userland/Libraries/LibCoredump/Backtrace.h similarity index 94% rename from Userland/Libraries/LibCoreDump/Backtrace.h rename to Userland/Libraries/LibCoredump/Backtrace.h index 93f9813c56f1fa..e4349ad52f641d 100644 --- a/Userland/Libraries/LibCoreDump/Backtrace.h +++ b/Userland/Libraries/LibCoredump/Backtrace.h @@ -7,11 +7,11 @@ #pragma once #include -#include +#include #include -#include +#include -namespace CoreDump { +namespace Coredump { struct ELFObjectInfo { ELFObjectInfo(NonnullRefPtr file, NonnullOwnPtr&& debug_info, NonnullOwnPtr image) diff --git a/Userland/Libraries/LibCoredump/CMakeLists.txt b/Userland/Libraries/LibCoredump/CMakeLists.txt new file mode 100644 index 00000000000000..ec2bb5e8d7249e --- /dev/null +++ b/Userland/Libraries/LibCoredump/CMakeLists.txt @@ -0,0 +1,7 @@ +set(SOURCES + Backtrace.cpp + Reader.cpp +) + +serenity_lib(LibCoredump Coredump) +target_link_libraries(LibCoredump LibC LibCompress LibCore LibDebug) diff --git a/Userland/Libraries/LibCoreDump/Forward.h b/Userland/Libraries/LibCoredump/Forward.h similarity index 88% rename from Userland/Libraries/LibCoreDump/Forward.h rename to Userland/Libraries/LibCoredump/Forward.h index b66229b42f5c93..a8fd28de759116 100644 --- a/Userland/Libraries/LibCoreDump/Forward.h +++ b/Userland/Libraries/LibCoredump/Forward.h @@ -6,7 +6,7 @@ #pragma once -namespace CoreDump { +namespace Coredump { class Backtrace; class Reader; diff --git a/Userland/Libraries/LibCoreDump/Reader.cpp b/Userland/Libraries/LibCoredump/Reader.cpp similarity index 98% rename from Userland/Libraries/LibCoreDump/Reader.cpp rename to Userland/Libraries/LibCoredump/Reader.cpp index 476fbb738c4158..f913597e4c701e 100644 --- a/Userland/Libraries/LibCoreDump/Reader.cpp +++ b/Userland/Libraries/LibCoredump/Reader.cpp @@ -7,11 +7,11 @@ #include #include #include -#include +#include #include #include -namespace CoreDump { +namespace Coredump { OwnPtr Reader::create(const String& path) { @@ -40,10 +40,10 @@ Reader::Reader(ReadonlyBytes coredump_bytes) ByteBuffer Reader::decompress_coredump(const ReadonlyBytes& raw_coredump) { if (!Compress::GzipDecompressor::is_likely_compressed(raw_coredump)) - return ByteBuffer::copy(raw_coredump); // handle old format core dumps (uncompressed) + return ByteBuffer::copy(raw_coredump); // handle old format coredumps (uncompressed) auto decompressed_coredump = Compress::GzipDecompressor::decompress_all(raw_coredump); if (!decompressed_coredump.has_value()) - return ByteBuffer::copy(raw_coredump); // if we didn't manage to decompress it, try and parse it as decompressed core dump + return ByteBuffer::copy(raw_coredump); // if we didn't manage to decompress it, try and parse it as decompressed coredump return decompressed_coredump.value(); } diff --git a/Userland/Libraries/LibCoreDump/Reader.h b/Userland/Libraries/LibCoredump/Reader.h similarity index 98% rename from Userland/Libraries/LibCoreDump/Reader.h rename to Userland/Libraries/LibCoredump/Reader.h index fbfbde35374005..bdb0f6a7aade92 100644 --- a/Userland/Libraries/LibCoreDump/Reader.h +++ b/Userland/Libraries/LibCoredump/Reader.h @@ -10,10 +10,10 @@ #include #include #include -#include +#include #include -namespace CoreDump { +namespace Coredump { class Reader { AK_MAKE_NONCOPYABLE(Reader); diff --git a/Userland/Libraries/LibELF/CoreDump.h b/Userland/Libraries/LibELF/Core.h similarity index 100% rename from Userland/Libraries/LibELF/CoreDump.h rename to Userland/Libraries/LibELF/Core.h diff --git a/Userland/Services/CrashDaemon/CMakeLists.txt b/Userland/Services/CrashDaemon/CMakeLists.txt index c4fee7622b10b6..f73989dd521883 100644 --- a/Userland/Services/CrashDaemon/CMakeLists.txt +++ b/Userland/Services/CrashDaemon/CMakeLists.txt @@ -9,4 +9,4 @@ set(SOURCES ) serenity_bin(CrashDaemon) -target_link_libraries(CrashDaemon LibC LibCompress LibCore LibCoreDump) +target_link_libraries(CrashDaemon LibC LibCompress LibCore LibCoredump) diff --git a/Userland/Services/CrashDaemon/main.cpp b/Userland/Services/CrashDaemon/main.cpp index 6ab73070cff9df..63a65751b4dd5d 100644 --- a/Userland/Services/CrashDaemon/main.cpp +++ b/Userland/Services/CrashDaemon/main.cpp @@ -10,8 +10,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -62,7 +62,7 @@ static bool compress_coredump(const String& coredump_path) static void print_backtrace(const String& coredump_path) { - auto coredump = CoreDump::Reader::create(coredump_path); + auto coredump = Coredump::Reader::create(coredump_path); if (!coredump) { dbgln("Could not open coredump '{}'", coredump_path); return; @@ -70,7 +70,7 @@ static void print_backtrace(const String& coredump_path) size_t thread_index = 0; coredump->for_each_thread_info([&](auto& thread_info) { - CoreDump::Backtrace backtrace(*coredump, thread_info); + Coredump::Backtrace backtrace(*coredump, thread_info); if (thread_index > 0) dbgln(); dbgln("--- Backtrace for thread #{} (TID {}) ---", thread_index, thread_info.tid);