diff --git a/Userland/Libraries/LibCoredump/Backtrace.cpp b/Userland/Libraries/LibCoredump/Backtrace.cpp index 6ee694440b..86b53584cb 100644 --- a/Userland/Libraries/LibCoredump/Backtrace.cpp +++ b/Userland/Libraries/LibCoredump/Backtrace.cpp @@ -105,8 +105,13 @@ void Backtrace::add_entry(const Reader& coredump, FlatPtr ip) return; } auto object_name = ip_region->object_name(); - if (object_name == "Loader.so") - return; + // Only skip addresses coming from Loader.so if the faulting instruction is not in Loader.so + if (object_name == "Loader.so") { + if (m_skip_loader_so) + return; + } else { + m_skip_loader_so = true; + } // We need to find the first region for the object, just in case // the PT_LOAD header for the .text segment isn't the first one // in the object file. diff --git a/Userland/Libraries/LibCoredump/Backtrace.h b/Userland/Libraries/LibCoredump/Backtrace.h index e22ecb4269..a8a300bd62 100644 --- a/Userland/Libraries/LibCoredump/Backtrace.h +++ b/Userland/Libraries/LibCoredump/Backtrace.h @@ -47,6 +47,7 @@ private: void add_entry(const Reader&, FlatPtr ip); ELFObjectInfo const* object_info_for_region(ELF::Core::MemoryRegionInfo const&); + bool m_skip_loader_so { false }; ELF::Core::ThreadInfo m_thread_info; Vector m_entries; HashMap> m_debug_info_cache;