diff options
| author | EmulationEnjoyer <emulationenjoyer@noreply.localhost> | 2024-11-12 21:38:09 +0000 |
|---|---|---|
| committer | MrPurple666 <antoniosacramento666usa@gmail.com> | 2025-04-19 17:56:48 -0300 |
| commit | e6d0c5ea4233201e9f28ad1b730aa0c7276ece5b (patch) | |
| tree | 71d31162abb14cb45364456446a06bfa632f5149 /src/core/arm/arm_interface.cpp | |
| parent | cf1bcb02c569daed0ef5b8eb406cd90521921ce6 (diff) | |
arm: Skip duplicate consecutive addresses in backtrace output
ref: https://git.citron-emu.org/Citron/Citron/commit/aa56430f2a3179068f77b865d4fd0179aa5cc4c4
Diffstat (limited to 'src/core/arm/arm_interface.cpp')
| -rw-r--r-- | src/core/arm/arm_interface.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index 5dc7e5d59d..34acec9ebf 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp @@ -14,13 +14,22 @@ void ArmInterface::LogBacktrace(Kernel::KProcess* process) const { this->GetContext(ctx); LOG_ERROR(Core_ARM, "Backtrace, sp={:016X}, pc={:016X}", ctx.sp, ctx.pc); - LOG_ERROR(Core_ARM, "{:20}{:20}{:20}{:20}{}", "Module Name", "Address", "Original Address", - "Offset", "Symbol"); + LOG_ERROR(Core_ARM, "{:20}{:20}{:20}{:20}{}", "Module Name", "Address", "Original Address", "Offset", "Symbol"); LOG_ERROR(Core_ARM, ""); + const auto backtrace = GetBacktraceFromContext(process, ctx); + u64 last_address = 0; + for (const auto& entry : backtrace) { + + // Skip duplicate consecutive addresses + if (entry.address == last_address) + continue; + LOG_ERROR(Core_ARM, "{:20}{:016X} {:016X} {:016X} {}", entry.module, entry.address, entry.original_address, entry.offset, entry.name); + + last_address = entry.address; } } |
