mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 18:54:14 +01:00 
			
		
		
		
	gdbstub_arch: Directly access SP register
Currently to access the SP register, RegRead and RegWrite rely on a out-of-bounds array access to reach the next element in a struct. As of writing only git versions of GCC catch this error. Specify the SP register when we want to access it in these functions.
This commit is contained in:
		
							parent
							
								
									01bc0c84f0
								
							
						
					
					
						commit
						7b0affb6e0
					
				| @ -191,8 +191,10 @@ std::string GDBStubA64::RegRead(const Kernel::KThread* thread, size_t id) const | ||||
|     const auto& gprs{context.cpu_registers}; | ||||
|     const auto& fprs{context.vector_registers}; | ||||
| 
 | ||||
|     if (id <= SP_REGISTER) { | ||||
|     if (id < SP_REGISTER) { | ||||
|         return ValueToHex(gprs[id]); | ||||
|     } else if (id == SP_REGISTER) { | ||||
|         return ValueToHex(context.sp); | ||||
|     } else if (id == PC_REGISTER) { | ||||
|         return ValueToHex(context.pc); | ||||
|     } else if (id == PSTATE_REGISTER) { | ||||
| @ -215,8 +217,10 @@ void GDBStubA64::RegWrite(Kernel::KThread* thread, size_t id, std::string_view v | ||||
| 
 | ||||
|     auto& context{thread->GetContext64()}; | ||||
| 
 | ||||
|     if (id <= SP_REGISTER) { | ||||
|     if (id < SP_REGISTER) { | ||||
|         context.cpu_registers[id] = HexToValue<u64>(value); | ||||
|     } else if (id == SP_REGISTER) { | ||||
|         context.sp = HexToValue<u64>(value); | ||||
|     } else if (id == PC_REGISTER) { | ||||
|         context.pc = HexToValue<u64>(value); | ||||
|     } else if (id == PSTATE_REGISTER) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user