diff options
author | Andreas Kling <kling@serenityos.org> | 2021-08-22 14:51:04 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-08-23 00:02:09 +0200 |
commit | bcd2025311b97d45aeb23960e17fcae2bc5b7f2e (patch) | |
tree | facb4e412cdfcc5a9f5177c9f3cd0cd1e27a2f67 /Userland/Libraries/LibCoreDump/Reader.h | |
parent | a930877f31fb117ce4b38d4782dd288093700d8a (diff) | |
download | serenity-bcd2025311b97d45aeb23960e17fcae2bc5b7f2e.zip |
Everywhere: Core dump => Coredump
We all know what a coredump is, and it feels more natural to refer to
it as a coredump (most code already does), so let's be consistent.
Diffstat (limited to 'Userland/Libraries/LibCoreDump/Reader.h')
-rw-r--r-- | Userland/Libraries/LibCoreDump/Reader.h | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/Userland/Libraries/LibCoreDump/Reader.h b/Userland/Libraries/LibCoreDump/Reader.h deleted file mode 100644 index fbfbde3537..0000000000 --- a/Userland/Libraries/LibCoreDump/Reader.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com> - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include <AK/HashMap.h> -#include <AK/MappedFile.h> -#include <AK/Noncopyable.h> -#include <AK/OwnPtr.h> -#include <LibELF/CoreDump.h> -#include <LibELF/Image.h> - -namespace CoreDump { - -class Reader { - AK_MAKE_NONCOPYABLE(Reader); - AK_MAKE_NONMOVABLE(Reader); - -public: - static OwnPtr<Reader> create(const String&); - ~Reader(); - - template<typename Func> - void for_each_memory_region_info(Func func) const; - - template<typename Func> - void for_each_thread_info(Func func) const; - - const ELF::Image& image() const { return m_coredump_image; } - - Optional<FlatPtr> peek_memory(FlatPtr address) const; - ELF::Core::MemoryRegionInfo const* first_region_for_object(StringView object_name) const; - const ELF::Core::MemoryRegionInfo* region_containing(FlatPtr address) const; - - struct LibraryData { - String name; - FlatPtr base_address { 0 }; - NonnullRefPtr<MappedFile> file; - ELF::Image lib_elf; - }; - const LibraryData* library_containing(FlatPtr address) const; - - int process_pid() const; - u8 process_termination_signal() const; - String process_executable_path() const; - Vector<String> process_arguments() const; - Vector<String> process_environment() const; - HashMap<String, String> metadata() const; - -private: - Reader(ReadonlyBytes); - - static ByteBuffer decompress_coredump(const ReadonlyBytes&); - - class NotesEntryIterator { - public: - NotesEntryIterator(const u8* notes_data); - - ELF::Core::NotesEntryHeader::Type type() const; - const ELF::Core::NotesEntry* current() const; - - void next(); - bool at_end() const; - - private: - const ELF::Core::NotesEntry* m_current { nullptr }; - const u8* start { nullptr }; - }; - - // Private as we don't need anyone poking around in this JsonObject - // manually - we know very well what should be included and expose that - // as getters with the appropriate (non-JsonValue) types. - const JsonObject process_info() const; - - ByteBuffer m_coredump_buffer; - ELF::Image m_coredump_image; - ssize_t m_notes_segment_index { -1 }; -}; - -template<typename Func> -void Reader::for_each_memory_region_info(Func func) const -{ - for (NotesEntryIterator it((const u8*)m_coredump_image.program_header(m_notes_segment_index).raw_data()); !it.at_end(); it.next()) { - if (it.type() != ELF::Core::NotesEntryHeader::Type::MemoryRegionInfo) - continue; - auto& memory_region_info = reinterpret_cast<const ELF::Core::MemoryRegionInfo&>(*it.current()); - IterationDecision decision = func(memory_region_info); - if (decision == IterationDecision::Break) - return; - } -} - -template<typename Func> -void Reader::for_each_thread_info(Func func) const -{ - for (NotesEntryIterator it((const u8*)m_coredump_image.program_header(m_notes_segment_index).raw_data()); !it.at_end(); it.next()) { - if (it.type() != ELF::Core::NotesEntryHeader::Type::ThreadInfo) - continue; - auto& thread_info = reinterpret_cast<const ELF::Core::ThreadInfo&>(*it.current()); - IterationDecision decision = func(thread_info); - if (decision == IterationDecision::Break) - return; - } -} - -} |