Lines Matching +full:ri +full:- +full:override

1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 1999-2005 Hewlett-Packard Co
6 * David Mosberger-Tang <davidm@hpl.hp.com>
8 * 2006-08-12 - IA64 Native Utrace implementation support added by
42 * ri (restart instruction; two bits)
48 #define MASK(nbits) ((1UL << (nbits)) - 1) /* mask with NBITS bits set */
60 /* Return TRUE if PT was created due to kernel-entry via a system-call. */
65 return (long) pt->cr_ifs >= 0; in in_syscall()
69 * Collect the NaT bits for r1-r31 from scratch_unat and return a NaT
77 unsigned long bit = ia64_unat_pos(&pt->r##first); \ in ia64_get_scratch_nat_bits()
78 unsigned long nbits = (last - first + 1); \ in ia64_get_scratch_nat_bits()
82 dist = 64 + bit - first; \ in ia64_get_scratch_nat_bits()
84 dist = bit - first; \ in ia64_get_scratch_nat_bits()
116 unsigned long bit = ia64_unat_pos(&pt->r##first); \ in ia64_put_scratch_nat_bits()
117 unsigned long nbits = (last - first + 1); \ in ia64_put_scratch_nat_bits()
121 dist = 64 + bit - first; \ in ia64_put_scratch_nat_bits()
123 dist = bit - first; \ in ia64_put_scratch_nat_bits()
152 unsigned long w0, ri = ia64_psr(regs)->ri + 1; in ia64_increment_ip() local
154 if (ri > 2) { in ia64_increment_ip()
155 ri = 0; in ia64_increment_ip()
156 regs->cr_iip += 16; in ia64_increment_ip()
157 } else if (ri == 2) { in ia64_increment_ip()
158 get_user(w0, (char __user *) regs->cr_iip + 0); in ia64_increment_ip()
165 ri = 0; in ia64_increment_ip()
166 regs->cr_iip += 16; in ia64_increment_ip()
169 ia64_psr(regs)->ri = ri; in ia64_increment_ip()
175 unsigned long w0, ri = ia64_psr(regs)->ri - 1; in ia64_decrement_ip() local
177 if (ia64_psr(regs)->ri == 0) { in ia64_decrement_ip()
178 regs->cr_iip -= 16; in ia64_decrement_ip()
179 ri = 2; in ia64_decrement_ip()
180 get_user(w0, (char __user *) regs->cr_iip + 0); in ia64_decrement_ip()
187 ri = 1; in ia64_decrement_ip()
190 ia64_psr(regs)->ri = ri; in ia64_decrement_ip()
203 * +--------+ <-- lowest address
205 * +--------+
207 * +--------+
209 * +--------+ |
210 * | slot01 | > child_regs->ar_rnat
211 * +--------+ |
213 * +--------+ +--------+
214 * <- child_regs->ar_bspstore | slot61 | <-- krbs
215 * +- - - - + +--------+
217 * +- - - - + +--------+
219 * +- - - - + +--------+
221 * +- - - - + +--------+
223 * +--------+
225 * +--------+ |
226 * | slot01 | > child_stack->ar_rnat
227 * +--------+ |
229 * +--------+
230 * <--- child_stack->ar_bspstore
242 * merged in from pt->ar_rnat.
245 * backing store, rnat0/rnat1 gets its value from sw->ar_rnat.
259 kbsp = (unsigned long *) sw->ar_bspstore; in get_rnat()
260 ubspstore = (unsigned long *) pt->ar_bspstore; in get_rnat()
263 nbits = ia64_rse_num_regs(urnat_addr - 63, urbs_end); in get_rnat()
268 * First, figure out which bit number slot 0 in user-land maps in get_rnat()
277 rnat0_kaddr = rnat1_kaddr - 64; in get_rnat()
280 /* some bits need to be merged in from pt->ar_rnat */ in get_rnat()
282 urnat = (pt->ar_rnat & umask); in get_rnat()
290 rnat0 = sw->ar_rnat; in get_rnat()
295 m = mask >> (63 - shift); in get_rnat()
297 rnat1 = sw->ar_rnat; in get_rnat()
300 urnat |= (rnat1 & m) << (63 - shift); in get_rnat()
319 kbsp = (unsigned long *) sw->ar_bspstore; in put_rnat()
320 ubspstore = (unsigned long *) pt->ar_bspstore; in put_rnat()
328 cfm = pt->cr_ifs; in put_rnat()
329 urbs_kargs = ia64_rse_skip_regs(urbs_end, -(cfm & 0x7f)); in put_rnat()
335 if ((urnat_addr - 63) >= urbs_kargs) in put_rnat()
337 nbits = ia64_rse_num_regs(urnat_addr - 63, urbs_kargs); in put_rnat()
342 * First, figure out which bit number slot 0 in user-land maps in put_rnat()
351 rnat0_kaddr = rnat1_kaddr - 64; in put_rnat()
354 /* some bits need to be place in pt->ar_rnat: */ in put_rnat()
356 pt->ar_rnat = (pt->ar_rnat & ~umask) | (urnat & umask); in put_rnat()
368 sw->ar_rnat = (sw->ar_rnat & ~m) | (rnat0 & m); in put_rnat()
372 rnat1 = (urnat >> (63 - shift)); in put_rnat()
373 m = mask >> (63 - shift); in put_rnat()
375 sw->ar_rnat = (sw->ar_rnat & ~m) | (rnat1 & m); in put_rnat()
390 * Read a word from the user-level backing store of task CHILD. ADDR
391 * is the user-level address to read the word from, VAL a pointer to
392 * the return value, and USER_BSP gives the end of the user-level
412 bspstore = (unsigned long *) child_regs->ar_bspstore; in ia64_peek()
438 * IA-64 implementations, we return zero in in ia64_peek()
457 return -EIO; in ia64_peek()
472 bspstore = (unsigned long *) child_regs->ar_bspstore; in ia64_poke()
494 return -EIO; in ia64_poke()
499 * Calculate the address of the end of the user-level register backing
510 unsigned long *krbs, *bspstore, cfm = pt->cr_ifs; in ia64_get_user_rbs_end()
514 bspstore = (unsigned long *) pt->ar_bspstore; in ia64_get_user_rbs_end()
515 ndirty = ia64_rse_num_regs(krbs, krbs + (pt->loadrs >> 19)); in ia64_get_user_rbs_end()
531 * USER_RBS_END is the user-level address at which the backing store
549 return -EIO; in ia64_sync_user_rbs()
566 return -EIO; in ia64_sync_kernel_rbs()
586 pt = task_pt_regs(info->task); in do_sync_rbs()
587 urbs_end = ia64_get_user_rbs_end(info->task, pt, NULL); in do_sync_rbs()
589 fn(info->task, info->sw, pt->ar_bspstore, urbs_end); in do_sync_rbs()
595 * to override user stack (user space's RSE is newer than kernel's in the
621 * Write f32-f127 back to task->thread.fph if it has been modified.
633 if (ia64_is_local_fpu_owner(task) && psr->mfh) { in ia64_flush_fph()
634 psr->mfh = 0; in ia64_flush_fph()
635 task->thread.flags |= IA64_THREAD_FPH_VALID; in ia64_flush_fph()
636 ia64_save_fpu(&task->thread.fph[0]); in ia64_flush_fph()
643 * through thread.fph. If necessary, f32-f127 are written back to
645 * is cleared to zeroes. Also, access to f32-f127 is disabled to
655 if (!(task->thread.flags & IA64_THREAD_FPH_VALID)) { in ia64_sync_fph()
656 task->thread.flags |= IA64_THREAD_FPH_VALID; in ia64_sync_fph()
657 memset(&task->thread.fph, 0, sizeof(task->thread.fph)); in ia64_sync_fph()
660 psr->dfh = 1; in ia64_sync_fph()
664 * Change the machine-state of CHILD such that it will return via the normal
665 * kernel exit-path, rather than the syscall-exit path.
681 if ((long)((unsigned long)child + IA64_STK_OFFSET - sp) in convert_to_non_syscall()
710 pt->cr_ifs = (1UL << 63) | cfm; in convert_to_non_syscall()
712 * Clear the memory that is NOT written on syscall-entry to in convert_to_non_syscall()
713 * ensure we do not leak kernel-state to user when execution in convert_to_non_syscall()
716 pt->r2 = 0; in convert_to_non_syscall()
717 pt->r3 = 0; in convert_to_non_syscall()
718 pt->r14 = 0; in convert_to_non_syscall()
719 memset(&pt->r16, 0, 16*8); /* clear r16-r31 */ in convert_to_non_syscall()
720 memset(&pt->f6, 0, 6*16); /* clear f6-f11 */ in convert_to_non_syscall()
721 pt->b7 = 0; in convert_to_non_syscall()
722 pt->ar_ccv = 0; in convert_to_non_syscall()
723 pt->ar_csd = 0; in convert_to_non_syscall()
724 pt->ar_ssd = 0; in convert_to_non_syscall()
740 return -1; in access_nat_bits()
750 return -1; in access_nat_bits()
779 return -EIO; in ptrace_getregs()
782 sw = (struct switch_stack *) (child->thread.ksp + 16); in ptrace_getregs()
785 return -EIO; in ptrace_getregs()
790 return -EIO; in ptrace_getregs()
800 return -EIO; in ptrace_getregs()
804 retval |= __put_user(pt->cr_iip, &ppr->cr_iip); in ptrace_getregs()
805 retval |= __put_user(psr, &ppr->cr_ipsr); in ptrace_getregs()
809 retval |= __put_user(pt->ar_pfs, &ppr->ar[PT_AUR_PFS]); in ptrace_getregs()
810 retval |= __put_user(pt->ar_rsc, &ppr->ar[PT_AUR_RSC]); in ptrace_getregs()
811 retval |= __put_user(pt->ar_bspstore, &ppr->ar[PT_AUR_BSPSTORE]); in ptrace_getregs()
812 retval |= __put_user(pt->ar_unat, &ppr->ar[PT_AUR_UNAT]); in ptrace_getregs()
813 retval |= __put_user(pt->ar_ccv, &ppr->ar[PT_AUR_CCV]); in ptrace_getregs()
814 retval |= __put_user(pt->ar_fpsr, &ppr->ar[PT_AUR_FPSR]); in ptrace_getregs()
816 retval |= __put_user(ec, &ppr->ar[PT_AUR_EC]); in ptrace_getregs()
817 retval |= __put_user(lc, &ppr->ar[PT_AUR_LC]); in ptrace_getregs()
818 retval |= __put_user(rnat, &ppr->ar[PT_AUR_RNAT]); in ptrace_getregs()
819 retval |= __put_user(bsp, &ppr->ar[PT_AUR_BSP]); in ptrace_getregs()
820 retval |= __put_user(cfm, &ppr->cfm); in ptrace_getregs()
822 /* gr1-gr3 */ in ptrace_getregs()
824 retval |= __copy_to_user(&ppr->gr[1], &pt->r1, sizeof(long)); in ptrace_getregs()
825 retval |= __copy_to_user(&ppr->gr[2], &pt->r2, sizeof(long) *2); in ptrace_getregs()
827 /* gr4-gr7 */ in ptrace_getregs()
831 return -EIO; in ptrace_getregs()
832 retval |= __put_user(val, &ppr->gr[i]); in ptrace_getregs()
835 /* gr8-gr11 */ in ptrace_getregs()
837 retval |= __copy_to_user(&ppr->gr[8], &pt->r8, sizeof(long) * 4); in ptrace_getregs()
839 /* gr12-gr15 */ in ptrace_getregs()
841 retval |= __copy_to_user(&ppr->gr[12], &pt->r12, sizeof(long) * 2); in ptrace_getregs()
842 retval |= __copy_to_user(&ppr->gr[14], &pt->r14, sizeof(long)); in ptrace_getregs()
843 retval |= __copy_to_user(&ppr->gr[15], &pt->r15, sizeof(long)); in ptrace_getregs()
845 /* gr16-gr31 */ in ptrace_getregs()
847 retval |= __copy_to_user(&ppr->gr[16], &pt->r16, sizeof(long) * 16); in ptrace_getregs()
851 retval |= __put_user(pt->b0, &ppr->br[0]); in ptrace_getregs()
853 /* b1-b5 */ in ptrace_getregs()
857 return -EIO; in ptrace_getregs()
858 __put_user(val, &ppr->br[i]); in ptrace_getregs()
861 /* b6-b7 */ in ptrace_getregs()
863 retval |= __put_user(pt->b6, &ppr->br[6]); in ptrace_getregs()
864 retval |= __put_user(pt->b7, &ppr->br[7]); in ptrace_getregs()
866 /* fr2-fr5 */ in ptrace_getregs()
870 return -EIO; in ptrace_getregs()
871 retval |= __copy_to_user(&ppr->fr[i], &fpval, sizeof (fpval)); in ptrace_getregs()
874 /* fr6-fr11 */ in ptrace_getregs()
876 retval |= __copy_to_user(&ppr->fr[6], &pt->f6, in ptrace_getregs()
879 /* fp scratch regs(12-15) */ in ptrace_getregs()
881 retval |= __copy_to_user(&ppr->fr[12], &sw->f12, in ptrace_getregs()
884 /* fr16-fr31 */ in ptrace_getregs()
888 return -EIO; in ptrace_getregs()
889 retval |= __copy_to_user(&ppr->fr[i], &fpval, sizeof (fpval)); in ptrace_getregs()
895 retval |= __copy_to_user(&ppr->fr[32], &child->thread.fph, in ptrace_getregs()
896 sizeof(ppr->fr[32]) * 96); in ptrace_getregs()
900 retval |= __put_user(pt->pr, &ppr->pr); in ptrace_getregs()
904 retval |= __put_user(nat_bits, &ppr->nat); in ptrace_getregs()
906 ret = retval ? -EIO : 0; in ptrace_getregs()
924 return -EIO; in ptrace_setregs()
927 sw = (struct switch_stack *) (child->thread.ksp + 16); in ptrace_setregs()
930 return -EIO; in ptrace_setregs()
935 return -EIO; in ptrace_setregs()
940 retval |= __get_user(pt->cr_iip, &ppr->cr_iip); in ptrace_setregs()
941 retval |= __get_user(psr, &ppr->cr_ipsr); in ptrace_setregs()
945 retval |= __get_user(pt->ar_pfs, &ppr->ar[PT_AUR_PFS]); in ptrace_setregs()
946 retval |= __get_user(rsc, &ppr->ar[PT_AUR_RSC]); in ptrace_setregs()
947 retval |= __get_user(pt->ar_bspstore, &ppr->ar[PT_AUR_BSPSTORE]); in ptrace_setregs()
948 retval |= __get_user(pt->ar_unat, &ppr->ar[PT_AUR_UNAT]); in ptrace_setregs()
949 retval |= __get_user(pt->ar_ccv, &ppr->ar[PT_AUR_CCV]); in ptrace_setregs()
950 retval |= __get_user(pt->ar_fpsr, &ppr->ar[PT_AUR_FPSR]); in ptrace_setregs()
952 retval |= __get_user(ec, &ppr->ar[PT_AUR_EC]); in ptrace_setregs()
953 retval |= __get_user(lc, &ppr->ar[PT_AUR_LC]); in ptrace_setregs()
954 retval |= __get_user(rnat, &ppr->ar[PT_AUR_RNAT]); in ptrace_setregs()
955 retval |= __get_user(bsp, &ppr->ar[PT_AUR_BSP]); in ptrace_setregs()
956 retval |= __get_user(cfm, &ppr->cfm); in ptrace_setregs()
958 /* gr1-gr3 */ in ptrace_setregs()
960 retval |= __copy_from_user(&pt->r1, &ppr->gr[1], sizeof(long)); in ptrace_setregs()
961 retval |= __copy_from_user(&pt->r2, &ppr->gr[2], sizeof(long) * 2); in ptrace_setregs()
963 /* gr4-gr7 */ in ptrace_setregs()
966 retval |= __get_user(val, &ppr->gr[i]); in ptrace_setregs()
969 return -EIO; in ptrace_setregs()
972 /* gr8-gr11 */ in ptrace_setregs()
974 retval |= __copy_from_user(&pt->r8, &ppr->gr[8], sizeof(long) * 4); in ptrace_setregs()
976 /* gr12-gr15 */ in ptrace_setregs()
978 retval |= __copy_from_user(&pt->r12, &ppr->gr[12], sizeof(long) * 2); in ptrace_setregs()
979 retval |= __copy_from_user(&pt->r14, &ppr->gr[14], sizeof(long)); in ptrace_setregs()
980 retval |= __copy_from_user(&pt->r15, &ppr->gr[15], sizeof(long)); in ptrace_setregs()
982 /* gr16-gr31 */ in ptrace_setregs()
984 retval |= __copy_from_user(&pt->r16, &ppr->gr[16], sizeof(long) * 16); in ptrace_setregs()
988 retval |= __get_user(pt->b0, &ppr->br[0]); in ptrace_setregs()
990 /* b1-b5 */ in ptrace_setregs()
993 retval |= __get_user(val, &ppr->br[i]); in ptrace_setregs()
997 /* b6-b7 */ in ptrace_setregs()
999 retval |= __get_user(pt->b6, &ppr->br[6]); in ptrace_setregs()
1000 retval |= __get_user(pt->b7, &ppr->br[7]); in ptrace_setregs()
1002 /* fr2-fr5 */ in ptrace_setregs()
1005 retval |= __copy_from_user(&fpval, &ppr->fr[i], sizeof(fpval)); in ptrace_setregs()
1007 return -EIO; in ptrace_setregs()
1010 /* fr6-fr11 */ in ptrace_setregs()
1012 retval |= __copy_from_user(&pt->f6, &ppr->fr[6], in ptrace_setregs()
1013 sizeof(ppr->fr[6]) * 6); in ptrace_setregs()
1015 /* fp scratch regs(12-15) */ in ptrace_setregs()
1017 retval |= __copy_from_user(&sw->f12, &ppr->fr[12], in ptrace_setregs()
1018 sizeof(ppr->fr[12]) * 4); in ptrace_setregs()
1020 /* fr16-fr31 */ in ptrace_setregs()
1023 retval |= __copy_from_user(&fpval, &ppr->fr[i], in ptrace_setregs()
1026 return -EIO; in ptrace_setregs()
1032 retval |= __copy_from_user(&child->thread.fph, &ppr->fr[32], in ptrace_setregs()
1033 sizeof(ppr->fr[32]) * 96); in ptrace_setregs()
1037 retval |= __get_user(pt->pr, &ppr->pr); in ptrace_setregs()
1041 retval |= __get_user(nat_bits, &ppr->nat); in ptrace_setregs()
1052 return retval ? -EIO : 0; in ptrace_setregs()
1061 child_psr->ss = 1; in user_enable_single_step()
1070 child_psr->tb = 1; in user_enable_block_step()
1078 /* make sure the single step/taken-branch trap bits are not set: */ in user_disable_single_step()
1080 child_psr->ss = 0; in user_disable_single_step()
1081 child_psr->tb = 0; in user_disable_single_step()
1110 return -EIO; in arch_ptrace()
1122 return -EIO; in arch_ptrace()
1130 return -EIO; in arch_ptrace()
1134 /* for backwards-compatibility */ in arch_ptrace()
1138 /* for backwards-compatibility */ in arch_ptrace()
1164 return -ENOSYS; in syscall_trace_enter()
1222 [0] = -1, R(1), R(2), R(3),
1223 [4] = -1, [5] = -1, [6] = -1, [7] = -1,
1268 ptr = &pt->b0; in access_elf_breg()
1271 return unw_access_br(info, (addr - ELF_BR_OFFSET(0))/8, in access_elf_breg()
1274 ptr = &pt->b6; in access_elf_breg()
1277 ptr = &pt->b7; in access_elf_breg()
1300 pt->ar_rsc = *data | (3 << 2); in access_elf_areg()
1302 *data = pt->ar_rsc; in access_elf_areg()
1307 * the end of the user-level backing store. in access_elf_areg()
1308 * Use ia64_rse_skip_regs(PT_AR_BSP, -CFM.sof) in access_elf_areg()
1315 * so that the non-system-call exit in access_elf_areg()
1325 * call or that we defer it's re-execution in access_elf_areg()
1337 * Simulate user-level write in access_elf_areg()
1340 pt->loadrs = 0; in access_elf_areg()
1341 pt->ar_bspstore = *data; in access_elf_areg()
1347 ptr = &pt->ar_bspstore; in access_elf_areg()
1350 ptr = &pt->ar_rnat; in access_elf_areg()
1353 ptr = &pt->ar_ccv; in access_elf_areg()
1356 ptr = &pt->ar_unat; in access_elf_areg()
1359 ptr = &pt->ar_fpsr; in access_elf_areg()
1362 ptr = &pt->ar_pfs; in access_elf_areg()
1371 ptr = &pt->ar_csd; in access_elf_areg()
1374 ptr = &pt->ar_ssd; in access_elf_areg()
1379 ptr = &pt->cr_iip; in access_elf_areg()
1389 pt->cr_ifs = ((pt->cr_ifs & ~PFM_MASK) in access_elf_areg()
1398 /* psr.ri==3 is a reserved value: SDM 2:25 */ in access_elf_areg()
1401 pt->cr_ipsr = ((tmp & IPSR_MASK) in access_elf_areg()
1402 | (pt->cr_ipsr & ~IPSR_MASK)); in access_elf_areg()
1404 *data = (pt->cr_ipsr & IPSR_MASK); in access_elf_areg()
1411 ptr = &pt->pr; in access_elf_areg()
1413 return -1; in access_elf_areg()
1443 struct membuf to = dst->to; in do_gpregs_get()
1452 * r0-r31 in do_gpregs_get()
1453 * NaT bits (for r0-r31; bit N == 1 iff rN is a NaT) in do_gpregs_get()
1454 * predicate registers (p0-p63) in do_gpregs_get()
1455 * b0-b7 in do_gpregs_get()
1456 * ip cfm user-mask in do_gpregs_get()
1465 if (access_elf_reg(info->task, info, n, &reg, 0) < 0) { in do_gpregs_get()
1466 dst->ret = -EIO; in do_gpregs_get()
1480 if (!dst->count) in do_gpregs_set()
1483 if (dst->pos < ELF_GR_OFFSET(1)) { in do_gpregs_set()
1484 dst->ret = user_regset_copyin_ignore(&dst->pos, &dst->count, in do_gpregs_set()
1485 &dst->u.set.kbuf, in do_gpregs_set()
1486 &dst->u.set.ubuf, in do_gpregs_set()
1488 if (dst->ret) in do_gpregs_set()
1492 while (dst->count && dst->pos < ELF_AR_END_OFFSET) { in do_gpregs_set()
1496 from = dst->pos; in do_gpregs_set()
1501 dst->ret = user_regset_copyin(&dst->pos, &dst->count, in do_gpregs_set()
1502 &dst->u.set.kbuf, &dst->u.set.ubuf, tmp, in do_gpregs_set()
1504 if (dst->ret) in do_gpregs_set()
1507 for (n = 0; from < dst->pos; from += sizeof(elf_greg_t), n++) in do_gpregs_set()
1508 if (access_elf_reg(dst->target, info, from, in do_gpregs_set()
1510 dst->ret = -EIO; in do_gpregs_set()
1520 struct task_struct *task = info->task; in do_fpregs_get()
1522 struct membuf to = dst->to; in do_fpregs_get()
1532 /* fr2-fr31 */ in do_fpregs_get()
1535 dst->ret = -EIO; in do_fpregs_get()
1546 if (task->thread.flags & IA64_THREAD_FPH_VALID) in do_fpregs_get()
1547 membuf_write(&to, &task->thread.fph, 96 * sizeof(reg)); in do_fpregs_get()
1562 if (dst->count > 0 && dst->pos < ELF_FP_OFFSET(2)) { in do_fpregs_set()
1563 dst->ret = user_regset_copyin_ignore(&dst->pos, &dst->count, in do_fpregs_set()
1564 &dst->u.set.kbuf, in do_fpregs_set()
1565 &dst->u.set.ubuf, in do_fpregs_set()
1567 if (dst->count == 0 || dst->ret) in do_fpregs_set()
1571 /* fr2-fr31 */ in do_fpregs_set()
1572 if (dst->count > 0 && dst->pos < ELF_FP_OFFSET(32)) { in do_fpregs_set()
1573 start = dst->pos; in do_fpregs_set()
1575 dst->pos + dst->count); in do_fpregs_set()
1576 dst->ret = user_regset_copyin(&dst->pos, &dst->count, in do_fpregs_set()
1577 &dst->u.set.kbuf, &dst->u.set.ubuf, tmp, in do_fpregs_set()
1579 if (dst->ret) in do_fpregs_set()
1585 dst->ret = -EIO; in do_fpregs_set()
1588 tmp[start / sizeof(elf_fpreg_t) - 2].u.bits[0] in do_fpregs_set()
1595 dst->ret = -EIO; in do_fpregs_set()
1598 tmp[end / sizeof(elf_fpreg_t) - 2].u.bits[1] in do_fpregs_set()
1605 if (unw_set_fr(info, index, tmp[index - 2])) { in do_fpregs_set()
1606 dst->ret = -EIO; in do_fpregs_set()
1610 if (dst->ret || dst->count == 0) in do_fpregs_set()
1615 if (dst->count > 0 && dst->pos < ELF_FP_OFFSET(128)) { in do_fpregs_set()
1616 ia64_sync_fph(dst->target); in do_fpregs_set()
1617 dst->ret = user_regset_copyin(&dst->pos, &dst->count, in do_fpregs_set()
1618 &dst->u.set.kbuf, in do_fpregs_set()
1619 &dst->u.set.ubuf, in do_fpregs_set()
1620 &dst->target->thread.fph, in do_fpregs_set()
1621 ELF_FP_OFFSET(32), -1); in do_fpregs_set()
1698 return (target->thread.flags & IA64_THREAD_FPH_VALID) ? 128 : 32; in fpregs_active()
1723 unsigned int pos = -1; /* an invalid value */ in access_uarea()
1728 return -1; in access_uarea()
1736 return -1; in access_uarea()
1741 pos = addr - PT_F32 + ELF_FP_OFFSET(32); in access_uarea()
1744 pos = addr - PT_F2 + ELF_FP_OFFSET(2); in access_uarea()
1747 pos = addr - PT_F10 + ELF_FP_OFFSET(10); in access_uarea()
1750 pos = addr - PT_F6 + ELF_FP_OFFSET(6); in access_uarea()
1754 if (pos != -1) { in access_uarea()
1758 if (reg < 32) { /* fr2-fr31 */ in access_uarea()
1768 return -1; in access_uarea()
1772 return -1; in access_uarea()
1777 elf_fpreg_t *p = &child->thread.fph[reg - 32]; in access_uarea()
1778 unsigned long *bits = &p->u.bits[which_half]; in access_uarea()
1783 else if (child->thread.flags & IA64_THREAD_FPH_VALID) in access_uarea()
1796 pos = addr - PT_R4 + ELF_GR_OFFSET(4); in access_uarea()
1799 pos = addr - PT_B1 + ELF_BR_OFFSET(1); in access_uarea()
1841 pos = addr - PT_R1 + ELF_GR_OFFSET(1); in access_uarea()
1844 pos = addr - PT_R12 + ELF_GR_OFFSET(12); in access_uarea()
1847 pos = addr - PT_R8 + ELF_GR_OFFSET(8); in access_uarea()
1850 pos = addr - PT_R16 + ELF_GR_OFFSET(16); in access_uarea()
1872 if (pos != -1) { in access_uarea()
1885 regnum = (addr - PT_IBR) >> 3; in access_uarea()
1886 ptr = &child->thread.ibr[0]; in access_uarea()
1888 regnum = (addr - PT_DBR) >> 3; in access_uarea()
1889 ptr = &child->thread.dbr[0]; in access_uarea()
1895 return -1; in access_uarea()
1898 if (!(child->thread.flags & IA64_THREAD_DBG_VALID)) { in access_uarea()
1899 child->thread.flags |= IA64_THREAD_DBG_VALID; in access_uarea()
1900 memset(child->thread.dbr, 0, in access_uarea()
1901 sizeof(child->thread.dbr)); in access_uarea()
1902 memset(child->thread.ibr, 0, in access_uarea()
1903 sizeof(child->thread.ibr)); in access_uarea()
1909 /* don't let the user set kernel-level breakpoints: */ in access_uarea()
1957 struct pt_regs *pt = args->regs; in syscall_get_args_cb()
1966 * - break instruction: cfm is shared with caller. in syscall_get_args_cb()
1967 * syscall args are in out= regs, locals are non-empty. in syscall_get_args_cb()
1968 * - epsinstruction: cfm is set by br.call in syscall_get_args_cb()
1971 * For both cases arguments are reachable in cfm.sof - cfm.sol. in syscall_get_args_cb()
1974 cfm = pt->cr_ifs; in syscall_get_args_cb()
1976 nouts = (cfm & 0x7f) - nlocals; /* aka sof - sol */ in syscall_get_args_cb()
1977 krbs = (unsigned long *)info->task + IA64_RBS_OFFSET/8; in syscall_get_args_cb()
1978 ndirty = ia64_rse_num_regs(krbs, krbs + (pt->loadrs >> 19)); in syscall_get_args_cb()
1982 count = min_t(int, args->n, nouts); in syscall_get_args_cb()
1986 int j = ndirty + nlocals + i + args->i; in syscall_get_args_cb()
1987 args->args[i] = *ia64_rse_skip_regs(krbs, j); in syscall_get_args_cb()
1990 while (i < args->n) { in syscall_get_args_cb()
1991 args->args[i] = 0; in syscall_get_args_cb()