mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-23 09:46:04 -05:00
062e0db46c
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.
57 lines
1.6 KiB
C++
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;
|
|
};
|
|
|
|
}
|