diff options
| author | 2022-04-20 20:17:48 -0400 | |
|---|---|---|
| committer | 2022-04-20 21:39:42 -0400 | |
| commit | 0ca4dff62c61570828ec563d6200ca47b3d02569 (patch) | |
| tree | 506ade8f6772141c95261168f8ae8f3b71ffbf3a /src/core/arm/arm_interface.h | |
| parent | Update dynarmic (diff) | |
| download | yuzu-0ca4dff62c61570828ec563d6200ca47b3d02569.tar.gz yuzu-0ca4dff62c61570828ec563d6200ca47b3d02569.tar.xz yuzu-0ca4dff62c61570828ec563d6200ca47b3d02569.zip | |
core/arm: separate backtrace collection
Diffstat (limited to 'src/core/arm/arm_interface.h')
| -rw-r--r-- | src/core/arm/arm_interface.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index dce2f4195..bcec4b3b8 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -101,6 +101,12 @@ public: | |||
| 101 | virtual u64 GetPC() const = 0; | 101 | virtual u64 GetPC() const = 0; |
| 102 | 102 | ||
| 103 | /** | 103 | /** |
| 104 | * Get the current Stack Pointer | ||
| 105 | * @return Returns current SP | ||
| 106 | */ | ||
| 107 | virtual u64 GetSP() const = 0; | ||
| 108 | |||
| 109 | /** | ||
| 104 | * Get an ARM register | 110 | * Get an ARM register |
| 105 | * @param index Register index | 111 | * @param index Register index |
| 106 | * @return Returns the value in the register | 112 | * @return Returns the value in the register |
| @@ -183,16 +189,12 @@ public: | |||
| 183 | }; | 189 | }; |
| 184 | 190 | ||
| 185 | static std::vector<BacktraceEntry> GetBacktraceFromContext(System& system, | 191 | static std::vector<BacktraceEntry> GetBacktraceFromContext(System& system, |
| 192 | const ThreadContext32& ctx); | ||
| 193 | static std::vector<BacktraceEntry> GetBacktraceFromContext(System& system, | ||
| 186 | const ThreadContext64& ctx); | 194 | const ThreadContext64& ctx); |
| 187 | 195 | ||
| 188 | std::vector<BacktraceEntry> GetBacktrace() const; | 196 | virtual std::vector<BacktraceEntry> GetBacktrace() const = 0; |
| 189 | 197 | ||
| 190 | /// fp (= r29) points to the last frame record. | ||
| 191 | /// Note that this is the frame record for the *previous* frame, not the current one. | ||
| 192 | /// Note we need to subtract 4 from our last read to get the proper address | ||
| 193 | /// Frame records are two words long: | ||
| 194 | /// fp+0 : pointer to previous frame record | ||
| 195 | /// fp+8 : value of lr for frame | ||
| 196 | void LogBacktrace() const; | 198 | void LogBacktrace() const; |
| 197 | 199 | ||
| 198 | protected: | 200 | protected: |
| @@ -200,6 +202,8 @@ protected: | |||
| 200 | System& system; | 202 | System& system; |
| 201 | CPUInterrupts& interrupt_handlers; | 203 | CPUInterrupts& interrupt_handlers; |
| 202 | bool uses_wall_clock; | 204 | bool uses_wall_clock; |
| 205 | |||
| 206 | static void SymbolicateBacktrace(Core::System& system, std::vector<BacktraceEntry>& out); | ||
| 203 | }; | 207 | }; |
| 204 | 208 | ||
| 205 | } // namespace Core | 209 | } // namespace Core |