ptrace.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:29k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Kernel support for the ptrace() and syscall tracing interfaces.
  3.  *
  4.  * Copyright (C) 1999-2001 Hewlett-Packard Co
  5.  * David Mosberger-Tang <davidm@hpl.hp.com>
  6.  *
  7.  * Derived from the x86 and Alpha versions.  Most of the code in here
  8.  * could actually be factored into a common set of routines.
  9.  */
  10. #include <linux/config.h>
  11. #include <linux/kernel.h>
  12. #include <linux/sched.h>
  13. #include <linux/mm.h>
  14. #include <linux/errno.h>
  15. #include <linux/ptrace.h>
  16. #include <linux/smp_lock.h>
  17. #include <linux/user.h>
  18. #include <asm/pgtable.h>
  19. #include <asm/processor.h>
  20. #include <asm/ptrace_offsets.h>
  21. #include <asm/rse.h>
  22. #include <asm/system.h>
  23. #include <asm/uaccess.h>
  24. #include <asm/unwind.h>
  25. /*
  26.  * Bits in the PSR that we allow ptrace() to change:
  27.  * be, up, ac, mfl, mfh (the user mask; five bits total)
  28.  * db (debug breakpoint fault; one bit)
  29.  * id (instruction debug fault disable; one bit)
  30.  * dd (data debug fault disable; one bit)
  31.  * ri (restart instruction; two bits)
  32.  * is (instruction set; one bit)
  33.  */
  34. #define IPSR_WRITE_MASK 
  35. (IA64_PSR_UM | IA64_PSR_DB | IA64_PSR_IS | IA64_PSR_ID | IA64_PSR_DD | IA64_PSR_RI)
  36. #define IPSR_READ_MASK IPSR_WRITE_MASK
  37. #define PTRACE_DEBUG 1
  38. #if PTRACE_DEBUG
  39. # define dprintk(format...) printk(format)
  40. # define inline
  41. #else
  42. # define dprintk(format...)
  43. #endif
  44. /*
  45.  * Collect the NaT bits for r1-r31 from scratch_unat and return a NaT
  46.  * bitset where bit i is set iff the NaT bit of register i is set.
  47.  */
  48. unsigned long
  49. ia64_get_scratch_nat_bits (struct pt_regs *pt, unsigned long scratch_unat)
  50. {
  51. # define GET_BITS(first, last, unat)
  52. ({
  53. unsigned long bit = ia64_unat_pos(&pt->r##first);
  54. unsigned long mask = ((1UL << (last - first + 1)) - 1) << first;
  55. (ia64_rotl(unat, first) >> bit) & mask;
  56. })
  57. unsigned long val;
  58. val  = GET_BITS( 1,  3, scratch_unat);
  59. val |= GET_BITS(12, 15, scratch_unat);
  60. val |= GET_BITS( 8, 11, scratch_unat);
  61. val |= GET_BITS(16, 31, scratch_unat);
  62. return val;
  63. # undef GET_BITS
  64. }
  65. /*
  66.  * Set the NaT bits for the scratch registers according to NAT and
  67.  * return the resulting unat (assuming the scratch registers are
  68.  * stored in PT).
  69.  */
  70. unsigned long
  71. ia64_put_scratch_nat_bits (struct pt_regs *pt, unsigned long nat)
  72. {
  73. unsigned long scratch_unat;
  74. # define PUT_BITS(first, last, nat)
  75. ({
  76. unsigned long bit = ia64_unat_pos(&pt->r##first);
  77. unsigned long mask = ((1UL << (last - first + 1)) - 1) << bit;
  78. (ia64_rotr(nat, first) << bit) & mask;
  79. })
  80. scratch_unat  = PUT_BITS( 1,  3, nat);
  81. scratch_unat |= PUT_BITS(12, 15, nat);
  82. scratch_unat |= PUT_BITS( 8, 11, nat);
  83. scratch_unat |= PUT_BITS(16, 31, nat);
  84. return scratch_unat;
  85. # undef PUT_BITS
  86. }
  87. #define IA64_MLX_TEMPLATE 0x2
  88. #define IA64_MOVL_OPCODE 6
  89. void
  90. ia64_increment_ip (struct pt_regs *regs)
  91. {
  92. unsigned long w0, ri = ia64_psr(regs)->ri + 1;
  93. if (ri > 2) {
  94. ri = 0;
  95. regs->cr_iip += 16;
  96. } else if (ri == 2) {
  97. get_user(w0, (char *) regs->cr_iip + 0);
  98. if (((w0 >> 1) & 0xf) == IA64_MLX_TEMPLATE) {
  99. /*
  100.  * rfi'ing to slot 2 of an MLX bundle causes
  101.  * an illegal operation fault.  We don't want
  102.  * that to happen...
  103.  */
  104. ri = 0;
  105. regs->cr_iip += 16;
  106. }
  107. }
  108. ia64_psr(regs)->ri = ri;
  109. }
  110. void
  111. ia64_decrement_ip (struct pt_regs *regs)
  112. {
  113. unsigned long w0, ri = ia64_psr(regs)->ri - 1;
  114. if (ia64_psr(regs)->ri == 0) {
  115. regs->cr_iip -= 16;
  116. ri = 2;
  117. get_user(w0, (char *) regs->cr_iip + 0);
  118. if (((w0 >> 1) & 0xf) == IA64_MLX_TEMPLATE) {
  119. /*
  120.  * rfi'ing to slot 2 of an MLX bundle causes
  121.  * an illegal operation fault.  We don't want
  122.  * that to happen...
  123.  */
  124. ri = 1;
  125. }
  126. }
  127. ia64_psr(regs)->ri = ri;
  128. }
  129. /*
  130.  * This routine is used to read an rnat bits that are stored on the kernel backing store.
  131.  * Since, in general, the alignment of the user and kernel are different, this is not
  132.  * completely trivial.  In essence, we need to construct the user RNAT based on up to two
  133.  * kernel RNAT values and/or the RNAT value saved in the child's pt_regs.
  134.  *
  135.  * user rbs
  136.  *
  137.  * +--------+ <-- lowest address
  138.  * | slot62 |
  139.  * +--------+
  140.  * |  rnat  | 0x....1f8
  141.  * +--------+
  142.  * | slot00 | 
  143.  * +--------+ |
  144.  * | slot01 | > child_regs->ar_rnat
  145.  * +--------+ |
  146.  * | slot02 | / kernel rbs
  147.  * +--------+ +--------+
  148.  *     <- child_regs->ar_bspstore | slot61 | <-- krbs
  149.  * +- - - - + +--------+
  150.  * | slot62 |
  151.  * +- - - - + +--------+
  152.  * |  rnat  |
  153.  * +- - - - + +--------+
  154.  *   vrnat | slot00 |
  155.  * +- - - - + +--------+
  156.  * =  =
  157.  * +--------+
  158.  * | slot00 | 
  159.  * +--------+ |
  160.  * | slot01 | > child_stack->ar_rnat
  161.  * +--------+ |
  162.  * | slot02 | /
  163.  * +--------+
  164.  *   <--- child_stack->ar_bspstore
  165.  *
  166.  * The way to think of this code is as follows: bit 0 in the user rnat corresponds to some
  167.  * bit N (0 <= N <= 62) in one of the kernel rnat value.  The kernel rnat value holding
  168.  * this bit is stored in variable rnat0.  rnat1 is loaded with the kernel rnat value that
  169.  * form the upper bits of the user rnat value.
  170.  *
  171.  * Boundary cases:
  172.  *
  173.  * o when reading the rnat "below" the first rnat slot on the kernel backing store,
  174.  *   rnat0/rnat1 are set to 0 and the low order bits are merged in from pt->ar_rnat.
  175.  *
  176.  * o when reading the rnat "above" the last rnat slot on the kernel backing store,
  177.  *   rnat0/rnat1 gets its value from sw->ar_rnat.
  178.  */
  179. static unsigned long
  180. get_rnat (struct pt_regs *pt, struct switch_stack *sw,
  181.   unsigned long *krbs, unsigned long *urnat_addr)
  182. {
  183. unsigned long rnat0 = 0, rnat1 = 0, urnat = 0, *slot0_kaddr, kmask = ~0UL;
  184. unsigned long *kbsp, *ubspstore, *rnat0_kaddr, *rnat1_kaddr, shift;
  185. long num_regs;
  186. kbsp = (unsigned long *) sw->ar_bspstore;
  187. ubspstore = (unsigned long *) pt->ar_bspstore;
  188. /*
  189.  * First, figure out which bit number slot 0 in user-land maps
  190.  * to in the kernel rnat.  Do this by figuring out how many
  191.  * register slots we're beyond the user's backingstore and
  192.  * then computing the equivalent address in kernel space.
  193.  */
  194. num_regs = ia64_rse_num_regs(ubspstore, urnat_addr + 1);
  195. slot0_kaddr = ia64_rse_skip_regs(krbs, num_regs);
  196. shift = ia64_rse_slot_num(slot0_kaddr);
  197. rnat1_kaddr = ia64_rse_rnat_addr(slot0_kaddr);
  198. rnat0_kaddr = rnat1_kaddr - 64;
  199. if (ubspstore + 63 > urnat_addr) {
  200. /* some bits need to be merged in from pt->ar_rnat */
  201. kmask = ~((1UL << ia64_rse_slot_num(ubspstore)) - 1);
  202. urnat = (pt->ar_rnat & ~kmask);
  203. }
  204. if (rnat0_kaddr >= kbsp) {
  205. rnat0 = sw->ar_rnat;
  206. } else if (rnat0_kaddr > krbs) {
  207. rnat0 = *rnat0_kaddr;
  208. }
  209. if (rnat1_kaddr >= kbsp) {
  210. rnat1 = sw->ar_rnat;
  211. } else if (rnat1_kaddr > krbs) {
  212. rnat1 = *rnat1_kaddr;
  213. }
  214. urnat |= ((rnat1 << (63 - shift)) | (rnat0 >> shift)) & kmask;
  215. return urnat;
  216. }
  217. /*
  218.  * The reverse of get_rnat.
  219.  */
  220. static void
  221. put_rnat (struct pt_regs *pt, struct switch_stack *sw,
  222.   unsigned long *krbs, unsigned long *urnat_addr, unsigned long urnat)
  223. {
  224. unsigned long rnat0 = 0, rnat1 = 0, rnat = 0, *slot0_kaddr, kmask = ~0UL, mask;
  225. unsigned long *kbsp, *ubspstore, *rnat0_kaddr, *rnat1_kaddr, shift;
  226. long num_regs;
  227. kbsp = (unsigned long *) sw->ar_bspstore;
  228. ubspstore = (unsigned long *) pt->ar_bspstore;
  229. /*
  230.  * First, figure out which bit number slot 0 in user-land maps
  231.  * to in the kernel rnat.  Do this by figuring out how many
  232.  * register slots we're beyond the user's backingstore and
  233.  * then computing the equivalent address in kernel space.
  234.  */
  235. num_regs = (long) ia64_rse_num_regs(ubspstore, urnat_addr + 1);
  236. slot0_kaddr = ia64_rse_skip_regs(krbs, num_regs);
  237. shift = ia64_rse_slot_num(slot0_kaddr);
  238. rnat1_kaddr = ia64_rse_rnat_addr(slot0_kaddr);
  239. rnat0_kaddr = rnat1_kaddr - 64;
  240. if (ubspstore + 63 > urnat_addr) {
  241. /* some bits need to be place in pt->ar_rnat: */
  242. kmask = ~((1UL << ia64_rse_slot_num(ubspstore)) - 1);
  243. pt->ar_rnat = (pt->ar_rnat & kmask) | (rnat & ~kmask);
  244. }
  245. /*
  246.  * Note: Section 11.1 of the EAS guarantees that bit 63 of an
  247.  * rnat slot is ignored. so we don't have to clear it here.
  248.  */
  249. rnat0 = (urnat << shift);
  250. mask = ~0UL << shift;
  251. if (rnat0_kaddr >= kbsp) {
  252. sw->ar_rnat = (sw->ar_rnat & ~mask) | (rnat0 & mask);
  253. } else if (rnat0_kaddr > krbs) {
  254. *rnat0_kaddr = ((*rnat0_kaddr & ~mask) | (rnat0 & mask));
  255. }
  256. rnat1 = (urnat >> (63 - shift));
  257. mask = ~0UL >> (63 - shift);
  258. if (rnat1_kaddr >= kbsp) {
  259. sw->ar_rnat = (sw->ar_rnat & ~mask) | (rnat1 & mask);
  260. } else if (rnat1_kaddr > krbs) {
  261. *rnat1_kaddr = ((*rnat1_kaddr & ~mask) | (rnat1 & mask));
  262. }
  263. }
  264. /*
  265.  * Read a word from the user-level backing store of task CHILD.  ADDR is the user-level
  266.  * address to read the word from, VAL a pointer to the return value, and USER_BSP gives
  267.  * the end of the user-level backing store (i.e., it's the address that would be in ar.bsp
  268.  * after the user executed a "cover" instruction).
  269.  *
  270.  * This routine takes care of accessing the kernel register backing store for those
  271.  * registers that got spilled there.  It also takes care of calculating the appropriate
  272.  * RNaT collection words.
  273.  */
  274. long
  275. ia64_peek (struct task_struct *child, struct switch_stack *child_stack, unsigned long user_rbs_end,
  276.    unsigned long addr, long *val)
  277. {
  278. unsigned long *bspstore, *krbs, regnum, *laddr, *urbs_end, *rnat_addr;
  279. struct pt_regs *child_regs;
  280. size_t copied;
  281. long ret;
  282. urbs_end = (long *) user_rbs_end;
  283. laddr = (unsigned long *) addr;
  284. child_regs = ia64_task_regs(child);
  285. bspstore = (unsigned long *) child_regs->ar_bspstore;
  286. krbs = (unsigned long *) child + IA64_RBS_OFFSET/8;
  287. if (laddr >= bspstore && laddr <= ia64_rse_rnat_addr(urbs_end)) {
  288. /*
  289.  * Attempt to read the RBS in an area that's actually on the kernel RBS =>
  290.  * read the corresponding bits in the kernel RBS.
  291.  */
  292. rnat_addr = ia64_rse_rnat_addr(laddr);
  293. ret = get_rnat(child_regs, child_stack, krbs, rnat_addr);
  294. if (laddr == rnat_addr) {
  295. /* return NaT collection word itself */
  296. *val = ret;
  297. return 0;
  298. }
  299. if (((1UL << ia64_rse_slot_num(laddr)) & ret) != 0) {
  300. /*
  301.  * It is implementation dependent whether the data portion of a
  302.  * NaT value gets saved on a st8.spill or RSE spill (e.g., see
  303.  * EAS 2.6, 4.4.4.6 Register Spill and Fill).  To get consistent
  304.  * behavior across all possible IA-64 implementations, we return
  305.  * zero in this case.
  306.  */
  307. *val = 0;
  308. return 0;
  309. }
  310. if (laddr < urbs_end) {
  311. /* the desired word is on the kernel RBS and is not a NaT */
  312. regnum = ia64_rse_num_regs(bspstore, laddr);
  313. *val = *ia64_rse_skip_regs(krbs, regnum);
  314. return 0;
  315. }
  316. }
  317. copied = access_process_vm(child, addr, &ret, sizeof(ret), 0);
  318. if (copied != sizeof(ret))
  319. return -EIO;
  320. *val = ret;
  321. return 0;
  322. }
  323. long
  324. ia64_poke (struct task_struct *child, struct switch_stack *child_stack, unsigned long user_rbs_end,
  325.    unsigned long addr, long val)
  326. {
  327. unsigned long *bspstore, *krbs, regnum, *laddr, *urbs_end = (long *) user_rbs_end;
  328. struct pt_regs *child_regs;
  329. laddr = (unsigned long *) addr;
  330. child_regs = ia64_task_regs(child);
  331. bspstore = (unsigned long *) child_regs->ar_bspstore;
  332. krbs = (unsigned long *) child + IA64_RBS_OFFSET/8;
  333. if (laddr >= bspstore && laddr <= ia64_rse_rnat_addr(urbs_end)) {
  334. /*
  335.  * Attempt to write the RBS in an area that's actually on the kernel RBS
  336.  * => write the corresponding bits in the kernel RBS.
  337.  */
  338. if (ia64_rse_is_rnat_slot(laddr))
  339. put_rnat(child_regs, child_stack, krbs, laddr, val);
  340. else {
  341. if (laddr < urbs_end) {
  342. regnum = ia64_rse_num_regs(bspstore, laddr);
  343. *ia64_rse_skip_regs(krbs, regnum) = val;
  344. }
  345. }
  346. } else if (access_process_vm(child, addr, &val, sizeof(val), 1) != sizeof(val)) {
  347. return -EIO;
  348. }
  349. return 0;
  350. }
  351. /*
  352.  * Calculate the address of the end of the user-level register backing store.  This is the
  353.  * address that would have been stored in ar.bsp if the user had executed a "cover"
  354.  * instruction right before entering the kernel.  If CFMP is not NULL, it is used to
  355.  * return the "current frame mask" that was active at the time the kernel was entered.
  356.  */
  357. unsigned long
  358. ia64_get_user_rbs_end (struct task_struct *child, struct pt_regs *pt, unsigned long *cfmp)
  359. {
  360. unsigned long *krbs, *bspstore, cfm;
  361. struct unw_frame_info info;
  362. long ndirty;
  363. krbs = (unsigned long *) child + IA64_RBS_OFFSET/8;
  364. bspstore = (unsigned long *) pt->ar_bspstore;
  365. ndirty = ia64_rse_num_regs(krbs, krbs + (pt->loadrs >> 19));
  366. cfm = pt->cr_ifs & ~(1UL << 63);
  367. if ((long) pt->cr_ifs >= 0) {
  368. /*
  369.  * If bit 63 of cr.ifs is cleared, the kernel was entered via a system
  370.  * call and we need to recover the CFM that existed on entry to the
  371.  * kernel by unwinding the kernel stack.
  372.  */
  373. unw_init_from_blocked_task(&info, child);
  374. if (unw_unwind_to_user(&info) == 0) {
  375. unw_get_cfm(&info, &cfm);
  376. ndirty += (cfm & 0x7f);
  377. }
  378. }
  379. if (cfmp)
  380. *cfmp = cfm;
  381. return (unsigned long) ia64_rse_skip_regs(bspstore, ndirty);
  382. }
  383. /*
  384.  * Synchronize (i.e, write) the RSE backing store living in kernel space to the VM of the
  385.  * CHILD task.  SW and PT are the pointers to the switch_stack and pt_regs structures,
  386.  * respectively.  USER_RBS_END is the user-level address at which the backing store ends.
  387.  */
  388. long
  389. ia64_sync_user_rbs (struct task_struct *child, struct switch_stack *sw,
  390.     unsigned long user_rbs_start, unsigned long user_rbs_end)
  391. {
  392. unsigned long addr, val;
  393. long ret;
  394. /* now copy word for word from kernel rbs to user rbs: */
  395. for (addr = user_rbs_start; addr < user_rbs_end; addr += 8) {
  396. ret = ia64_peek(child, sw, user_rbs_end, addr, &val);
  397. if (ret < 0)
  398. return ret;
  399. if (access_process_vm(child, addr, &val, sizeof(val), 1) != sizeof(val))
  400. return -EIO;
  401. }
  402. return 0;
  403. }
  404. /*
  405.  * Simulate user-level "flushrs".  Note: we can't just add pt->loadrs>>16 to
  406.  * pt->ar_bspstore because the kernel backing store and the user-level backing store may
  407.  * have different alignments (and therefore a different number of intervening rnat slots).
  408.  */
  409. static void
  410. user_flushrs (struct task_struct *task, struct pt_regs *pt)
  411. {
  412. unsigned long *krbs;
  413. long ndirty;
  414. krbs = (unsigned long *) task + IA64_RBS_OFFSET/8;
  415. ndirty = ia64_rse_num_regs(krbs, krbs + (pt->loadrs >> 19));
  416. pt->ar_bspstore = (unsigned long) ia64_rse_skip_regs((unsigned long *) pt->ar_bspstore,
  417.      ndirty);
  418. pt->loadrs = 0;
  419. }
  420. /*
  421.  * Synchronize the RSE backing store of CHILD and all tasks that share the address space
  422.  * with it.  CHILD_URBS_END is the address of the end of the register backing store of
  423.  * CHILD.  If MAKE_WRITABLE is set, a user-level "flushrs" is simulated such that the VM
  424.  * can be written via ptrace() and the tasks will pick up the newly written values.  It
  425.  * would be OK to unconditionally simulate a "flushrs", but this would be more intrusive
  426.  * than strictly necessary (e.g., it would make it impossible to obtain the original value
  427.  * of ar.bspstore).
  428.  */
  429. static void
  430. threads_sync_user_rbs (struct task_struct *child, unsigned long child_urbs_end, int make_writable)
  431. {
  432. struct switch_stack *sw;
  433. unsigned long urbs_end;
  434. struct task_struct *p;
  435. struct mm_struct *mm;
  436. struct pt_regs *pt;
  437. long multi_threaded;
  438. task_lock(child);
  439. {
  440. mm = child->mm;
  441. multi_threaded = mm && (atomic_read(&mm->mm_users) > 1);
  442. }
  443. task_unlock(child);
  444. if (!multi_threaded) {
  445. sw = (struct switch_stack *) (child->thread.ksp + 16);
  446. pt = ia64_task_regs(child);
  447. ia64_sync_user_rbs(child, sw, pt->ar_bspstore, child_urbs_end);
  448. if (make_writable)
  449. user_flushrs(child, pt);
  450. } else {
  451. read_lock(&tasklist_lock);
  452. {
  453. for_each_task(p) {
  454. if (p->mm == mm && p->state != TASK_RUNNING) {
  455. sw = (struct switch_stack *) (p->thread.ksp + 16);
  456. pt = ia64_task_regs(p);
  457. urbs_end = ia64_get_user_rbs_end(p, pt, NULL);
  458. ia64_sync_user_rbs(p, sw, pt->ar_bspstore, urbs_end);
  459. if (make_writable)
  460. user_flushrs(p, pt);
  461. }
  462. }
  463. }
  464. read_unlock(&tasklist_lock);
  465. }
  466. child->thread.flags |= IA64_THREAD_KRBS_SYNCED; /* set the flag in the child thread only */
  467. }
  468. /*
  469.  * Write f32-f127 back to task->thread.fph if it has been modified.
  470.  */
  471. inline void
  472. ia64_flush_fph (struct task_struct *task)
  473. {
  474. struct ia64_psr *psr = ia64_psr(ia64_task_regs(task));
  475. #ifdef CONFIG_SMP
  476. struct task_struct *fpu_owner = current;
  477. #else
  478. struct task_struct *fpu_owner = ia64_get_fpu_owner();
  479. #endif
  480. if (task == fpu_owner && psr->mfh) {
  481. psr->mfh = 0;
  482. ia64_save_fpu(&task->thread.fph[0]);
  483. task->thread.flags |= IA64_THREAD_FPH_VALID;
  484. }
  485. }
  486. /*
  487.  * Sync the fph state of the task so that it can be manipulated
  488.  * through thread.fph.  If necessary, f32-f127 are written back to
  489.  * thread.fph or, if the fph state hasn't been used before, thread.fph
  490.  * is cleared to zeroes.  Also, access to f32-f127 is disabled to
  491.  * ensure that the task picks up the state from thread.fph when it
  492.  * executes again.
  493.  */
  494. void
  495. ia64_sync_fph (struct task_struct *task)
  496. {
  497. struct ia64_psr *psr = ia64_psr(ia64_task_regs(task));
  498. ia64_flush_fph(task);
  499. if (!(task->thread.flags & IA64_THREAD_FPH_VALID)) {
  500. task->thread.flags |= IA64_THREAD_FPH_VALID;
  501. memset(&task->thread.fph, 0, sizeof(task->thread.fph));
  502. }
  503. #ifndef CONFIG_SMP
  504. if (ia64_get_fpu_owner() == task)
  505. ia64_set_fpu_owner(0);
  506. #endif
  507. psr->dfh = 1;
  508. }
  509. static int
  510. access_fr (struct unw_frame_info *info, int regnum, int hi, unsigned long *data, int write_access)
  511. {
  512. struct ia64_fpreg fpval;
  513. int ret;
  514. ret = unw_get_fr(info, regnum, &fpval);
  515. if (ret < 0)
  516. return ret;
  517. if (write_access) {
  518. fpval.u.bits[hi] = *data;
  519. ret = unw_set_fr(info, regnum, fpval);
  520. } else
  521. *data = fpval.u.bits[hi];
  522. return ret;
  523. }
  524. static int
  525. access_uarea (struct task_struct *child, unsigned long addr, unsigned long *data, int write_access)
  526. {
  527. unsigned long *ptr, regnum, urbs_end, rnat_addr;
  528. struct switch_stack *sw;
  529. struct unw_frame_info info;
  530. struct pt_regs *pt;
  531. pt = ia64_task_regs(child);
  532. sw = (struct switch_stack *) (child->thread.ksp + 16);
  533. if ((addr & 0x7) != 0) {
  534. dprintk("ptrace: unaligned register address 0x%lxn", addr);
  535. return -1;
  536. }
  537. if (addr < PT_F127 + 16) {
  538. /* accessing fph */
  539. if (write_access)
  540. ia64_sync_fph(child);
  541. else
  542. ia64_flush_fph(child);
  543. ptr = (unsigned long *) ((unsigned long) &child->thread.fph + addr);
  544. } else if (addr >= PT_F10 && addr < PT_F15 + 16) {
  545. /* scratch registers untouched by kernel (saved in switch_stack) */
  546. ptr = (unsigned long *) ((long) sw + addr - PT_NAT_BITS);
  547. } else if (addr < PT_AR_LC + 8) {
  548. /* preserved state: */
  549. unsigned long nat_bits, scratch_unat, dummy = 0;
  550. struct unw_frame_info info;
  551. char nat = 0;
  552. int ret;
  553. unw_init_from_blocked_task(&info, child);
  554. if (unw_unwind_to_user(&info) < 0)
  555. return -1;
  556. switch (addr) {
  557.       case PT_NAT_BITS:
  558. if (write_access) {
  559. nat_bits = *data;
  560. scratch_unat = ia64_put_scratch_nat_bits(pt, nat_bits);
  561. if (unw_set_ar(&info, UNW_AR_UNAT, scratch_unat) < 0) {
  562. dprintk("ptrace: failed to set ar.unatn");
  563. return -1;
  564. }
  565. for (regnum = 4; regnum <= 7; ++regnum) {
  566. unw_get_gr(&info, regnum, &dummy, &nat);
  567. unw_set_gr(&info, regnum, dummy, (nat_bits >> regnum) & 1);
  568. }
  569. } else {
  570. if (unw_get_ar(&info, UNW_AR_UNAT, &scratch_unat) < 0) {
  571. dprintk("ptrace: failed to read ar.unatn");
  572. return -1;
  573. }
  574. nat_bits = ia64_get_scratch_nat_bits(pt, scratch_unat);
  575. for (regnum = 4; regnum <= 7; ++regnum) {
  576. unw_get_gr(&info, regnum, &dummy, &nat);
  577. nat_bits |= (nat != 0) << regnum;
  578. }
  579. *data = nat_bits;
  580. }
  581. return 0;
  582.       case PT_R4: case PT_R5: case PT_R6: case PT_R7:
  583. if (write_access) {
  584. /* read NaT bit first: */
  585. ret = unw_get_gr(&info, (addr - PT_R4)/8 + 4, data, &nat);
  586. if (ret < 0)
  587. return ret;
  588. }
  589. return unw_access_gr(&info, (addr - PT_R4)/8 + 4, data, &nat,
  590.      write_access);
  591.       case PT_B1: case PT_B2: case PT_B3: case PT_B4: case PT_B5:
  592. return unw_access_br(&info, (addr - PT_B1)/8 + 1, data, write_access);
  593.       case PT_AR_EC:
  594. return unw_access_ar(&info, UNW_AR_EC, data, write_access);
  595.       case PT_AR_LC:
  596. return unw_access_ar(&info, UNW_AR_LC, data, write_access);
  597.       default:
  598. if (addr >= PT_F2 && addr < PT_F5 + 16)
  599. return access_fr(&info, (addr - PT_F2)/16 + 2, (addr & 8) != 0,
  600.  data, write_access);
  601. else if (addr >= PT_F16 && addr < PT_F31 + 16)
  602. return access_fr(&info, (addr - PT_F16)/16 + 16, (addr & 8) != 0,
  603.  data, write_access);
  604. else {
  605. dprintk("ptrace: rejecting access to register address 0x%lxn",
  606. addr);
  607. return -1;
  608. }
  609. }
  610. } else if (addr < PT_F9+16) {
  611. /* scratch state */
  612. switch (addr) {
  613.       case PT_AR_BSP:
  614. /*
  615.  * By convention, we use PT_AR_BSP to refer to the end of the user-level
  616.  * backing store.  Use ia64_rse_skip_regs(PT_AR_BSP, -CFM.sof) to get
  617.  * the real value of ar.bsp at the time the kernel was entered.
  618.  */
  619. urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
  620. if (write_access) {
  621. if (*data != urbs_end) {
  622. if (ia64_sync_user_rbs(child, sw,
  623.        pt->ar_bspstore, urbs_end) < 0)
  624. return -1;
  625. /* simulate user-level write of ar.bsp: */
  626. pt->loadrs = 0;
  627. pt->ar_bspstore = *data;
  628. }
  629. } else
  630. *data = urbs_end;
  631. return 0;
  632.       case PT_CFM:
  633. if ((long) pt->cr_ifs < 0) {
  634. if (write_access)
  635. pt->cr_ifs = ((pt->cr_ifs & ~0x3fffffffffUL)
  636.       | (*data & 0x3fffffffffUL));
  637. else
  638. *data = pt->cr_ifs & 0x3fffffffffUL;
  639. } else {
  640. /* kernel was entered through a system call */
  641. unsigned long cfm;
  642. unw_init_from_blocked_task(&info, child);
  643. if (unw_unwind_to_user(&info) < 0)
  644. return -1;
  645. unw_get_cfm(&info, &cfm);
  646. if (write_access)
  647. unw_set_cfm(&info, ((cfm & ~0x3fffffffffU)
  648.     | (*data & 0x3fffffffffUL)));
  649. else
  650. *data = cfm;
  651. }
  652. return 0;
  653.       case PT_CR_IPSR:
  654. if (write_access)
  655. pt->cr_ipsr = ((*data & IPSR_WRITE_MASK)
  656.        | (pt->cr_ipsr & ~IPSR_WRITE_MASK));
  657. else
  658. *data = (pt->cr_ipsr & IPSR_READ_MASK);
  659. return 0;
  660.       case PT_AR_RNAT:
  661. urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
  662. rnat_addr = (long) ia64_rse_rnat_addr((long *) urbs_end);
  663. if (write_access)
  664. return ia64_poke(child, sw, urbs_end, rnat_addr, *data);
  665. else
  666. return ia64_peek(child, sw, urbs_end, rnat_addr, data);
  667.    case PT_R1:  case PT_R2:  case PT_R3:
  668.       case PT_R8:  case PT_R9:  case PT_R10: case PT_R11:
  669.       case PT_R12: case PT_R13: case PT_R14: case PT_R15:
  670.       case PT_R16: case PT_R17: case PT_R18: case PT_R19:
  671.       case PT_R20: case PT_R21: case PT_R22: case PT_R23:
  672.       case PT_R24: case PT_R25: case PT_R26: case PT_R27:
  673.       case PT_R28: case PT_R29: case PT_R30: case PT_R31:
  674.       case PT_B0:  case PT_B6:  case PT_B7:
  675.       case PT_F6:  case PT_F6+8: case PT_F7: case PT_F7+8:
  676.       case PT_F8:  case PT_F8+8: case PT_F9: case PT_F9+8:
  677.       case PT_AR_BSPSTORE:
  678.       case PT_AR_RSC: case PT_AR_UNAT: case PT_AR_PFS:
  679.       case PT_AR_CCV: case PT_AR_FPSR: case PT_CR_IIP: case PT_PR:
  680. /* scratch register */
  681. ptr = (unsigned long *) ((long) pt + addr - PT_CR_IPSR);
  682. break;
  683.       default:
  684. /* disallow accessing anything else... */
  685. dprintk("ptrace: rejecting access to register address 0x%lxn",
  686. addr);
  687. return -1;
  688. }
  689. } else {
  690. /* access debug registers */
  691. if (!(child->thread.flags & IA64_THREAD_DBG_VALID)) {
  692. child->thread.flags |= IA64_THREAD_DBG_VALID;
  693. memset(child->thread.dbr, 0, sizeof(child->thread.dbr));
  694. memset(child->thread.ibr, 0, sizeof(child->thread.ibr));
  695. }
  696. if (addr >= PT_IBR) {
  697. regnum = (addr - PT_IBR) >> 3;
  698. ptr = &child->thread.ibr[0];
  699. } else {
  700. regnum = (addr - PT_DBR) >> 3;
  701. ptr = &child->thread.dbr[0];
  702. }
  703. if (regnum >= 8) {
  704. dprintk("ptrace: rejecting access to register address 0x%lxn", addr);
  705. return -1;
  706. }
  707. ptr += regnum;
  708. if (write_access)
  709. /* don't let the user set kernel-level breakpoints... */
  710. *ptr = *data & ~(7UL << 56);
  711. else
  712. *data = *ptr;
  713. return 0;
  714. }
  715. if (write_access)
  716. *ptr = *data;
  717. else
  718. *data = *ptr;
  719. return 0;
  720. }
  721. /*
  722.  * Called by kernel/ptrace.c when detaching..
  723.  *
  724.  * Make sure the single step bit is not set.
  725.  */
  726. void
  727. ptrace_disable (struct task_struct *child)
  728. {
  729. struct ia64_psr *child_psr = ia64_psr(ia64_task_regs(child));
  730. /* make sure the single step/take-branch tra bits are not set: */
  731. child_psr->ss = 0;
  732. child_psr->tb = 0;
  733. /* Turn off flag indicating that the KRBS is sync'd with child's VM: */
  734. child->thread.flags &= ~IA64_THREAD_KRBS_SYNCED;
  735. }
  736. asmlinkage long
  737. sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data,
  738.     long arg4, long arg5, long arg6, long arg7, long stack)
  739. {
  740. struct pt_regs *pt, *regs = (struct pt_regs *) &stack;
  741. unsigned long urbs_end;
  742. struct task_struct *child;
  743. struct switch_stack *sw;
  744. long ret;
  745. lock_kernel();
  746. ret = -EPERM;
  747. if (request == PTRACE_TRACEME) {
  748. /* are we already being traced? */
  749. if (current->ptrace & PT_PTRACED)
  750. goto out;
  751. current->ptrace |= PT_PTRACED;
  752. ret = 0;
  753. goto out;
  754. }
  755. ret = -ESRCH;
  756. read_lock(&tasklist_lock);
  757. {
  758. child = find_task_by_pid(pid);
  759. if (child)
  760. get_task_struct(child);
  761. }
  762. read_unlock(&tasklist_lock);
  763. if (!child)
  764. goto out;
  765. ret = -EPERM;
  766. if (pid == 1) /* no messing around with init! */
  767. goto out_tsk;
  768. if (request == PTRACE_ATTACH) {
  769. ret = ptrace_attach(child);
  770. goto out_tsk;
  771. }
  772. ret = ptrace_check_attach(child, request == PTRACE_KILL);
  773. if (ret < 0)
  774. goto out_tsk;
  775. pt = ia64_task_regs(child);
  776. sw = (struct switch_stack *) (child->thread.ksp + 16);
  777. switch (request) {
  778.       case PTRACE_PEEKTEXT:
  779.       case PTRACE_PEEKDATA: /* read word at location addr */
  780. urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
  781. if (!(child->thread.flags & IA64_THREAD_KRBS_SYNCED))
  782. threads_sync_user_rbs(child, urbs_end, 0);
  783. ret = ia64_peek(child, sw, urbs_end, addr, &data);
  784. if (ret == 0) {
  785. ret = data;
  786. regs->r8 = 0; /* ensure "ret" is not mistaken as an error code */
  787. }
  788. goto out_tsk;
  789.       case PTRACE_POKETEXT:
  790.       case PTRACE_POKEDATA: /* write the word at location addr */
  791. urbs_end = ia64_get_user_rbs_end(child, pt, NULL);
  792. if (!(child->thread.flags & IA64_THREAD_KRBS_SYNCED))
  793. threads_sync_user_rbs(child, urbs_end, 1);
  794. ret = ia64_poke(child, sw, urbs_end, addr, data);
  795. goto out_tsk;
  796.       case PTRACE_PEEKUSR: /* read the word at addr in the USER area */
  797. if (access_uarea(child, addr, &data, 0) < 0) {
  798. ret = -EIO;
  799. goto out_tsk;
  800. }
  801. ret = data;
  802. regs->r8 = 0; /* ensure "ret" is not mistaken as an error code */
  803. goto out_tsk;
  804.       case PTRACE_POKEUSR:       /* write the word at addr in the USER area */
  805. if (access_uarea(child, addr, &data, 1) < 0) {
  806. ret = -EIO;
  807. goto out_tsk;
  808. }
  809. ret = 0;
  810. goto out_tsk;
  811.       case PTRACE_GETSIGINFO:
  812. ret = -EIO;
  813. if (!access_ok(VERIFY_WRITE, data, sizeof (siginfo_t)) || !child->thread.siginfo)
  814. goto out_tsk;
  815. ret = copy_siginfo_to_user((siginfo_t *) data, child->thread.siginfo);
  816. goto out_tsk;
  817.       case PTRACE_SETSIGINFO:
  818. ret = -EIO;
  819. if (!access_ok(VERIFY_READ, data, sizeof (siginfo_t))
  820.     || child->thread.siginfo == 0)
  821. goto out_tsk;
  822. ret = copy_siginfo_from_user(child->thread.siginfo, (siginfo_t *) data);
  823. goto out_tsk;
  824.       case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
  825.       case PTRACE_CONT: /* restart after signal. */
  826. ret = -EIO;
  827. if (data > _NSIG)
  828. goto out_tsk;
  829. if (request == PTRACE_SYSCALL)
  830. child->ptrace |= PT_TRACESYS;
  831. else
  832. child->ptrace &= ~PT_TRACESYS;
  833. child->exit_code = data;
  834. /* make sure the single step/taken-branch trap bits are not set: */
  835. ia64_psr(pt)->ss = 0;
  836. ia64_psr(pt)->tb = 0;
  837. /* Turn off flag indicating that the KRBS is sync'd with child's VM: */
  838. child->thread.flags &= ~IA64_THREAD_KRBS_SYNCED;
  839. wake_up_process(child);
  840. ret = 0;
  841. goto out_tsk;
  842.       case PTRACE_KILL:
  843. /*
  844.  * Make the child exit.  Best I can do is send it a
  845.  * sigkill.  Perhaps it should be put in the status
  846.  * that it wants to exit.
  847.  */
  848. if (child->state == TASK_ZOMBIE) /* already dead */
  849. goto out_tsk;
  850. child->exit_code = SIGKILL;
  851. /* make sure the single step/take-branch tra bits are not set: */
  852. ia64_psr(pt)->ss = 0;
  853. ia64_psr(pt)->tb = 0;
  854. /* Turn off flag indicating that the KRBS is sync'd with child's VM: */
  855. child->thread.flags &= ~IA64_THREAD_KRBS_SYNCED;
  856. wake_up_process(child);
  857. ret = 0;
  858. goto out_tsk;
  859.       case PTRACE_SINGLESTEP: /* let child execute for one instruction */
  860.       case PTRACE_SINGLEBLOCK:
  861. ret = -EIO;
  862. if (data > _NSIG)
  863. goto out_tsk;
  864. child->ptrace &= ~PT_TRACESYS;
  865. if (request == PTRACE_SINGLESTEP) {
  866. ia64_psr(pt)->ss = 1;
  867. } else {
  868. ia64_psr(pt)->tb = 1;
  869. }
  870. child->exit_code = data;
  871. /* Turn off flag indicating that the KRBS is sync'd with child's VM: */
  872. child->thread.flags &= ~IA64_THREAD_KRBS_SYNCED;
  873. /* give it a chance to run. */
  874. wake_up_process(child);
  875. ret = 0;
  876. goto out_tsk;
  877.       case PTRACE_DETACH: /* detach a process that was attached. */
  878. ret = ptrace_detach(child, data);
  879. goto out_tsk;
  880.       default:
  881. ret = -EIO;
  882. goto out_tsk;
  883. }
  884.   out_tsk:
  885. free_task_struct(child);
  886.   out:
  887. unlock_kernel();
  888. return ret;
  889. }
  890. void
  891. syscall_trace (void)
  892. {
  893. if ((current->ptrace & (PT_PTRACED|PT_TRACESYS)) != (PT_PTRACED|PT_TRACESYS))
  894. return;
  895. current->exit_code = SIGTRAP;
  896. set_current_state(TASK_STOPPED);
  897. notify_parent(current, SIGCHLD);
  898. schedule();
  899. /*
  900.  * This isn't the same as continuing with a signal, but it
  901.  * will do for normal use.  strace only continues with a
  902.  * signal if the stopping signal is not SIGTRAP.  -brl
  903.  */
  904. if (current->exit_code) {
  905. send_sig(current->exit_code, current, 1);
  906. current->exit_code = 0;
  907. }
  908. }