1/* 2 * Copyright 2019, Adrien Destugues, pulkomandy@pulkomandy.tk. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <debugger.h> 8#include <int.h> 9#include <thread.h> 10#include <arch/user_debugger.h> 11 12 13void 14arch_clear_team_debug_info(struct arch_team_debug_info *info) 15{ 16} 17 18 19void 20arch_destroy_team_debug_info(struct arch_team_debug_info *info) 21{ 22 arch_clear_team_debug_info(info); 23} 24 25 26void 27arch_clear_thread_debug_info(struct arch_thread_debug_info *info) 28{ 29} 30 31 32void 33arch_destroy_thread_debug_info(struct arch_thread_debug_info *info) 34{ 35 arch_clear_thread_debug_info(info); 36} 37 38 39void 40arch_update_thread_single_step() 41{ 42} 43 44 45void 46arch_set_debug_cpu_state(const debug_cpu_state *cpuState) 47{ 48 iframe* frame = thread_get_current_thread()->arch_info.userFrame; 49 50 frame->ra = cpuState->x[ 0]; 51 frame->sp = cpuState->x[ 1]; 52 frame->gp = cpuState->x[ 2]; 53 frame->tp = cpuState->x[ 3]; 54 frame->t0 = cpuState->x[ 4]; 55 frame->t1 = cpuState->x[ 5]; 56 frame->t2 = cpuState->x[ 6]; 57 frame->fp = cpuState->x[ 7]; 58 frame->s1 = cpuState->x[ 8]; 59 frame->a0 = cpuState->x[ 9]; 60 frame->a1 = cpuState->x[10]; 61 frame->a2 = cpuState->x[11]; 62 frame->a3 = cpuState->x[12]; 63 frame->a4 = cpuState->x[13]; 64 frame->a5 = cpuState->x[14]; 65 frame->a6 = cpuState->x[15]; 66 frame->a7 = cpuState->x[16]; 67 frame->s2 = cpuState->x[17]; 68 frame->s3 = cpuState->x[18]; 69 frame->s4 = cpuState->x[19]; 70 frame->s5 = cpuState->x[20]; 71 frame->s6 = cpuState->x[21]; 72 frame->s7 = cpuState->x[22]; 73 frame->s8 = cpuState->x[23]; 74 frame->s9 = cpuState->x[24]; 75 frame->s10 = cpuState->x[25]; 76 frame->s11 = cpuState->x[26]; 77 frame->t3 = cpuState->x[27]; 78 frame->t4 = cpuState->x[28]; 79 frame->t5 = cpuState->x[29]; 80 frame->t6 = cpuState->x[30]; 81 frame->epc = cpuState->pc; 82 restore_fpu((fpu_context*)&cpuState->f[0]); 83} 84 85 86void 87arch_get_debug_cpu_state(debug_cpu_state *cpuState) 88{ 89 arch_get_thread_debug_cpu_state(thread_get_current_thread(), cpuState); 90} 91 92 93status_t 94arch_get_thread_debug_cpu_state(Thread* thread, debug_cpu_state* cpuState) 95{ 96 iframe* frame = thread->arch_info.userFrame; 97 if (frame == NULL) 98 return B_BAD_DATA; 99 100 cpuState->x[ 0] = frame->ra; 101 cpuState->x[ 1] = frame->sp; 102 cpuState->x[ 2] = frame->gp; 103 cpuState->x[ 3] = frame->tp; 104 cpuState->x[ 4] = frame->t0; 105 cpuState->x[ 5] = frame->t1; 106 cpuState->x[ 6] = frame->t2; 107 cpuState->x[ 7] = frame->fp; 108 cpuState->x[ 8] = frame->s1; 109 cpuState->x[ 9] = frame->a0; 110 cpuState->x[10] = frame->a1; 111 cpuState->x[11] = frame->a2; 112 cpuState->x[12] = frame->a3; 113 cpuState->x[13] = frame->a4; 114 cpuState->x[14] = frame->a5; 115 cpuState->x[15] = frame->a6; 116 cpuState->x[16] = frame->a7; 117 cpuState->x[17] = frame->s2; 118 cpuState->x[18] = frame->s3; 119 cpuState->x[19] = frame->s4; 120 cpuState->x[20] = frame->s5; 121 cpuState->x[21] = frame->s6; 122 cpuState->x[22] = frame->s7; 123 cpuState->x[23] = frame->s8; 124 cpuState->x[24] = frame->s9; 125 cpuState->x[25] = frame->s10; 126 cpuState->x[26] = frame->s11; 127 cpuState->x[27] = frame->t3; 128 cpuState->x[28] = frame->t4; 129 cpuState->x[29] = frame->t5; 130 cpuState->x[30] = frame->t6; 131 cpuState->pc = frame->epc; 132 // TODO: don't assume that kernel code don't use FPU 133 if (thread == thread_get_current_thread()) 134 save_fpu((fpu_context*)&cpuState->f[0]); 135 else 136 memcpy(&cpuState->f[0], &thread->arch_info.fpuContext, 137 sizeof(thread->arch_info.fpuContext)); 138 139 return B_OK; 140} 141 142 143status_t 144arch_set_breakpoint(void *address) 145{ 146 return B_ERROR; 147} 148 149 150status_t 151arch_clear_breakpoint(void *address) 152{ 153 return B_ERROR; 154} 155 156 157status_t 158arch_set_watchpoint(void *address, uint32 type, int32 length) 159{ 160 return B_ERROR; 161} 162 163 164status_t 165arch_clear_watchpoint(void *address) 166{ 167 return B_ERROR; 168} 169 170bool 171arch_has_breakpoints(struct arch_team_debug_info *info) 172{ 173 return false; 174} 175