summaryrefslogtreecommitdiff
path: root/src/core/arm/arm_interface.cpp
diff options
context:
space:
mode:
authorEmulationEnjoyer <emulationenjoyer@noreply.localhost>2024-11-12 21:38:09 +0000
committerMike Lothian <mike@fireburn.co.uk>2024-12-20 15:24:58 +0000
commit65202006a27cc35a6633f8b5092d51fe62dfd373 (patch)
tree83a5583cec5b8afb214d47fe63e6700c372ec6dd /src/core/arm/arm_interface.cpp
parenta8405749cb8669a768187a9406a68539a3d2f28c (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 5dc7e5d59..34acec9eb 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;
}
}