summaryrefslogtreecommitdiff
path: root/src/core/arm/arm_interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/arm/arm_interface.cpp')
-rw-r--r--src/core/arm/arm_interface.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp
index d2295ed90..adc6aa5c5 100644
--- a/src/core/arm/arm_interface.cpp
+++ b/src/core/arm/arm_interface.cpp
@@ -147,10 +147,18 @@ std::vector<ARM_Interface::BacktraceEntry> ARM_Interface::GetBacktraceFromContex
147 auto fp = ctx.cpu_registers[29]; 147 auto fp = ctx.cpu_registers[29];
148 auto lr = ctx.cpu_registers[30]; 148 auto lr = ctx.cpu_registers[30];
149 while (true) { 149 while (true) {
150 out.push_back({"", 0, lr, 0}); 150 out.push_back({
151 if (!fp) { 151 .module = "",
152 .address = 0,
153 .original_address = lr,
154 .offset = 0,
155 .name = "",
156 });
157
158 if (fp == 0) {
152 break; 159 break;
153 } 160 }
161
154 lr = memory.Read64(fp + 8) - 4; 162 lr = memory.Read64(fp + 8) - 4;
155 fp = memory.Read64(fp); 163 fp = memory.Read64(fp);
156 } 164 }
@@ -203,10 +211,18 @@ std::vector<ARM_Interface::BacktraceEntry> ARM_Interface::GetBacktrace() const {
203 auto fp = GetReg(29); 211 auto fp = GetReg(29);
204 auto lr = GetReg(30); 212 auto lr = GetReg(30);
205 while (true) { 213 while (true) {
206 out.push_back({"", 0, lr, 0, ""}); 214 out.push_back({
207 if (!fp) { 215 .module = "",
216 .address = 0,
217 .original_address = lr,
218 .offset = 0,
219 .name = "",
220 });
221
222 if (fp == 0) {
208 break; 223 break;
209 } 224 }
225
210 lr = memory.Read64(fp + 8) - 4; 226 lr = memory.Read64(fp + 8) - 4;
211 fp = memory.Read64(fp); 227 fp = memory.Read64(fp);
212 } 228 }