ladybird/Userland/Libraries/LibCoredump/Backtrace.h
kleines Filmröllchen 062e0db46c LibCore: Make MappedFile OwnPtr-based
Since it will become a stream in a little bit, it should behave like all
non-trivial stream classes, who are not primarily intended to have
shared ownership to make closing behavior more predictable. Across all
uses of MappedFile, there is only one use case of shared mapped files in
LibVideo, which now uses the thin SharedMappedFile wrapper.
2023-09-27 03:22:56 +02:00

57 lines
1.6 KiB
C++

/*
* Copyright (c) 2020, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Types.h>
#include <LibCoredump/Reader.h>
#include <LibDebug/DebugInfo.h>
#include <LibELF/Core.h>
namespace Coredump {
struct ELFObjectInfo {
ELFObjectInfo(NonnullOwnPtr<Core::MappedFile> file, NonnullOwnPtr<Debug::DebugInfo>&& debug_info, NonnullOwnPtr<ELF::Image> image)
: file(move(file))
, debug_info(move(debug_info))
, image(move(image))
{
}
NonnullOwnPtr<Core::MappedFile> file;
NonnullOwnPtr<Debug::DebugInfo> debug_info;
NonnullOwnPtr<ELF::Image> image;
};
class Backtrace {
public:
struct Entry {
FlatPtr eip;
DeprecatedString object_name;
DeprecatedString function_name;
Debug::DebugInfo::SourcePositionWithInlines source_position_with_inlines;
DeprecatedString to_deprecated_string(bool color = false) const;
};
Backtrace(Reader const&, const ELF::Core::ThreadInfo&, Function<void(size_t, size_t)> on_progress = {});
~Backtrace() = default;
ELF::Core::ThreadInfo const& thread_info() const { return m_thread_info; }
Vector<Entry> const& entries() const { return m_entries; }
private:
void add_entry(Reader const&, FlatPtr ip);
ELFObjectInfo const* object_info_for_region(Reader const&, MemoryRegionInfo const&);
bool m_skip_loader_so { false };
ELF::Core::ThreadInfo m_thread_info;
Vector<Entry> m_entries;
HashMap<DeprecatedString, NonnullOwnPtr<ELFObjectInfo>> m_debug_info_cache;
};
}