Commit Graph
41 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5 3f0c2da5a9 Debugger: surface source line info in six more places
Following on from the DWARF line table: the lookup was only reachable from
hle.backtrace, the breakpoint hit object and the ImGui disassembly status bar.
Now also in

- the ImDebugger call stack (new Source column),
- the Win32 call stack (new Source column),
- the Win32 disassembly status bar, matching the ImGui one,
- the ImDisasmView right-click menu, which showed a bare address as its heading
  and now leads with "mesh.zig:163 (08841f98)" when there's a line for it,
- breakpoint log lines - a log-only breakpoint's entire output is those lines,
  and "BKP PC=08841f98 mesh.zig:163" reads a great deal better than an address
  when you're scanning a few thousand of them,
- crash stack traces, via FormatStackTrace, which is what the crash screen and
  crash reporting both use.

That last one is where it earns its keep, and it needed the invalid-jump path to
produce a stack trace at all - it was the one exec exception that didn't. It's
also the one that most deserves it: the address it jumped to tells you nothing,
the callers tell you everything. Execution has already moved to the bad address
by the time it's noticed, so a walk from pc finds no function to start from;
WalkCurrentStack takes an explicit starting pc now, and falling back to ra
recovers the chain. Reproducing the original CrossCraft bug:

  CPU Jump: Invalid jump to ae870000 from PC ae870000(invalid) RA 08841f98
  MIPS call stack:
  rendering.mesh.Mesh(PspVertex).draw at mesh.zig:163 (08841c30+368, ...)
  state.MenuState.draw at MenuState.zig:821 (0883ab90+414, ...)
  engine.Engine.stepFrameInternal at State.zig:40 (08820f74+5164, ...)
  utils.module._module_main_thread at engine.zig:468 (088272c4+2fb8, ...)

Fixed a pre-existing double-report while in there: every case in
Core_ExecException sent its message and then fell through to an unconditional
send of the same message, so each exec exception was logged twice. The message
is built in the switch and sent once at the end now.

pspautotests 314/314, UnitTest 55/55.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
2026-08-18 13:42:14 +02:00
Henrik Rydgård a49f4523cb Correct when we process the stepping queue. Also, the jitLock mutex is no longer needed. 2026-08-16 13:33:26 +02:00
Henrik Rydgård f5bd302694 Improve DescribeAddress, show the description of the currently selected line in disassembly 2026-08-14 14:38:33 +02:00
Henrik Rydgård 2d0e54f422 Headless (and main): Improve crash reporting 2026-08-11 22:36:47 +02:00
Henrik Rydgård 22ac7ad119 MemFault: move RISC-V and LoongArch fault analysis out of HandleFault
The RISC-V branch had its instruction-decode logic (including a locally
defined info struct) written directly inline in HandleFault(), unlike
the other three architectures which each delegate to a dedicated
AnalyzeLoadStore function in their disassembler file. Move it into
ext/riscv-disas.h/.cpp as RiscVAnalyzeLoadStore, matching the existing
X86AnalyzeMOV/Arm64AnalyzeLoadStore/ArmAnalyzeLoadStore pattern.
2026-08-11 22:36:47 +02:00
Henrik Rydgård 6a873df4ea Work on improving crash log output 2026-08-11 22:36:47 +02:00
Henrik Rydgård b42157aa49 Core: Add utility function to properly report memory exceptions from HLE functions (when they would actually crash the PSP) 2026-08-10 10:41:32 +02:00
Henrik Rydgård 39c8cbbde1 Use the new kernel module description thing to annotate GPRs in the register viewer 2026-07-28 00:15:41 +02:00
Henrik RydgårdandClaude Opus 5 9b577b5f46 Show module.section+offset next to addresses in exception/stack-trace logs
Added KernelModuleAddressDescription() (Core/HLE/sceKernelModule.cpp),
which looks up which currently loaded module (and text/data/bss/segment
section within it) an address falls in, e.g. "EBOOT.BIN.text+1234".
Wired it into:

- Core_MemoryException/Core_ExecException/Core_BreakException
  (Core/Core.cpp), appended next to every address/pc/ra shown in their
  log lines.
- FormatStackTrace (Core/MemFault.cpp), appended per-frame next to the
  existing symbol description.

This makes crash/exception logs actionable even when there's no symbol
at the faulting address - you at least get which module and section
it's in, useful for reverse engineering unfamiliar code.

Verified live via headless: injected a MIPS break instruction at the
current PC (through Tools/wsdbg) and confirmed the log line changed from
"break instruction hit at 088040ac" to "break instruction hit at 088040ac
[sceDisplayWaitVblank Test.text+ac]".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XDNwPPuidmNxQGRJxBuRL6
2026-07-27 23:44:14 +02:00
Henrik Rydgård 3139d7ccfe Add command line parameters for controlling the behavior on memory/instruction exceptions 2026-07-27 18:37:26 +02:00
Henrik Rydgård a7ee0a7280 Include the code location in "ignored" bad memory access log lines 2026-07-25 14:53:52 +02:00
Lin Runze 53338cf029 loongarch: Implement excepetion handler and JIT bug fix 2026-03-30 18:35:54 +08:00
Lin Runze 1d910b81ff loongarch: Add emitter, JIT and disassembler support for LoongArch64 2025-07-12 03:21:23 +08:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Henrik Rydgård b634e4154e Memory exception handler: Don't disassemble if ignoring the exception 2024-02-04 11:59:36 +01:00
Henrik Rydgård f73d0587d4 Comments, make locking more consistent in GameInfoCache 2024-01-19 14:56:29 +01:00
Unknown W. Brackets 3468423bb4 Debugger: Handle missing crash/block ptrs better. 2023-07-23 18:01:00 -07:00
Henrik Rydgård 2814668cf5 Show a MIPS stack trace on crash screen (#17211)
* Print simple stack traces to log on crashes.

* Display stack traces on crash screen

* Show the in-function offset in the printed callstacks.

* Libretro buildfix attempt
2023-03-31 10:08:12 +02:00
Henrik Rydgård 0a13c78788 Revert "ffmpeg: Don't ask for multi-threaded decoding"
This reverts commit b173e0f4a4.

Turns out it's not actually known to fix anything, should have closed
that old PR.
2023-01-12 16:23:39 +01:00
Henrik Rydgård b173e0f4a4 ffmpeg: Don't ask for multi-threaded decoding
For whatever reason, our version of ffmpeg has problems with it,
and I don't care enough to dig deep.

See PR #13806
2023-01-12 12:13:10 +01:00
Henrik Rydgård 830f1064e6 Merge pull request #16676 from unknownbrackets/riscv-disasm
Add disassembler for RISC-V
2023-01-04 09:52:56 +01:00
Henrik Rydgård aa80659530 Memory exception: Add facility to track size
Might theoretically help in tracking some things down.

Not fully utilized yet, the fault handler needs to extract the
information from the faulting instruction. But we can use it for
GetPointerRange etc.
2023-01-01 20:30:29 +01:00
Unknown W. Brackets 77849d3eed riscv: Add disassembler.
From https://github.com/anthony-coulter/riscv-disassembler.
Modified slightly to pull in less headers in the h, prefix funcs.
2023-01-01 10:28:53 -08:00
Henrik Rydgård 97fadbcecb Show bluescreen properly on memory errors that we failed to ignore.
Previously we just wouldn't draw it but still would be in the error
state.
2022-12-30 12:29:23 +01:00
Unknown W. Brackets 4fa071e78a riscv: Implement basic crash handler.
Tested by letting it recover non-guest crashes.
2022-12-24 19:08:31 +00:00
Unknown W. Brackets c1c8a70401 Crash: Ensure we never handle faults in faults.
In theory, this shouldn't happen because it won't be in jit space, but
better to be sure.
2022-12-20 20:18:02 -08:00
Unknown W. Brackets 21fb6e5385 Crash: Recover from unaligned CPU access.
This catches SIMD accesses that are unaligned, see #15523.
2022-05-21 11:39:26 -07:00
Unknown W. Brackets 2479d52202 Global: Reduce includes of common headers.
In many places, string, map, or Common.h were included but not needed.
2022-01-30 16:35:33 -08:00
Unknown W. Brackets 3df6cb704f Global: Fix some type conversion warnings.
Hidden by some warning disables.
2022-01-30 16:09:33 -08:00
Unknown W. Brackets b8ab7f39df jit: Lock around changes to the jit pointer. 2021-11-28 10:04:22 -08:00
Henrik Rydgård 4b67fe4947 Remove now-redundant check 2021-02-09 10:17:15 +01:00
Henrik Rydgård 6db827093d Buildfix 2021-02-09 09:48:34 +01:00
Henrik Rydgård f6b2070e47 Cause the correct type of exception. Never ignore EXEC_ADDR exceptions. 2021-02-09 09:38:03 +01:00
Henrik Rydgård 6b4356a060 Handle exec addr errors better - don't let IgnoreBadMemoryAccesses skip dispatcher exceptions.
It would then just fall through into the compiler and die.

Should remove one of the "mystery" crashes from #14082.
2021-02-09 09:32:38 +01:00
Henrik Rydgård 6e6f1693d9 UWP buildfix 2020-12-19 23:19:42 +01:00
Henrik Rydgård 6c8ee35826 Crash screen: Add a very dangerous and inaccurate "Resume" function.
Not sure if there's much point really but maybe..
2020-12-19 20:27:39 +01:00
Henrik Rydgård ac6715baa9 Improvements to crash screen.
Part of #13299

Use the new tests/cpu/crash tests in pspautotest to test this code
(manually).
2020-12-19 19:48:24 +01:00
Henrik Rydgård 989e353482 Common.h shouldn't include Log.h.
Buildfixes

More buildfixes. Move JSON code to common.
2020-10-04 11:42:14 +02:00
Henrik Rydgård dae9df3829 Fix a bug in crashhandler where we could end up disassembling far too much. 2020-07-19 17:23:21 +02:00
Henrik Rydgård 8c38d7305e Crash: Show disassembly of the instruction causing the crash, and the symbol name. 2020-07-15 12:38:05 +02:00
Henrik Rydgård 626d173d10 Split the fault handling from MemMap.cpp to MemFault.cpp. 2020-07-15 12:12:57 +02:00