-static const struct utrace_regset native_regsets[] = {
- {
- .n = ELF_NGREG,
- .size = sizeof(elf_greg_t), .align = sizeof(elf_greg_t),
- .get = gpregs_get, .set = gpregs_set,
- .writeback = gpregs_writeback
- },
- {
- .n = ELF_NFPREG,
- .size = sizeof(elf_fpreg_t), .align = sizeof(elf_fpreg_t),
- .get = fpregs_get, .set = fpregs_set, .active = fpregs_active
- },
- {
- .n = 2 * IA64_NUM_DBG_REGS, .size = sizeof(long),
- .align = sizeof(long),
- .get = dbregs_get, .set = dbregs_set
- }
-};
-
-const struct utrace_regset_view utrace_ia64_native = {
- .name = "ia64",
- .e_machine = EM_IA_64,
- .regsets = native_regsets,
- .n = sizeof native_regsets / sizeof native_regsets[0],
-};
-EXPORT_SYMBOL_GPL(utrace_ia64_native);
-
-#endif /* CONFIG_UTRACE */
-
-
-#ifdef CONFIG_PTRACE
-
-#define WORD(member, num) \
- offsetof(struct pt_all_user_regs, member), \
- offsetof(struct pt_all_user_regs, member) + num * sizeof(long)
-static const struct ptrace_layout_segment pt_all_user_regs_layout[] = {
- {WORD(nat, 1), 0, ELF_NAT_OFFSET},
- {WORD(cr_iip, 1), 0, ELF_CR_IIP_OFFSET},
- {WORD(cfm, 1), 0, ELF_CFM_OFFSET},
- {WORD(cr_ipsr, 1), 0, ELF_CR_IPSR_OFFSET},
- {WORD(pr, 1), 0, ELF_PR_OFFSET},
- {WORD(gr[0], 32), 0, ELF_GR_OFFSET(0)},
- {WORD(br[0], 8), 0, ELF_BR_OFFSET(0)},
- {WORD(ar[PT_AUR_RSC], 4), 0, ELF_AR_RSC_OFFSET},
- {WORD(ar[PT_AUR_CCV], 1), 0, ELF_AR_CCV_OFFSET},
- {WORD(ar[PT_AUR_UNAT], 1), 0, ELF_AR_UNAT_OFFSET},
- {WORD(ar[PT_AUR_FPSR], 1), 0, ELF_AR_FPSR_OFFSET},
- {WORD(ar[PT_AUR_PFS], 3), 0, ELF_AR_PFS_OFFSET},
- {offsetof(struct pt_all_user_regs, fr[0]),
- offsetof(struct pt_all_user_regs, fr[128]),
- 1, 0},
- {0, 0, -1, 0}
-};
-#undef WORD
-
-#define NEXT(addr, sum) (addr + sum * sizeof(long))
-static const struct ptrace_layout_segment pt_uarea_layout[] = {
- {PT_F32, PT_NAT_BITS, 1, ELF_FP_OFFSET(32)},
- {PT_NAT_BITS, NEXT(PT_NAT_BITS, 1), 0, ELF_NAT_OFFSET},
- {PT_F2, PT_F10, 1, ELF_FP_OFFSET(2)},
- {PT_F10, PT_R4, 1, ELF_FP_OFFSET(10)},
- {PT_R4, PT_B1, 0, ELF_GR_OFFSET(4)},
- {PT_B1, PT_AR_EC, 0, ELF_BR_OFFSET(1)},
- {PT_AR_EC, PT_AR_LC, 0, ELF_AR_EC_OFFSET},
- {PT_AR_LC, NEXT(PT_AR_LC, 1), 0, ELF_AR_LC_OFFSET},
- {PT_CR_IPSR, PT_CR_IIP, 0, ELF_CR_IPSR_OFFSET},
- {PT_CR_IIP, PT_AR_UNAT, 0, ELF_CR_IIP_OFFSET},
- {PT_AR_UNAT, PT_AR_PFS, 0, ELF_AR_UNAT_OFFSET},
- {PT_AR_PFS, PT_AR_RSC, 0, ELF_AR_PFS_OFFSET},
- {PT_AR_RSC, PT_AR_RNAT, 0, ELF_AR_RSC_OFFSET},
- {PT_AR_RNAT, PT_AR_BSPSTORE, 0, ELF_AR_RNAT_OFFSET},
- {PT_AR_BSPSTORE,PT_PR, 0, ELF_AR_BSPSTORE_OFFSET},
- {PT_PR, PT_B6, 0, ELF_PR_OFFSET},
- {PT_B6, PT_AR_BSP, 0, ELF_BR_OFFSET(6)},
- {PT_AR_BSP, PT_R1, 0, ELF_AR_BSP_OFFSET},
- {PT_R1, PT_R12, 0, ELF_GR_OFFSET(1)},
- {PT_R12, PT_R8, 0, ELF_GR_OFFSET(12)},
- {PT_R8, PT_R16, 0, ELF_GR_OFFSET(8)},
- {PT_R16, PT_AR_CCV, 0, ELF_GR_OFFSET(16)},
- {PT_AR_CCV, PT_AR_FPSR, 0, ELF_AR_CCV_OFFSET},
- {PT_AR_FPSR, PT_B0, 0, ELF_AR_FPSR_OFFSET},
- {PT_B0, PT_B7, 0, ELF_BR_OFFSET(0)},
- {PT_B7, PT_F6, 0, ELF_BR_OFFSET(7)},
- {PT_F6, PT_AR_CSD, 1, ELF_FP_OFFSET(6)},
- {PT_AR_CSD, NEXT(PT_AR_CSD, 2), 0, ELF_AR_CSD_OFFSET},
- {PT_DBR, NEXT(PT_DBR, 8), 2, 0},
- {PT_IBR, NEXT(PT_IBR, 8), 2, 8 * sizeof(long)},
- {0, 0, -1, 0}
-};
-#undef NEXT
-
-fastcall int arch_ptrace(long *request, struct task_struct *child,
- struct utrace_attached_engine *engine,
- unsigned long addr, unsigned long data, long *val)