mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	GDB Modernization:
- Can be used in either DynCom or Dynarmic mode - Added support for threads - Proper support for FPU registers - Fix for NibbleToHex conversion that used to produce false error codes - Fix for clang-format failing under Windows
This commit is contained in:
		
							parent
							
								
									5c5aad09ce
								
							
						
					
					
						commit
						bd658a8801
					
				
					 9 changed files with 281 additions and 62 deletions
				
			
		| 
						 | 
				
			
			@ -21,6 +21,8 @@
 | 
			
		|||
#include <unordered_map>
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "core/arm/skyeye_common/arm_regformat.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/gdbstub/gdbstub.h"
 | 
			
		||||
 | 
			
		||||
// Signal levels
 | 
			
		||||
enum { LOW = 0, HIGH = 1, LOWHIGH = 1, HIGHLOW = 2 };
 | 
			
		||||
| 
						 | 
				
			
			@ -189,6 +191,26 @@ public:
 | 
			
		|||
        return TFlag ? 2 : 4;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void RecordBreak(GDBStub::BreakpointAddress bkpt) {
 | 
			
		||||
        last_bkpt = bkpt;
 | 
			
		||||
        last_bkpt_hit = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void ServeBreak() {
 | 
			
		||||
        if (GDBStub::IsServerEnabled()) {
 | 
			
		||||
            if (last_bkpt_hit) {
 | 
			
		||||
                Reg[15] = last_bkpt.address;
 | 
			
		||||
            }
 | 
			
		||||
            Kernel::Thread* thread = Kernel::GetCurrentThread();
 | 
			
		||||
            Core::CPU().SaveContext(thread->context);
 | 
			
		||||
            if (last_bkpt_hit || GDBStub::GetCpuStepFlag()) {
 | 
			
		||||
                last_bkpt_hit = false;
 | 
			
		||||
                GDBStub::Break();
 | 
			
		||||
                GDBStub::SendTrap(thread, 5);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::array<u32, 16> Reg{}; // The current register file
 | 
			
		||||
    std::array<u32, 2> Reg_usr{};
 | 
			
		||||
    std::array<u32, 2> Reg_svc{};   // R13_SVC R14_SVC
 | 
			
		||||
| 
						 | 
				
			
			@ -246,4 +268,7 @@ private:
 | 
			
		|||
 | 
			
		||||
    u32 exclusive_tag; // The address for which the local monitor is in exclusive access mode
 | 
			
		||||
    bool exclusive_state;
 | 
			
		||||
 | 
			
		||||
    GDBStub::BreakpointAddress last_bkpt{};
 | 
			
		||||
    bool last_bkpt_hit;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue