x86, perf, bts, mm: Delete the never used BTS-ptrace code
[linux-2.6-block.git] / arch / x86 / kernel / ptrace.c
1 /* By Ross Biro 1/23/92 */
2 /*
3  * Pentium III FXSR, SSE support
4  *      Gareth Hughes <gareth@valinux.com>, May 2000
5  */
6
7 #include <linux/kernel.h>
8 #include <linux/sched.h>
9 #include <linux/mm.h>
10 #include <linux/smp.h>
11 #include <linux/errno.h>
12 #include <linux/ptrace.h>
13 #include <linux/regset.h>
14 #include <linux/tracehook.h>
15 #include <linux/user.h>
16 #include <linux/elf.h>
17 #include <linux/security.h>
18 #include <linux/audit.h>
19 #include <linux/seccomp.h>
20 #include <linux/signal.h>
21 #include <linux/perf_event.h>
22 #include <linux/hw_breakpoint.h>
23
24 #include <asm/uaccess.h>
25 #include <asm/pgtable.h>
26 #include <asm/system.h>
27 #include <asm/processor.h>
28 #include <asm/i387.h>
29 #include <asm/debugreg.h>
30 #include <asm/ldt.h>
31 #include <asm/desc.h>
32 #include <asm/prctl.h>
33 #include <asm/proto.h>
34 #include <asm/hw_breakpoint.h>
35
36 #include "tls.h"
37
38 #define CREATE_TRACE_POINTS
39 #include <trace/events/syscalls.h>
40
41 enum x86_regset {
42         REGSET_GENERAL,
43         REGSET_FP,
44         REGSET_XFP,
45         REGSET_IOPERM64 = REGSET_XFP,
46         REGSET_XSTATE,
47         REGSET_TLS,
48         REGSET_IOPERM32,
49 };
50
51 struct pt_regs_offset {
52         const char *name;
53         int offset;
54 };
55
56 #define REG_OFFSET_NAME(r) {.name = #r, .offset = offsetof(struct pt_regs, r)}
57 #define REG_OFFSET_END {.name = NULL, .offset = 0}
58
59 static const struct pt_regs_offset regoffset_table[] = {
60 #ifdef CONFIG_X86_64
61         REG_OFFSET_NAME(r15),
62         REG_OFFSET_NAME(r14),
63         REG_OFFSET_NAME(r13),
64         REG_OFFSET_NAME(r12),
65         REG_OFFSET_NAME(r11),
66         REG_OFFSET_NAME(r10),
67         REG_OFFSET_NAME(r9),
68         REG_OFFSET_NAME(r8),
69 #endif
70         REG_OFFSET_NAME(bx),
71         REG_OFFSET_NAME(cx),
72         REG_OFFSET_NAME(dx),
73         REG_OFFSET_NAME(si),
74         REG_OFFSET_NAME(di),
75         REG_OFFSET_NAME(bp),
76         REG_OFFSET_NAME(ax),
77 #ifdef CONFIG_X86_32
78         REG_OFFSET_NAME(ds),
79         REG_OFFSET_NAME(es),
80         REG_OFFSET_NAME(fs),
81         REG_OFFSET_NAME(gs),
82 #endif
83         REG_OFFSET_NAME(orig_ax),
84         REG_OFFSET_NAME(ip),
85         REG_OFFSET_NAME(cs),
86         REG_OFFSET_NAME(flags),
87         REG_OFFSET_NAME(sp),
88         REG_OFFSET_NAME(ss),
89         REG_OFFSET_END,
90 };
91
92 /**
93  * regs_query_register_offset() - query register offset from its name
94  * @name:       the name of a register
95  *
96  * regs_query_register_offset() returns the offset of a register in struct
97  * pt_regs from its name. If the name is invalid, this returns -EINVAL;
98  */
99 int regs_query_register_offset(const char *name)
100 {
101         const struct pt_regs_offset *roff;
102         for (roff = regoffset_table; roff->name != NULL; roff++)
103                 if (!strcmp(roff->name, name))
104                         return roff->offset;
105         return -EINVAL;
106 }
107
108 /**
109  * regs_query_register_name() - query register name from its offset
110  * @offset:     the offset of a register in struct pt_regs.
111  *
112  * regs_query_register_name() returns the name of a register from its
113  * offset in struct pt_regs. If the @offset is invalid, this returns NULL;
114  */
115 const char *regs_query_register_name(unsigned int offset)
116 {
117         const struct pt_regs_offset *roff;
118         for (roff = regoffset_table; roff->name != NULL; roff++)
119                 if (roff->offset == offset)
120                         return roff->name;
121         return NULL;
122 }
123
124 static const int arg_offs_table[] = {
125 #ifdef CONFIG_X86_32
126         [0] = offsetof(struct pt_regs, ax),
127         [1] = offsetof(struct pt_regs, dx),
128         [2] = offsetof(struct pt_regs, cx)
129 #else /* CONFIG_X86_64 */
130         [0] = offsetof(struct pt_regs, di),
131         [1] = offsetof(struct pt_regs, si),
132         [2] = offsetof(struct pt_regs, dx),
133         [3] = offsetof(struct pt_regs, cx),
134         [4] = offsetof(struct pt_regs, r8),
135         [5] = offsetof(struct pt_regs, r9)
136 #endif
137 };
138
139 /*
140  * does not yet catch signals sent when the child dies.
141  * in exit.c or in signal.c.
142  */
143
144 /*
145  * Determines which flags the user has access to [1 = access, 0 = no access].
146  */
147 #define FLAG_MASK_32            ((unsigned long)                        \
148                                  (X86_EFLAGS_CF | X86_EFLAGS_PF |       \
149                                   X86_EFLAGS_AF | X86_EFLAGS_ZF |       \
150                                   X86_EFLAGS_SF | X86_EFLAGS_TF |       \
151                                   X86_EFLAGS_DF | X86_EFLAGS_OF |       \
152                                   X86_EFLAGS_RF | X86_EFLAGS_AC))
153
154 /*
155  * Determines whether a value may be installed in a segment register.
156  */
157 static inline bool invalid_selector(u16 value)
158 {
159         return unlikely(value != 0 && (value & SEGMENT_RPL_MASK) != USER_RPL);
160 }
161
162 #ifdef CONFIG_X86_32
163
164 #define FLAG_MASK               FLAG_MASK_32
165
166 static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long regno)
167 {
168         BUILD_BUG_ON(offsetof(struct pt_regs, bx) != 0);
169         return &regs->bx + (regno >> 2);
170 }
171
172 static u16 get_segment_reg(struct task_struct *task, unsigned long offset)
173 {
174         /*
175          * Returning the value truncates it to 16 bits.
176          */
177         unsigned int retval;
178         if (offset != offsetof(struct user_regs_struct, gs))
179                 retval = *pt_regs_access(task_pt_regs(task), offset);
180         else {
181                 if (task == current)
182                         retval = get_user_gs(task_pt_regs(task));
183                 else
184                         retval = task_user_gs(task);
185         }
186         return retval;
187 }
188
189 static int set_segment_reg(struct task_struct *task,
190                            unsigned long offset, u16 value)
191 {
192         /*
193          * The value argument was already truncated to 16 bits.
194          */
195         if (invalid_selector(value))
196                 return -EIO;
197
198         /*
199          * For %cs and %ss we cannot permit a null selector.
200          * We can permit a bogus selector as long as it has USER_RPL.
201          * Null selectors are fine for other segment registers, but
202          * we will never get back to user mode with invalid %cs or %ss
203          * and will take the trap in iret instead.  Much code relies
204          * on user_mode() to distinguish a user trap frame (which can
205          * safely use invalid selectors) from a kernel trap frame.
206          */
207         switch (offset) {
208         case offsetof(struct user_regs_struct, cs):
209         case offsetof(struct user_regs_struct, ss):
210                 if (unlikely(value == 0))
211                         return -EIO;
212
213         default:
214                 *pt_regs_access(task_pt_regs(task), offset) = value;
215                 break;
216
217         case offsetof(struct user_regs_struct, gs):
218                 if (task == current)
219                         set_user_gs(task_pt_regs(task), value);
220                 else
221                         task_user_gs(task) = value;
222         }
223
224         return 0;
225 }
226
227 #else  /* CONFIG_X86_64 */
228
229 #define FLAG_MASK               (FLAG_MASK_32 | X86_EFLAGS_NT)
230
231 static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long offset)
232 {
233         BUILD_BUG_ON(offsetof(struct pt_regs, r15) != 0);
234         return &regs->r15 + (offset / sizeof(regs->r15));
235 }
236
237 static u16 get_segment_reg(struct task_struct *task, unsigned long offset)
238 {
239         /*
240          * Returning the value truncates it to 16 bits.
241          */
242         unsigned int seg;
243
244         switch (offset) {
245         case offsetof(struct user_regs_struct, fs):
246                 if (task == current) {
247                         /* Older gas can't assemble movq %?s,%r?? */
248                         asm("movl %%fs,%0" : "=r" (seg));
249                         return seg;
250                 }
251                 return task->thread.fsindex;
252         case offsetof(struct user_regs_struct, gs):
253                 if (task == current) {
254                         asm("movl %%gs,%0" : "=r" (seg));
255                         return seg;
256                 }
257                 return task->thread.gsindex;
258         case offsetof(struct user_regs_struct, ds):
259                 if (task == current) {
260                         asm("movl %%ds,%0" : "=r" (seg));
261                         return seg;
262                 }
263                 return task->thread.ds;
264         case offsetof(struct user_regs_struct, es):
265                 if (task == current) {
266                         asm("movl %%es,%0" : "=r" (seg));
267                         return seg;
268                 }
269                 return task->thread.es;
270
271         case offsetof(struct user_regs_struct, cs):
272         case offsetof(struct user_regs_struct, ss):
273                 break;
274         }
275         return *pt_regs_access(task_pt_regs(task), offset);
276 }
277
278 static int set_segment_reg(struct task_struct *task,
279                            unsigned long offset, u16 value)
280 {
281         /*
282          * The value argument was already truncated to 16 bits.
283          */
284         if (invalid_selector(value))
285                 return -EIO;
286
287         switch (offset) {
288         case offsetof(struct user_regs_struct,fs):
289                 /*
290                  * If this is setting fs as for normal 64-bit use but
291                  * setting fs_base has implicitly changed it, leave it.
292                  */
293                 if ((value == FS_TLS_SEL && task->thread.fsindex == 0 &&
294                      task->thread.fs != 0) ||
295                     (value == 0 && task->thread.fsindex == FS_TLS_SEL &&
296                      task->thread.fs == 0))
297                         break;
298                 task->thread.fsindex = value;
299                 if (task == current)
300                         loadsegment(fs, task->thread.fsindex);
301                 break;
302         case offsetof(struct user_regs_struct,gs):
303                 /*
304                  * If this is setting gs as for normal 64-bit use but
305                  * setting gs_base has implicitly changed it, leave it.
306                  */
307                 if ((value == GS_TLS_SEL && task->thread.gsindex == 0 &&
308                      task->thread.gs != 0) ||
309                     (value == 0 && task->thread.gsindex == GS_TLS_SEL &&
310                      task->thread.gs == 0))
311                         break;
312                 task->thread.gsindex = value;
313                 if (task == current)
314                         load_gs_index(task->thread.gsindex);
315                 break;
316         case offsetof(struct user_regs_struct,ds):
317                 task->thread.ds = value;
318                 if (task == current)
319                         loadsegment(ds, task->thread.ds);
320                 break;
321         case offsetof(struct user_regs_struct,es):
322                 task->thread.es = value;
323                 if (task == current)
324                         loadsegment(es, task->thread.es);
325                 break;
326
327                 /*
328                  * Can't actually change these in 64-bit mode.
329                  */
330         case offsetof(struct user_regs_struct,cs):
331                 if (unlikely(value == 0))
332                         return -EIO;
333 #ifdef CONFIG_IA32_EMULATION
334                 if (test_tsk_thread_flag(task, TIF_IA32))
335                         task_pt_regs(task)->cs = value;
336 #endif
337                 break;
338         case offsetof(struct user_regs_struct,ss):
339                 if (unlikely(value == 0))
340                         return -EIO;
341 #ifdef CONFIG_IA32_EMULATION
342                 if (test_tsk_thread_flag(task, TIF_IA32))
343                         task_pt_regs(task)->ss = value;
344 #endif
345                 break;
346         }
347
348         return 0;
349 }
350
351 #endif  /* CONFIG_X86_32 */
352
353 static unsigned long get_flags(struct task_struct *task)
354 {
355         unsigned long retval = task_pt_regs(task)->flags;
356
357         /*
358          * If the debugger set TF, hide it from the readout.
359          */
360         if (test_tsk_thread_flag(task, TIF_FORCED_TF))
361                 retval &= ~X86_EFLAGS_TF;
362
363         return retval;
364 }
365
366 static int set_flags(struct task_struct *task, unsigned long value)
367 {
368         struct pt_regs *regs = task_pt_regs(task);
369
370         /*
371          * If the user value contains TF, mark that
372          * it was not "us" (the debugger) that set it.
373          * If not, make sure it stays set if we had.
374          */
375         if (value & X86_EFLAGS_TF)
376                 clear_tsk_thread_flag(task, TIF_FORCED_TF);
377         else if (test_tsk_thread_flag(task, TIF_FORCED_TF))
378                 value |= X86_EFLAGS_TF;
379
380         regs->flags = (regs->flags & ~FLAG_MASK) | (value & FLAG_MASK);
381
382         return 0;
383 }
384
385 static int putreg(struct task_struct *child,
386                   unsigned long offset, unsigned long value)
387 {
388         switch (offset) {
389         case offsetof(struct user_regs_struct, cs):
390         case offsetof(struct user_regs_struct, ds):
391         case offsetof(struct user_regs_struct, es):
392         case offsetof(struct user_regs_struct, fs):
393         case offsetof(struct user_regs_struct, gs):
394         case offsetof(struct user_regs_struct, ss):
395                 return set_segment_reg(child, offset, value);
396
397         case offsetof(struct user_regs_struct, flags):
398                 return set_flags(child, value);
399
400 #ifdef CONFIG_X86_64
401         case offsetof(struct user_regs_struct,fs_base):
402                 if (value >= TASK_SIZE_OF(child))
403                         return -EIO;
404                 /*
405                  * When changing the segment base, use do_arch_prctl
406                  * to set either thread.fs or thread.fsindex and the
407                  * corresponding GDT slot.
408                  */
409                 if (child->thread.fs != value)
410                         return do_arch_prctl(child, ARCH_SET_FS, value);
411                 return 0;
412         case offsetof(struct user_regs_struct,gs_base):
413                 /*
414                  * Exactly the same here as the %fs handling above.
415                  */
416                 if (value >= TASK_SIZE_OF(child))
417                         return -EIO;
418                 if (child->thread.gs != value)
419                         return do_arch_prctl(child, ARCH_SET_GS, value);
420                 return 0;
421 #endif
422         }
423
424         *pt_regs_access(task_pt_regs(child), offset) = value;
425         return 0;
426 }
427
428 static unsigned long getreg(struct task_struct *task, unsigned long offset)
429 {
430         switch (offset) {
431         case offsetof(struct user_regs_struct, cs):
432         case offsetof(struct user_regs_struct, ds):
433         case offsetof(struct user_regs_struct, es):
434         case offsetof(struct user_regs_struct, fs):
435         case offsetof(struct user_regs_struct, gs):
436         case offsetof(struct user_regs_struct, ss):
437                 return get_segment_reg(task, offset);
438
439         case offsetof(struct user_regs_struct, flags):
440                 return get_flags(task);
441
442 #ifdef CONFIG_X86_64
443         case offsetof(struct user_regs_struct, fs_base): {
444                 /*
445                  * do_arch_prctl may have used a GDT slot instead of
446                  * the MSR.  To userland, it appears the same either
447                  * way, except the %fs segment selector might not be 0.
448                  */
449                 unsigned int seg = task->thread.fsindex;
450                 if (task->thread.fs != 0)
451                         return task->thread.fs;
452                 if (task == current)
453                         asm("movl %%fs,%0" : "=r" (seg));
454                 if (seg != FS_TLS_SEL)
455                         return 0;
456                 return get_desc_base(&task->thread.tls_array[FS_TLS]);
457         }
458         case offsetof(struct user_regs_struct, gs_base): {
459                 /*
460                  * Exactly the same here as the %fs handling above.
461                  */
462                 unsigned int seg = task->thread.gsindex;
463                 if (task->thread.gs != 0)
464                         return task->thread.gs;
465                 if (task == current)
466                         asm("movl %%gs,%0" : "=r" (seg));
467                 if (seg != GS_TLS_SEL)
468                         return 0;
469                 return get_desc_base(&task->thread.tls_array[GS_TLS]);
470         }
471 #endif
472         }
473
474         return *pt_regs_access(task_pt_regs(task), offset);
475 }
476
477 static int genregs_get(struct task_struct *target,
478                        const struct user_regset *regset,
479                        unsigned int pos, unsigned int count,
480                        void *kbuf, void __user *ubuf)
481 {
482         if (kbuf) {
483                 unsigned long *k = kbuf;
484                 while (count >= sizeof(*k)) {
485                         *k++ = getreg(target, pos);
486                         count -= sizeof(*k);
487                         pos += sizeof(*k);
488                 }
489         } else {
490                 unsigned long __user *u = ubuf;
491                 while (count >= sizeof(*u)) {
492                         if (__put_user(getreg(target, pos), u++))
493                                 return -EFAULT;
494                         count -= sizeof(*u);
495                         pos += sizeof(*u);
496                 }
497         }
498
499         return 0;
500 }
501
502 static int genregs_set(struct task_struct *target,
503                        const struct user_regset *regset,
504                        unsigned int pos, unsigned int count,
505                        const void *kbuf, const void __user *ubuf)
506 {
507         int ret = 0;
508         if (kbuf) {
509                 const unsigned long *k = kbuf;
510                 while (count >= sizeof(*k) && !ret) {
511                         ret = putreg(target, pos, *k++);
512                         count -= sizeof(*k);
513                         pos += sizeof(*k);
514                 }
515         } else {
516                 const unsigned long  __user *u = ubuf;
517                 while (count >= sizeof(*u) && !ret) {
518                         unsigned long word;
519                         ret = __get_user(word, u++);
520                         if (ret)
521                                 break;
522                         ret = putreg(target, pos, word);
523                         count -= sizeof(*u);
524                         pos += sizeof(*u);
525                 }
526         }
527         return ret;
528 }
529
530 static void ptrace_triggered(struct perf_event *bp, int nmi,
531                              struct perf_sample_data *data,
532                              struct pt_regs *regs)
533 {
534         int i;
535         struct thread_struct *thread = &(current->thread);
536
537         /*
538          * Store in the virtual DR6 register the fact that the breakpoint
539          * was hit so the thread's debugger will see it.
540          */
541         for (i = 0; i < HBP_NUM; i++) {
542                 if (thread->ptrace_bps[i] == bp)
543                         break;
544         }
545
546         thread->debugreg6 |= (DR_TRAP0 << i);
547 }
548
549 /*
550  * Walk through every ptrace breakpoints for this thread and
551  * build the dr7 value on top of their attributes.
552  *
553  */
554 static unsigned long ptrace_get_dr7(struct perf_event *bp[])
555 {
556         int i;
557         int dr7 = 0;
558         struct arch_hw_breakpoint *info;
559
560         for (i = 0; i < HBP_NUM; i++) {
561                 if (bp[i] && !bp[i]->attr.disabled) {
562                         info = counter_arch_bp(bp[i]);
563                         dr7 |= encode_dr7(i, info->len, info->type);
564                 }
565         }
566
567         return dr7;
568 }
569
570 static int
571 ptrace_modify_breakpoint(struct perf_event *bp, int len, int type,
572                          struct task_struct *tsk, int disabled)
573 {
574         int err;
575         int gen_len, gen_type;
576         struct perf_event_attr attr;
577
578         /*
579          * We should have at least an inactive breakpoint at this
580          * slot. It means the user is writing dr7 without having
581          * written the address register first
582          */
583         if (!bp)
584                 return -EINVAL;
585
586         err = arch_bp_generic_fields(len, type, &gen_len, &gen_type);
587         if (err)
588                 return err;
589
590         attr = bp->attr;
591         attr.bp_len = gen_len;
592         attr.bp_type = gen_type;
593         attr.disabled = disabled;
594
595         return modify_user_hw_breakpoint(bp, &attr);
596 }
597
598 /*
599  * Handle ptrace writes to debug register 7.
600  */
601 static int ptrace_write_dr7(struct task_struct *tsk, unsigned long data)
602 {
603         struct thread_struct *thread = &(tsk->thread);
604         unsigned long old_dr7;
605         int i, orig_ret = 0, rc = 0;
606         int enabled, second_pass = 0;
607         unsigned len, type;
608         struct perf_event *bp;
609
610         data &= ~DR_CONTROL_RESERVED;
611         old_dr7 = ptrace_get_dr7(thread->ptrace_bps);
612 restore:
613         /*
614          * Loop through all the hardware breakpoints, making the
615          * appropriate changes to each.
616          */
617         for (i = 0; i < HBP_NUM; i++) {
618                 enabled = decode_dr7(data, i, &len, &type);
619                 bp = thread->ptrace_bps[i];
620
621                 if (!enabled) {
622                         if (bp) {
623                                 /*
624                                  * Don't unregister the breakpoints right-away,
625                                  * unless all register_user_hw_breakpoint()
626                                  * requests have succeeded. This prevents
627                                  * any window of opportunity for debug
628                                  * register grabbing by other users.
629                                  */
630                                 if (!second_pass)
631                                         continue;
632
633                                 rc = ptrace_modify_breakpoint(bp, len, type,
634                                                               tsk, 1);
635                                 if (rc)
636                                         break;
637                         }
638                         continue;
639                 }
640
641                 rc = ptrace_modify_breakpoint(bp, len, type, tsk, 0);
642                 if (rc)
643                         break;
644         }
645         /*
646          * Make a second pass to free the remaining unused breakpoints
647          * or to restore the original breakpoints if an error occurred.
648          */
649         if (!second_pass) {
650                 second_pass = 1;
651                 if (rc < 0) {
652                         orig_ret = rc;
653                         data = old_dr7;
654                 }
655                 goto restore;
656         }
657         return ((orig_ret < 0) ? orig_ret : rc);
658 }
659
660 /*
661  * Handle PTRACE_PEEKUSR calls for the debug register area.
662  */
663 static unsigned long ptrace_get_debugreg(struct task_struct *tsk, int n)
664 {
665         struct thread_struct *thread = &(tsk->thread);
666         unsigned long val = 0;
667
668         if (n < HBP_NUM) {
669                 struct perf_event *bp;
670                 bp = thread->ptrace_bps[n];
671                 if (!bp)
672                         return 0;
673                 val = bp->hw.info.address;
674         } else if (n == 6) {
675                 val = thread->debugreg6;
676          } else if (n == 7) {
677                 val = thread->ptrace_dr7;
678         }
679         return val;
680 }
681
682 static int ptrace_set_breakpoint_addr(struct task_struct *tsk, int nr,
683                                       unsigned long addr)
684 {
685         struct perf_event *bp;
686         struct thread_struct *t = &tsk->thread;
687         struct perf_event_attr attr;
688
689         if (!t->ptrace_bps[nr]) {
690                 hw_breakpoint_init(&attr);
691                 /*
692                  * Put stub len and type to register (reserve) an inactive but
693                  * correct bp
694                  */
695                 attr.bp_addr = addr;
696                 attr.bp_len = HW_BREAKPOINT_LEN_1;
697                 attr.bp_type = HW_BREAKPOINT_W;
698                 attr.disabled = 1;
699
700                 bp = register_user_hw_breakpoint(&attr, ptrace_triggered, tsk);
701
702                 /*
703                  * CHECKME: the previous code returned -EIO if the addr wasn't
704                  * a valid task virtual addr. The new one will return -EINVAL in
705                  *  this case.
706                  * -EINVAL may be what we want for in-kernel breakpoints users,
707                  * but -EIO looks better for ptrace, since we refuse a register
708                  * writing for the user. And anyway this is the previous
709                  * behaviour.
710                  */
711                 if (IS_ERR(bp))
712                         return PTR_ERR(bp);
713
714                 t->ptrace_bps[nr] = bp;
715         } else {
716                 int err;
717
718                 bp = t->ptrace_bps[nr];
719
720                 attr = bp->attr;
721                 attr.bp_addr = addr;
722                 err = modify_user_hw_breakpoint(bp, &attr);
723                 if (err)
724                         return err;
725         }
726
727
728         return 0;
729 }
730
731 /*
732  * Handle PTRACE_POKEUSR calls for the debug register area.
733  */
734 int ptrace_set_debugreg(struct task_struct *tsk, int n, unsigned long val)
735 {
736         struct thread_struct *thread = &(tsk->thread);
737         int rc = 0;
738
739         /* There are no DR4 or DR5 registers */
740         if (n == 4 || n == 5)
741                 return -EIO;
742
743         if (n == 6) {
744                 thread->debugreg6 = val;
745                 goto ret_path;
746         }
747         if (n < HBP_NUM) {
748                 rc = ptrace_set_breakpoint_addr(tsk, n, val);
749                 if (rc)
750                         return rc;
751         }
752         /* All that's left is DR7 */
753         if (n == 7) {
754                 rc = ptrace_write_dr7(tsk, val);
755                 if (!rc)
756                         thread->ptrace_dr7 = val;
757         }
758
759 ret_path:
760         return rc;
761 }
762
763 /*
764  * These access the current or another (stopped) task's io permission
765  * bitmap for debugging or core dump.
766  */
767 static int ioperm_active(struct task_struct *target,
768                          const struct user_regset *regset)
769 {
770         return target->thread.io_bitmap_max / regset->size;
771 }
772
773 static int ioperm_get(struct task_struct *target,
774                       const struct user_regset *regset,
775                       unsigned int pos, unsigned int count,
776                       void *kbuf, void __user *ubuf)
777 {
778         if (!target->thread.io_bitmap_ptr)
779                 return -ENXIO;
780
781         return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
782                                    target->thread.io_bitmap_ptr,
783                                    0, IO_BITMAP_BYTES);
784 }
785
786 /*
787  * Called by kernel/ptrace.c when detaching..
788  *
789  * Make sure the single step bit is not set.
790  */
791 void ptrace_disable(struct task_struct *child)
792 {
793         user_disable_single_step(child);
794 #ifdef TIF_SYSCALL_EMU
795         clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
796 #endif
797 }
798
799 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
800 static const struct user_regset_view user_x86_32_view; /* Initialized below. */
801 #endif
802
803 long arch_ptrace(struct task_struct *child, long request, long addr, long data)
804 {
805         int ret;
806         unsigned long __user *datap = (unsigned long __user *)data;
807
808         switch (request) {
809         /* read the word at location addr in the USER area. */
810         case PTRACE_PEEKUSR: {
811                 unsigned long tmp;
812
813                 ret = -EIO;
814                 if ((addr & (sizeof(data) - 1)) || addr < 0 ||
815                     addr >= sizeof(struct user))
816                         break;
817
818                 tmp = 0;  /* Default return condition */
819                 if (addr < sizeof(struct user_regs_struct))
820                         tmp = getreg(child, addr);
821                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
822                          addr <= offsetof(struct user, u_debugreg[7])) {
823                         addr -= offsetof(struct user, u_debugreg[0]);
824                         tmp = ptrace_get_debugreg(child, addr / sizeof(data));
825                 }
826                 ret = put_user(tmp, datap);
827                 break;
828         }
829
830         case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
831                 ret = -EIO;
832                 if ((addr & (sizeof(data) - 1)) || addr < 0 ||
833                     addr >= sizeof(struct user))
834                         break;
835
836                 if (addr < sizeof(struct user_regs_struct))
837                         ret = putreg(child, addr, data);
838                 else if (addr >= offsetof(struct user, u_debugreg[0]) &&
839                          addr <= offsetof(struct user, u_debugreg[7])) {
840                         addr -= offsetof(struct user, u_debugreg[0]);
841                         ret = ptrace_set_debugreg(child,
842                                                   addr / sizeof(data), data);
843                 }
844                 break;
845
846         case PTRACE_GETREGS:    /* Get all gp regs from the child. */
847                 return copy_regset_to_user(child,
848                                            task_user_regset_view(current),
849                                            REGSET_GENERAL,
850                                            0, sizeof(struct user_regs_struct),
851                                            datap);
852
853         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
854                 return copy_regset_from_user(child,
855                                              task_user_regset_view(current),
856                                              REGSET_GENERAL,
857                                              0, sizeof(struct user_regs_struct),
858                                              datap);
859
860         case PTRACE_GETFPREGS:  /* Get the child FPU state. */
861                 return copy_regset_to_user(child,
862                                            task_user_regset_view(current),
863                                            REGSET_FP,
864                                            0, sizeof(struct user_i387_struct),
865                                            datap);
866
867         case PTRACE_SETFPREGS:  /* Set the child FPU state. */
868                 return copy_regset_from_user(child,
869                                              task_user_regset_view(current),
870                                              REGSET_FP,
871                                              0, sizeof(struct user_i387_struct),
872                                              datap);
873
874 #ifdef CONFIG_X86_32
875         case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
876                 return copy_regset_to_user(child, &user_x86_32_view,
877                                            REGSET_XFP,
878                                            0, sizeof(struct user_fxsr_struct),
879                                            datap) ? -EIO : 0;
880
881         case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
882                 return copy_regset_from_user(child, &user_x86_32_view,
883                                              REGSET_XFP,
884                                              0, sizeof(struct user_fxsr_struct),
885                                              datap) ? -EIO : 0;
886 #endif
887
888 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
889         case PTRACE_GET_THREAD_AREA:
890                 if (addr < 0)
891                         return -EIO;
892                 ret = do_get_thread_area(child, addr,
893                                          (struct user_desc __user *) data);
894                 break;
895
896         case PTRACE_SET_THREAD_AREA:
897                 if (addr < 0)
898                         return -EIO;
899                 ret = do_set_thread_area(child, addr,
900                                          (struct user_desc __user *) data, 0);
901                 break;
902 #endif
903
904 #ifdef CONFIG_X86_64
905                 /* normal 64bit interface to access TLS data.
906                    Works just like arch_prctl, except that the arguments
907                    are reversed. */
908         case PTRACE_ARCH_PRCTL:
909                 ret = do_arch_prctl(child, data, addr);
910                 break;
911 #endif
912
913         default:
914                 ret = ptrace_request(child, request, addr, data);
915                 break;
916         }
917
918         return ret;
919 }
920
921 #ifdef CONFIG_IA32_EMULATION
922
923 #include <linux/compat.h>
924 #include <linux/syscalls.h>
925 #include <asm/ia32.h>
926 #include <asm/user32.h>
927
928 #define R32(l,q)                                                        \
929         case offsetof(struct user32, regs.l):                           \
930                 regs->q = value; break
931
932 #define SEG32(rs)                                                       \
933         case offsetof(struct user32, regs.rs):                          \
934                 return set_segment_reg(child,                           \
935                                        offsetof(struct user_regs_struct, rs), \
936                                        value);                          \
937                 break
938
939 static int putreg32(struct task_struct *child, unsigned regno, u32 value)
940 {
941         struct pt_regs *regs = task_pt_regs(child);
942
943         switch (regno) {
944
945         SEG32(cs);
946         SEG32(ds);
947         SEG32(es);
948         SEG32(fs);
949         SEG32(gs);
950         SEG32(ss);
951
952         R32(ebx, bx);
953         R32(ecx, cx);
954         R32(edx, dx);
955         R32(edi, di);
956         R32(esi, si);
957         R32(ebp, bp);
958         R32(eax, ax);
959         R32(eip, ip);
960         R32(esp, sp);
961
962         case offsetof(struct user32, regs.orig_eax):
963                 /*
964                  * A 32-bit debugger setting orig_eax means to restore
965                  * the state of the task restarting a 32-bit syscall.
966                  * Make sure we interpret the -ERESTART* codes correctly
967                  * in case the task is not actually still sitting at the
968                  * exit from a 32-bit syscall with TS_COMPAT still set.
969                  */
970                 regs->orig_ax = value;
971                 if (syscall_get_nr(child, regs) >= 0)
972                         task_thread_info(child)->status |= TS_COMPAT;
973                 break;
974
975         case offsetof(struct user32, regs.eflags):
976                 return set_flags(child, value);
977
978         case offsetof(struct user32, u_debugreg[0]) ...
979                 offsetof(struct user32, u_debugreg[7]):
980                 regno -= offsetof(struct user32, u_debugreg[0]);
981                 return ptrace_set_debugreg(child, regno / 4, value);
982
983         default:
984                 if (regno > sizeof(struct user32) || (regno & 3))
985                         return -EIO;
986
987                 /*
988                  * Other dummy fields in the virtual user structure
989                  * are ignored
990                  */
991                 break;
992         }
993         return 0;
994 }
995
996 #undef R32
997 #undef SEG32
998
999 #define R32(l,q)                                                        \
1000         case offsetof(struct user32, regs.l):                           \
1001                 *val = regs->q; break
1002
1003 #define SEG32(rs)                                                       \
1004         case offsetof(struct user32, regs.rs):                          \
1005                 *val = get_segment_reg(child,                           \
1006                                        offsetof(struct user_regs_struct, rs)); \
1007                 break
1008
1009 static int getreg32(struct task_struct *child, unsigned regno, u32 *val)
1010 {
1011         struct pt_regs *regs = task_pt_regs(child);
1012
1013         switch (regno) {
1014
1015         SEG32(ds);
1016         SEG32(es);
1017         SEG32(fs);
1018         SEG32(gs);
1019
1020         R32(cs, cs);
1021         R32(ss, ss);
1022         R32(ebx, bx);
1023         R32(ecx, cx);
1024         R32(edx, dx);
1025         R32(edi, di);
1026         R32(esi, si);
1027         R32(ebp, bp);
1028         R32(eax, ax);
1029         R32(orig_eax, orig_ax);
1030         R32(eip, ip);
1031         R32(esp, sp);
1032
1033         case offsetof(struct user32, regs.eflags):
1034                 *val = get_flags(child);
1035                 break;
1036
1037         case offsetof(struct user32, u_debugreg[0]) ...
1038                 offsetof(struct user32, u_debugreg[7]):
1039                 regno -= offsetof(struct user32, u_debugreg[0]);
1040                 *val = ptrace_get_debugreg(child, regno / 4);
1041                 break;
1042
1043         default:
1044                 if (regno > sizeof(struct user32) || (regno & 3))
1045                         return -EIO;
1046
1047                 /*
1048                  * Other dummy fields in the virtual user structure
1049                  * are ignored
1050                  */
1051                 *val = 0;
1052                 break;
1053         }
1054         return 0;
1055 }
1056
1057 #undef R32
1058 #undef SEG32
1059
1060 static int genregs32_get(struct task_struct *target,
1061                          const struct user_regset *regset,
1062                          unsigned int pos, unsigned int count,
1063                          void *kbuf, void __user *ubuf)
1064 {
1065         if (kbuf) {
1066                 compat_ulong_t *k = kbuf;
1067                 while (count >= sizeof(*k)) {
1068                         getreg32(target, pos, k++);
1069                         count -= sizeof(*k);
1070                         pos += sizeof(*k);
1071                 }
1072         } else {
1073                 compat_ulong_t __user *u = ubuf;
1074                 while (count >= sizeof(*u)) {
1075                         compat_ulong_t word;
1076                         getreg32(target, pos, &word);
1077                         if (__put_user(word, u++))
1078                                 return -EFAULT;
1079                         count -= sizeof(*u);
1080                         pos += sizeof(*u);
1081                 }
1082         }
1083
1084         return 0;
1085 }
1086
1087 static int genregs32_set(struct task_struct *target,
1088                          const struct user_regset *regset,
1089                          unsigned int pos, unsigned int count,
1090                          const void *kbuf, const void __user *ubuf)
1091 {
1092         int ret = 0;
1093         if (kbuf) {
1094                 const compat_ulong_t *k = kbuf;
1095                 while (count >= sizeof(*k) && !ret) {
1096                         ret = putreg32(target, pos, *k++);
1097                         count -= sizeof(*k);
1098                         pos += sizeof(*k);
1099                 }
1100         } else {
1101                 const compat_ulong_t __user *u = ubuf;
1102                 while (count >= sizeof(*u) && !ret) {
1103                         compat_ulong_t word;
1104                         ret = __get_user(word, u++);
1105                         if (ret)
1106                                 break;
1107                         ret = putreg32(target, pos, word);
1108                         count -= sizeof(*u);
1109                         pos += sizeof(*u);
1110                 }
1111         }
1112         return ret;
1113 }
1114
1115 long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
1116                         compat_ulong_t caddr, compat_ulong_t cdata)
1117 {
1118         unsigned long addr = caddr;
1119         unsigned long data = cdata;
1120         void __user *datap = compat_ptr(data);
1121         int ret;
1122         __u32 val;
1123
1124         switch (request) {
1125         case PTRACE_PEEKUSR:
1126                 ret = getreg32(child, addr, &val);
1127                 if (ret == 0)
1128                         ret = put_user(val, (__u32 __user *)datap);
1129                 break;
1130
1131         case PTRACE_POKEUSR:
1132                 ret = putreg32(child, addr, data);
1133                 break;
1134
1135         case PTRACE_GETREGS:    /* Get all gp regs from the child. */
1136                 return copy_regset_to_user(child, &user_x86_32_view,
1137                                            REGSET_GENERAL,
1138                                            0, sizeof(struct user_regs_struct32),
1139                                            datap);
1140
1141         case PTRACE_SETREGS:    /* Set all gp regs in the child. */
1142                 return copy_regset_from_user(child, &user_x86_32_view,
1143                                              REGSET_GENERAL, 0,
1144                                              sizeof(struct user_regs_struct32),
1145                                              datap);
1146
1147         case PTRACE_GETFPREGS:  /* Get the child FPU state. */
1148                 return copy_regset_to_user(child, &user_x86_32_view,
1149                                            REGSET_FP, 0,
1150                                            sizeof(struct user_i387_ia32_struct),
1151                                            datap);
1152
1153         case PTRACE_SETFPREGS:  /* Set the child FPU state. */
1154                 return copy_regset_from_user(
1155                         child, &user_x86_32_view, REGSET_FP,
1156                         0, sizeof(struct user_i387_ia32_struct), datap);
1157
1158         case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
1159                 return copy_regset_to_user(child, &user_x86_32_view,
1160                                            REGSET_XFP, 0,
1161                                            sizeof(struct user32_fxsr_struct),
1162                                            datap);
1163
1164         case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
1165                 return copy_regset_from_user(child, &user_x86_32_view,
1166                                              REGSET_XFP, 0,
1167                                              sizeof(struct user32_fxsr_struct),
1168                                              datap);
1169
1170         case PTRACE_GET_THREAD_AREA:
1171         case PTRACE_SET_THREAD_AREA:
1172                 return arch_ptrace(child, request, addr, data);
1173
1174         default:
1175                 return compat_ptrace_request(child, request, addr, data);
1176         }
1177
1178         return ret;
1179 }
1180
1181 #endif  /* CONFIG_IA32_EMULATION */
1182
1183 #ifdef CONFIG_X86_64
1184
1185 static struct user_regset x86_64_regsets[] __read_mostly = {
1186         [REGSET_GENERAL] = {
1187                 .core_note_type = NT_PRSTATUS,
1188                 .n = sizeof(struct user_regs_struct) / sizeof(long),
1189                 .size = sizeof(long), .align = sizeof(long),
1190                 .get = genregs_get, .set = genregs_set
1191         },
1192         [REGSET_FP] = {
1193                 .core_note_type = NT_PRFPREG,
1194                 .n = sizeof(struct user_i387_struct) / sizeof(long),
1195                 .size = sizeof(long), .align = sizeof(long),
1196                 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set
1197         },
1198         [REGSET_XSTATE] = {
1199                 .core_note_type = NT_X86_XSTATE,
1200                 .size = sizeof(u64), .align = sizeof(u64),
1201                 .active = xstateregs_active, .get = xstateregs_get,
1202                 .set = xstateregs_set
1203         },
1204         [REGSET_IOPERM64] = {
1205                 .core_note_type = NT_386_IOPERM,
1206                 .n = IO_BITMAP_LONGS,
1207                 .size = sizeof(long), .align = sizeof(long),
1208                 .active = ioperm_active, .get = ioperm_get
1209         },
1210 };
1211
1212 static const struct user_regset_view user_x86_64_view = {
1213         .name = "x86_64", .e_machine = EM_X86_64,
1214         .regsets = x86_64_regsets, .n = ARRAY_SIZE(x86_64_regsets)
1215 };
1216
1217 #else  /* CONFIG_X86_32 */
1218
1219 #define user_regs_struct32      user_regs_struct
1220 #define genregs32_get           genregs_get
1221 #define genregs32_set           genregs_set
1222
1223 #define user_i387_ia32_struct   user_i387_struct
1224 #define user32_fxsr_struct      user_fxsr_struct
1225
1226 #endif  /* CONFIG_X86_64 */
1227
1228 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1229 static struct user_regset x86_32_regsets[] __read_mostly = {
1230         [REGSET_GENERAL] = {
1231                 .core_note_type = NT_PRSTATUS,
1232                 .n = sizeof(struct user_regs_struct32) / sizeof(u32),
1233                 .size = sizeof(u32), .align = sizeof(u32),
1234                 .get = genregs32_get, .set = genregs32_set
1235         },
1236         [REGSET_FP] = {
1237                 .core_note_type = NT_PRFPREG,
1238                 .n = sizeof(struct user_i387_ia32_struct) / sizeof(u32),
1239                 .size = sizeof(u32), .align = sizeof(u32),
1240                 .active = fpregs_active, .get = fpregs_get, .set = fpregs_set
1241         },
1242         [REGSET_XFP] = {
1243                 .core_note_type = NT_PRXFPREG,
1244                 .n = sizeof(struct user32_fxsr_struct) / sizeof(u32),
1245                 .size = sizeof(u32), .align = sizeof(u32),
1246                 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set
1247         },
1248         [REGSET_XSTATE] = {
1249                 .core_note_type = NT_X86_XSTATE,
1250                 .size = sizeof(u64), .align = sizeof(u64),
1251                 .active = xstateregs_active, .get = xstateregs_get,
1252                 .set = xstateregs_set
1253         },
1254         [REGSET_TLS] = {
1255                 .core_note_type = NT_386_TLS,
1256                 .n = GDT_ENTRY_TLS_ENTRIES, .bias = GDT_ENTRY_TLS_MIN,
1257                 .size = sizeof(struct user_desc),
1258                 .align = sizeof(struct user_desc),
1259                 .active = regset_tls_active,
1260                 .get = regset_tls_get, .set = regset_tls_set
1261         },
1262         [REGSET_IOPERM32] = {
1263                 .core_note_type = NT_386_IOPERM,
1264                 .n = IO_BITMAP_BYTES / sizeof(u32),
1265                 .size = sizeof(u32), .align = sizeof(u32),
1266                 .active = ioperm_active, .get = ioperm_get
1267         },
1268 };
1269
1270 static const struct user_regset_view user_x86_32_view = {
1271         .name = "i386", .e_machine = EM_386,
1272         .regsets = x86_32_regsets, .n = ARRAY_SIZE(x86_32_regsets)
1273 };
1274 #endif
1275
1276 /*
1277  * This represents bytes 464..511 in the memory layout exported through
1278  * the REGSET_XSTATE interface.
1279  */
1280 u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
1281
1282 void update_regset_xstate_info(unsigned int size, u64 xstate_mask)
1283 {
1284 #ifdef CONFIG_X86_64
1285         x86_64_regsets[REGSET_XSTATE].n = size / sizeof(u64);
1286 #endif
1287 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1288         x86_32_regsets[REGSET_XSTATE].n = size / sizeof(u64);
1289 #endif
1290         xstate_fx_sw_bytes[USER_XSTATE_XCR0_WORD] = xstate_mask;
1291 }
1292
1293 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
1294 {
1295 #ifdef CONFIG_IA32_EMULATION
1296         if (test_tsk_thread_flag(task, TIF_IA32))
1297 #endif
1298 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
1299                 return &user_x86_32_view;
1300 #endif
1301 #ifdef CONFIG_X86_64
1302         return &user_x86_64_view;
1303 #endif
1304 }
1305
1306 static void fill_sigtrap_info(struct task_struct *tsk,
1307                                 struct pt_regs *regs,
1308                                 int error_code, int si_code,
1309                                 struct siginfo *info)
1310 {
1311         tsk->thread.trap_no = 1;
1312         tsk->thread.error_code = error_code;
1313
1314         memset(info, 0, sizeof(*info));
1315         info->si_signo = SIGTRAP;
1316         info->si_code = si_code;
1317         info->si_addr = user_mode_vm(regs) ? (void __user *)regs->ip : NULL;
1318 }
1319
1320 void user_single_step_siginfo(struct task_struct *tsk,
1321                                 struct pt_regs *regs,
1322                                 struct siginfo *info)
1323 {
1324         fill_sigtrap_info(tsk, regs, 0, TRAP_BRKPT, info);
1325 }
1326
1327 void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
1328                                          int error_code, int si_code)
1329 {
1330         struct siginfo info;
1331
1332         fill_sigtrap_info(tsk, regs, error_code, si_code, &info);
1333         /* Send us the fake SIGTRAP */
1334         force_sig_info(SIGTRAP, &info, tsk);
1335 }
1336
1337
1338 #ifdef CONFIG_X86_32
1339 # define IS_IA32        1
1340 #elif defined CONFIG_IA32_EMULATION
1341 # define IS_IA32        is_compat_task()
1342 #else
1343 # define IS_IA32        0
1344 #endif
1345
1346 /*
1347  * We must return the syscall number to actually look up in the table.
1348  * This can be -1L to skip running any syscall at all.
1349  */
1350 asmregparm long syscall_trace_enter(struct pt_regs *regs)
1351 {
1352         long ret = 0;
1353
1354         /*
1355          * If we stepped into a sysenter/syscall insn, it trapped in
1356          * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
1357          * If user-mode had set TF itself, then it's still clear from
1358          * do_debug() and we need to set it again to restore the user
1359          * state.  If we entered on the slow path, TF was already set.
1360          */
1361         if (test_thread_flag(TIF_SINGLESTEP))
1362                 regs->flags |= X86_EFLAGS_TF;
1363
1364         /* do the secure computing check first */
1365         secure_computing(regs->orig_ax);
1366
1367         if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
1368                 ret = -1L;
1369
1370         if ((ret || test_thread_flag(TIF_SYSCALL_TRACE)) &&
1371             tracehook_report_syscall_entry(regs))
1372                 ret = -1L;
1373
1374         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
1375                 trace_sys_enter(regs, regs->orig_ax);
1376
1377         if (unlikely(current->audit_context)) {
1378                 if (IS_IA32)
1379                         audit_syscall_entry(AUDIT_ARCH_I386,
1380                                             regs->orig_ax,
1381                                             regs->bx, regs->cx,
1382                                             regs->dx, regs->si);
1383 #ifdef CONFIG_X86_64
1384                 else
1385                         audit_syscall_entry(AUDIT_ARCH_X86_64,
1386                                             regs->orig_ax,
1387                                             regs->di, regs->si,
1388                                             regs->dx, regs->r10);
1389 #endif
1390         }
1391
1392         return ret ?: regs->orig_ax;
1393 }
1394
1395 asmregparm void syscall_trace_leave(struct pt_regs *regs)
1396 {
1397         bool step;
1398
1399         if (unlikely(current->audit_context))
1400                 audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
1401
1402         if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
1403                 trace_sys_exit(regs, regs->ax);
1404
1405         /*
1406          * If TIF_SYSCALL_EMU is set, we only get here because of
1407          * TIF_SINGLESTEP (i.e. this is PTRACE_SYSEMU_SINGLESTEP).
1408          * We already reported this syscall instruction in
1409          * syscall_trace_enter().
1410          */
1411         step = unlikely(test_thread_flag(TIF_SINGLESTEP)) &&
1412                         !test_thread_flag(TIF_SYSCALL_EMU);
1413         if (step || test_thread_flag(TIF_SYSCALL_TRACE))
1414                 tracehook_report_syscall_exit(regs, step);
1415 }