diff options
| author | 2015-11-11 23:21:31 -0500 | |
|---|---|---|
| committer | 2015-11-11 23:21:31 -0500 | |
| commit | 43bb29edc5a07ee290a462dc72743d96eaadd70d (patch) | |
| tree | c42780b313be023001c41c32a6f6090fe93c2afe /src/core/arm/skyeye_common | |
| parent | Merge pull request #1236 from Subv/log_overflow (diff) | |
| parent | Fix bug with reading addresses and lengths (diff) | |
| download | yuzu-43bb29edc5a07ee290a462dc72743d96eaadd70d.tar.gz yuzu-43bb29edc5a07ee290a462dc72743d96eaadd70d.tar.xz yuzu-43bb29edc5a07ee290a462dc72743d96eaadd70d.zip | |
Merge pull request #1122 from polaris-/gdbstub
gdbstub implementation
Diffstat (limited to 'src/core/arm/skyeye_common')
| -rw-r--r-- | src/core/arm/skyeye_common/armstate.cpp | 35 | ||||
| -rw-r--r-- | src/core/arm/skyeye_common/armstate.h | 2 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/core/arm/skyeye_common/armstate.cpp b/src/core/arm/skyeye_common/armstate.cpp index 0491717dc..2d814345a 100644 --- a/src/core/arm/skyeye_common/armstate.cpp +++ b/src/core/arm/skyeye_common/armstate.cpp | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include "core/memory.h" | 7 | #include "core/memory.h" |
| 8 | #include "core/arm/skyeye_common/armstate.h" | 8 | #include "core/arm/skyeye_common/armstate.h" |
| 9 | #include "core/arm/skyeye_common/vfp/vfp.h" | 9 | #include "core/arm/skyeye_common/vfp/vfp.h" |
| 10 | #include "core/gdbstub/gdbstub.h" | ||
| 10 | 11 | ||
| 11 | ARMul_State::ARMul_State(PrivilegeMode initial_mode) | 12 | ARMul_State::ARMul_State(PrivilegeMode initial_mode) |
| 12 | { | 13 | { |
| @@ -185,8 +186,25 @@ void ARMul_State::ResetMPCoreCP15Registers() | |||
| 185 | CP15[CP15_TLB_DEBUG_CONTROL] = 0x00000000; | 186 | CP15[CP15_TLB_DEBUG_CONTROL] = 0x00000000; |
| 186 | } | 187 | } |
| 187 | 188 | ||
| 189 | static void CheckMemoryBreakpoint(u32 address, GDBStub::BreakpointType type) | ||
| 190 | { | ||
| 191 | if (GDBStub::g_server_enabled && GDBStub::CheckBreakpoint(address, type)) { | ||
| 192 | LOG_DEBUG(Debug, "Found memory breakpoint @ %08x", address); | ||
| 193 | GDBStub::Break(true); | ||
| 194 | } | ||
| 195 | } | ||
| 196 | |||
| 197 | u8 ARMul_State::ReadMemory8(u32 address) const | ||
| 198 | { | ||
| 199 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Read); | ||
| 200 | |||
| 201 | return Memory::Read8(address); | ||
| 202 | } | ||
| 203 | |||
| 188 | u16 ARMul_State::ReadMemory16(u32 address) const | 204 | u16 ARMul_State::ReadMemory16(u32 address) const |
| 189 | { | 205 | { |
| 206 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Read); | ||
| 207 | |||
| 190 | u16 data = Memory::Read16(address); | 208 | u16 data = Memory::Read16(address); |
| 191 | 209 | ||
| 192 | if (InBigEndianMode()) | 210 | if (InBigEndianMode()) |
| @@ -197,6 +215,8 @@ u16 ARMul_State::ReadMemory16(u32 address) const | |||
| 197 | 215 | ||
| 198 | u32 ARMul_State::ReadMemory32(u32 address) const | 216 | u32 ARMul_State::ReadMemory32(u32 address) const |
| 199 | { | 217 | { |
| 218 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Read); | ||
| 219 | |||
| 200 | u32 data = Memory::Read32(address); | 220 | u32 data = Memory::Read32(address); |
| 201 | 221 | ||
| 202 | if (InBigEndianMode()) | 222 | if (InBigEndianMode()) |
| @@ -207,6 +227,8 @@ u32 ARMul_State::ReadMemory32(u32 address) const | |||
| 207 | 227 | ||
| 208 | u64 ARMul_State::ReadMemory64(u32 address) const | 228 | u64 ARMul_State::ReadMemory64(u32 address) const |
| 209 | { | 229 | { |
| 230 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Read); | ||
| 231 | |||
| 210 | u64 data = Memory::Read64(address); | 232 | u64 data = Memory::Read64(address); |
| 211 | 233 | ||
| 212 | if (InBigEndianMode()) | 234 | if (InBigEndianMode()) |
| @@ -215,8 +237,17 @@ u64 ARMul_State::ReadMemory64(u32 address) const | |||
| 215 | return data; | 237 | return data; |
| 216 | } | 238 | } |
| 217 | 239 | ||
| 240 | void ARMul_State::WriteMemory8(u32 address, u8 data) | ||
| 241 | { | ||
| 242 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Write); | ||
| 243 | |||
| 244 | Memory::Write8(address, data); | ||
| 245 | } | ||
| 246 | |||
| 218 | void ARMul_State::WriteMemory16(u32 address, u16 data) | 247 | void ARMul_State::WriteMemory16(u32 address, u16 data) |
| 219 | { | 248 | { |
| 249 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Write); | ||
| 250 | |||
| 220 | if (InBigEndianMode()) | 251 | if (InBigEndianMode()) |
| 221 | data = Common::swap16(data); | 252 | data = Common::swap16(data); |
| 222 | 253 | ||
| @@ -225,6 +256,8 @@ void ARMul_State::WriteMemory16(u32 address, u16 data) | |||
| 225 | 256 | ||
| 226 | void ARMul_State::WriteMemory32(u32 address, u32 data) | 257 | void ARMul_State::WriteMemory32(u32 address, u32 data) |
| 227 | { | 258 | { |
| 259 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Write); | ||
| 260 | |||
| 228 | if (InBigEndianMode()) | 261 | if (InBigEndianMode()) |
| 229 | data = Common::swap32(data); | 262 | data = Common::swap32(data); |
| 230 | 263 | ||
| @@ -233,6 +266,8 @@ void ARMul_State::WriteMemory32(u32 address, u32 data) | |||
| 233 | 266 | ||
| 234 | void ARMul_State::WriteMemory64(u32 address, u64 data) | 267 | void ARMul_State::WriteMemory64(u32 address, u64 data) |
| 235 | { | 268 | { |
| 269 | CheckMemoryBreakpoint(address, GDBStub::BreakpointType::Write); | ||
| 270 | |||
| 236 | if (InBigEndianMode()) | 271 | if (InBigEndianMode()) |
| 237 | data = Common::swap64(data); | 272 | data = Common::swap64(data); |
| 238 | 273 | ||
diff --git a/src/core/arm/skyeye_common/armstate.h b/src/core/arm/skyeye_common/armstate.h index ceb159d14..98dad9b1f 100644 --- a/src/core/arm/skyeye_common/armstate.h +++ b/src/core/arm/skyeye_common/armstate.h | |||
| @@ -153,9 +153,11 @@ public: | |||
| 153 | 153 | ||
| 154 | // Reads/writes data in big/little endian format based on the | 154 | // Reads/writes data in big/little endian format based on the |
| 155 | // state of the E (endian) bit in the APSR. | 155 | // state of the E (endian) bit in the APSR. |
| 156 | u8 ReadMemory8(u32 address) const; | ||
| 156 | u16 ReadMemory16(u32 address) const; | 157 | u16 ReadMemory16(u32 address) const; |
| 157 | u32 ReadMemory32(u32 address) const; | 158 | u32 ReadMemory32(u32 address) const; |
| 158 | u64 ReadMemory64(u32 address) const; | 159 | u64 ReadMemory64(u32 address) const; |
| 160 | void WriteMemory8(u32 address, u8 data); | ||
| 159 | void WriteMemory16(u32 address, u16 data); | 161 | void WriteMemory16(u32 address, u16 data); |
| 160 | void WriteMemory32(u32 address, u32 data); | 162 | void WriteMemory32(u32 address, u32 data); |
| 161 | void WriteMemory64(u32 address, u64 data); | 163 | void WriteMemory64(u32 address, u64 data); |