Lines Matching refs:child
1064 void ptrace_disable(struct task_struct *child) in ptrace_disable() argument
1067 user_disable_single_step(child); in ptrace_disable()
1071 static long set_instruction_bp(struct task_struct *child, in set_instruction_bp() argument
1075 int slot1_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC1) != 0); in set_instruction_bp()
1076 int slot2_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC2) != 0); in set_instruction_bp()
1077 int slot3_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC3) != 0); in set_instruction_bp()
1078 int slot4_in_use = ((child->thread.debug.dbcr0 & DBCR0_IAC4) != 0); in set_instruction_bp()
1080 if (dbcr_iac_range(child) & DBCR_IAC12MODE) in set_instruction_bp()
1082 if (dbcr_iac_range(child) & DBCR_IAC34MODE) in set_instruction_bp()
1097 child->thread.debug.iac1 = bp_info->addr; in set_instruction_bp()
1098 child->thread.debug.iac2 = bp_info->addr2; in set_instruction_bp()
1099 child->thread.debug.dbcr0 |= DBCR0_IAC1; in set_instruction_bp()
1102 dbcr_iac_range(child) |= DBCR_IAC12X; in set_instruction_bp()
1104 dbcr_iac_range(child) |= DBCR_IAC12I; in set_instruction_bp()
1108 child->thread.debug.iac3 = bp_info->addr; in set_instruction_bp()
1109 child->thread.debug.iac4 = bp_info->addr2; in set_instruction_bp()
1110 child->thread.debug.dbcr0 |= DBCR0_IAC3; in set_instruction_bp()
1113 dbcr_iac_range(child) |= DBCR_IAC34X; in set_instruction_bp()
1115 dbcr_iac_range(child) |= DBCR_IAC34I; in set_instruction_bp()
1130 child->thread.debug.iac1 = bp_info->addr; in set_instruction_bp()
1131 child->thread.debug.dbcr0 |= DBCR0_IAC1; in set_instruction_bp()
1137 child->thread.debug.iac2 = bp_info->addr; in set_instruction_bp()
1138 child->thread.debug.dbcr0 |= DBCR0_IAC2; in set_instruction_bp()
1142 child->thread.debug.iac3 = bp_info->addr; in set_instruction_bp()
1143 child->thread.debug.dbcr0 |= DBCR0_IAC3; in set_instruction_bp()
1146 child->thread.debug.iac4 = bp_info->addr; in set_instruction_bp()
1147 child->thread.debug.dbcr0 |= DBCR0_IAC4; in set_instruction_bp()
1153 child->thread.debug.dbcr0 |= DBCR0_IDM; in set_instruction_bp()
1154 child->thread.regs->msr |= MSR_DE; in set_instruction_bp()
1159 static int del_instruction_bp(struct task_struct *child, int slot) in del_instruction_bp() argument
1163 if ((child->thread.debug.dbcr0 & DBCR0_IAC1) == 0) in del_instruction_bp()
1166 if (dbcr_iac_range(child) & DBCR_IAC12MODE) { in del_instruction_bp()
1168 child->thread.debug.iac2 = 0; in del_instruction_bp()
1169 dbcr_iac_range(child) &= ~DBCR_IAC12MODE; in del_instruction_bp()
1171 child->thread.debug.iac1 = 0; in del_instruction_bp()
1172 child->thread.debug.dbcr0 &= ~DBCR0_IAC1; in del_instruction_bp()
1175 if ((child->thread.debug.dbcr0 & DBCR0_IAC2) == 0) in del_instruction_bp()
1178 if (dbcr_iac_range(child) & DBCR_IAC12MODE) in del_instruction_bp()
1181 child->thread.debug.iac2 = 0; in del_instruction_bp()
1182 child->thread.debug.dbcr0 &= ~DBCR0_IAC2; in del_instruction_bp()
1186 if ((child->thread.debug.dbcr0 & DBCR0_IAC3) == 0) in del_instruction_bp()
1189 if (dbcr_iac_range(child) & DBCR_IAC34MODE) { in del_instruction_bp()
1191 child->thread.debug.iac4 = 0; in del_instruction_bp()
1192 dbcr_iac_range(child) &= ~DBCR_IAC34MODE; in del_instruction_bp()
1194 child->thread.debug.iac3 = 0; in del_instruction_bp()
1195 child->thread.debug.dbcr0 &= ~DBCR0_IAC3; in del_instruction_bp()
1198 if ((child->thread.debug.dbcr0 & DBCR0_IAC4) == 0) in del_instruction_bp()
1201 if (dbcr_iac_range(child) & DBCR_IAC34MODE) in del_instruction_bp()
1204 child->thread.debug.iac4 = 0; in del_instruction_bp()
1205 child->thread.debug.dbcr0 &= ~DBCR0_IAC4; in del_instruction_bp()
1214 static int set_dac(struct task_struct *child, struct ppc_hw_breakpoint *bp_info) in set_dac() argument
1229 if ((dbcr_dac(child) & (DBCR_DAC1R | DBCR_DAC1W)) == 0) { in set_dac()
1232 dbcr_dac(child) |= DBCR_DAC1R; in set_dac()
1234 dbcr_dac(child) |= DBCR_DAC1W; in set_dac()
1235 child->thread.debug.dac1 = (unsigned long)bp_info->addr; in set_dac()
1238 child->thread.debug.dvc1 = in set_dac()
1240 child->thread.debug.dbcr2 |= in set_dac()
1246 } else if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE) { in set_dac()
1250 } else if ((dbcr_dac(child) & (DBCR_DAC2R | DBCR_DAC2W)) == 0) { in set_dac()
1253 dbcr_dac(child) |= DBCR_DAC2R; in set_dac()
1255 dbcr_dac(child) |= DBCR_DAC2W; in set_dac()
1256 child->thread.debug.dac2 = (unsigned long)bp_info->addr; in set_dac()
1259 child->thread.debug.dvc2 = in set_dac()
1261 child->thread.debug.dbcr2 |= in set_dac()
1268 child->thread.debug.dbcr0 |= DBCR0_IDM; in set_dac()
1269 child->thread.regs->msr |= MSR_DE; in set_dac()
1274 static int del_dac(struct task_struct *child, int slot) in del_dac() argument
1277 if ((dbcr_dac(child) & (DBCR_DAC1R | DBCR_DAC1W)) == 0) in del_dac()
1280 child->thread.debug.dac1 = 0; in del_dac()
1281 dbcr_dac(child) &= ~(DBCR_DAC1R | DBCR_DAC1W); in del_dac()
1283 if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE) { in del_dac()
1284 child->thread.debug.dac2 = 0; in del_dac()
1285 child->thread.debug.dbcr2 &= ~DBCR2_DAC12MODE; in del_dac()
1287 child->thread.debug.dbcr2 &= ~(DBCR2_DVC1M | DBCR2_DVC1BE); in del_dac()
1290 child->thread.debug.dvc1 = 0; in del_dac()
1293 if ((dbcr_dac(child) & (DBCR_DAC2R | DBCR_DAC2W)) == 0) in del_dac()
1297 if (child->thread.debug.dbcr2 & DBCR2_DAC12MODE) in del_dac()
1300 child->thread.debug.dbcr2 &= ~(DBCR2_DVC2M | DBCR2_DVC2BE); in del_dac()
1303 child->thread.debug.dvc2 = 0; in del_dac()
1305 child->thread.debug.dac2 = 0; in del_dac()
1306 dbcr_dac(child) &= ~(DBCR_DAC2R | DBCR_DAC2W); in del_dac()
1315 static int set_dac_range(struct task_struct *child, in set_dac_range() argument
1347 if (child->thread.debug.dbcr0 & in set_dac_range()
1352 child->thread.debug.dbcr0 |= (DBCR0_DAC1R | DBCR0_IDM); in set_dac_range()
1354 child->thread.debug.dbcr0 |= (DBCR0_DAC1W | DBCR0_IDM); in set_dac_range()
1355 child->thread.debug.dac1 = bp_info->addr; in set_dac_range()
1356 child->thread.debug.dac2 = bp_info->addr2; in set_dac_range()
1358 child->thread.debug.dbcr2 |= DBCR2_DAC12M; in set_dac_range()
1360 child->thread.debug.dbcr2 |= DBCR2_DAC12MX; in set_dac_range()
1362 child->thread.debug.dbcr2 |= DBCR2_DAC12MM; in set_dac_range()
1363 child->thread.regs->msr |= MSR_DE; in set_dac_range()
1369 static long ppc_set_hwdebug(struct task_struct *child, in ppc_set_hwdebug() argument
1374 struct thread_struct *thread = &(child->thread); in ppc_set_hwdebug()
1405 return set_instruction_bp(child, bp_info); in ppc_set_hwdebug()
1408 return set_dac(child, bp_info); in ppc_set_hwdebug()
1411 return set_dac_range(child, bp_info); in ppc_set_hwdebug()
1456 ptrace_triggered, NULL, child); in ppc_set_hwdebug()
1468 if (child->thread.hw_brk.address) in ppc_set_hwdebug()
1471 child->thread.hw_brk = brk; in ppc_set_hwdebug()
1477 static long ppc_del_hwdebug(struct task_struct *child, long data) in ppc_del_hwdebug() argument
1481 struct thread_struct *thread = &(child->thread); in ppc_del_hwdebug()
1488 rc = del_instruction_bp(child, (int)data); in ppc_del_hwdebug()
1490 rc = del_dac(child, (int)data - 4); in ppc_del_hwdebug()
1493 if (!DBCR_ACTIVE_EVENTS(child->thread.debug.dbcr0, in ppc_del_hwdebug()
1494 child->thread.debug.dbcr1)) { in ppc_del_hwdebug()
1495 child->thread.debug.dbcr0 &= ~DBCR0_IDM; in ppc_del_hwdebug()
1496 child->thread.regs->msr &= ~MSR_DE; in ppc_del_hwdebug()
1513 if (child->thread.hw_brk.address == 0) in ppc_del_hwdebug()
1516 child->thread.hw_brk.address = 0; in ppc_del_hwdebug()
1517 child->thread.hw_brk.type = 0; in ppc_del_hwdebug()
1524 long arch_ptrace(struct task_struct *child, long request, in arch_ptrace() argument
1541 || (child->thread.regs == NULL)) in arch_ptrace()
1548 CHECK_FULL_REGS(child->thread.regs); in arch_ptrace()
1550 ret = ptrace_get_reg(child, (int) index, &tmp); in arch_ptrace()
1556 flush_fp_to_thread(child); in arch_ptrace()
1558 memcpy(&tmp, &child->thread.TS_FPR(fpidx), in arch_ptrace()
1561 tmp = child->thread.fp_state.fpscr; in arch_ptrace()
1576 || (child->thread.regs == NULL)) in arch_ptrace()
1583 CHECK_FULL_REGS(child->thread.regs); in arch_ptrace()
1585 ret = ptrace_put_reg(child, index, data); in arch_ptrace()
1589 flush_fp_to_thread(child); in arch_ptrace()
1591 memcpy(&child->thread.TS_FPR(fpidx), &data, in arch_ptrace()
1594 child->thread.fp_state.fpscr = data; in arch_ptrace()
1655 ret = ppc_set_hwdebug(child, &bp_info); in arch_ptrace()
1660 ret = ppc_del_hwdebug(child, data); in arch_ptrace()
1673 ret = put_user(child->thread.debug.dac1, datalp); in arch_ptrace()
1675 dabr_fake = ((child->thread.hw_brk.address & (~HW_BRK_TYPE_DABR)) | in arch_ptrace()
1676 (child->thread.hw_brk.type & HW_BRK_TYPE_DABR)); in arch_ptrace()
1683 ret = ptrace_set_debugreg(child, addr, data); in arch_ptrace()
1690 return copy_regset_to_user(child, &user_ppc_native_view, in arch_ptrace()
1699 return copy_regset_from_user(child, &user_ppc_native_view, in arch_ptrace()
1705 return copy_regset_to_user(child, &user_ppc_native_view, in arch_ptrace()
1711 return copy_regset_from_user(child, &user_ppc_native_view, in arch_ptrace()
1718 return copy_regset_to_user(child, &user_ppc_native_view, in arch_ptrace()
1725 return copy_regset_from_user(child, &user_ppc_native_view, in arch_ptrace()
1733 return copy_regset_to_user(child, &user_ppc_native_view, in arch_ptrace()
1739 return copy_regset_from_user(child, &user_ppc_native_view, in arch_ptrace()
1747 return copy_regset_to_user(child, &user_ppc_native_view, in arch_ptrace()
1753 return copy_regset_from_user(child, &user_ppc_native_view, in arch_ptrace()
1759 ret = ptrace_request(child, request, addr, data); in arch_ptrace()