aboutsummaryrefslogtreecommitdiff
path: root/src/core/arm/arm_interface.cpp
diff options
context:
space:
mode:
authorEmulationEnjoyer <emulationenjoyer@noreply.localhost>2024-11-12 21:38:09 +0000
committerMrPurple666 <antoniosacramento666usa@gmail.com>2025-04-19 17:56:48 -0300
commite6d0c5ea4233201e9f28ad1b730aa0c7276ece5b (patch)
tree71d31162abb14cb45364456446a06bfa632f5149 /src/core/arm/arm_interface.cpp
parentcf1bcb02c569daed0ef5b8eb406cd90521921ce6 (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.cpp13
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;
}
}