]> git.pld-linux.org Git - packages/strace.git/blob - strace-semop.patch
739d2064765621717bcf71940dd62eb6861d58f1
[packages/strace.git] / strace-semop.patch
1 --- strace-4.5.18/ipc.c.orig    2007-01-15 21:25:52.000000000 +0100
2 +++ strace-4.5.18/ipc.c 2009-09-30 17:48:38.080610937 +0200
3 @@ -152,6 +152,12 @@
4         { 0,            NULL            },
5  };
6  
7 +static const struct xlat semop_flags[] = {
8 +       { SEM_UNDO,     "SEM_UNDO"      },
9 +       { IPC_NOWAIT,   "IPC_NOWAIT"    },
10 +       { 0,            NULL            },
11 +};
12 +
13  int sys_msgget(tcp)
14  struct tcb *tcp;
15  {
16 @@ -273,14 +279,34 @@
17  int sys_semop(tcp)
18  struct tcb *tcp;
19  {
20 +       int i;
21 +
22         if (entering(tcp)) {
23                 tprintf("%lu", tcp->u_arg[0]);
24                 if (indirect_ipccall(tcp)) {
25 -                       tprintf(", %#lx", tcp->u_arg[3]);
26 -                       tprintf(", %lu", tcp->u_arg[1]);
27 +                       tprintf(", %#lx {", tcp->u_arg[3]);
28 +                       for(i = 0; i < tcp->u_arg[1]; i++) {
29 +                               struct sembuf sb;
30 +                               umove(tcp, tcp->u_arg[3]+i*sizeof(struct sembuf), &sb);
31 +                               if(i != 0)
32 +                                       tprintf(", ");
33 +                               tprintf("{%u, %d, ", sb.sem_num, sb.sem_op);
34 +                               printflags(semop_flags, sb.sem_flg, "SEM_???");
35 +                               tprintf("}");
36 +                       }
37 +                       tprintf("}, %lu", tcp->u_arg[1]);
38                 } else {
39 -                       tprintf(", %#lx", tcp->u_arg[1]);
40 -                       tprintf(", %lu", tcp->u_arg[2]);
41 +                       tprintf(", %#lx {", tcp->u_arg[1]);
42 +                       for(i = 0; i < tcp->u_arg[2]; i++) {
43 +                               struct sembuf sb;
44 +                               umove(tcp, tcp->u_arg[1]+i*sizeof(struct sembuf), &sb);
45 +                               if(i != 0)
46 +                                       tprintf(", ");
47 +                               tprintf("{%u, %d, ", sb.sem_num, sb.sem_op);
48 +                               printflags(semop_flags, sb.sem_flg, "SEM_???");
49 +                               tprintf("}");
50 +                       }
51 +                       tprintf("}, %lu", tcp->u_arg[2]);
52                 }
53         }
54         return 0;
55 @@ -290,15 +316,35 @@
56  int sys_semtimedop(tcp)
57  struct tcb *tcp;
58  {
59 +       int i;
60 +
61         if (entering(tcp)) {
62                 tprintf("%lu", tcp->u_arg[0]);
63                 if (indirect_ipccall(tcp)) {
64 -                       tprintf(", %#lx", tcp->u_arg[3]);
65 -                       tprintf(", %lu, ", tcp->u_arg[1]);
66 +                       tprintf(", %#lx {", tcp->u_arg[3]);
67 +                       for(i = 0; i < tcp->u_arg[1]; i++) {
68 +                               struct sembuf sb;
69 +                               umove(tcp, tcp->u_arg[3]+i*sizeof(struct sembuf), &sb);
70 +                               if(i != 0)
71 +                                       tprintf(", ");
72 +                               tprintf("{%u, %d, ", sb.sem_num, sb.sem_op);
73 +                               printflags(semop_flags, sb.sem_flg, "SEM_???");
74 +                               tprintf("}");
75 +                       }
76 +                       tprintf("}, %lu, ", tcp->u_arg[1]);
77                         printtv(tcp, tcp->u_arg[5]);
78                 } else {
79 -                       tprintf(", %#lx", tcp->u_arg[1]);
80 -                       tprintf(", %lu, ", tcp->u_arg[2]);
81 +                       tprintf(", %#lx {", tcp->u_arg[1]);
82 +                       for(i = 0; i < tcp->u_arg[2]; i++) {
83 +                               struct sembuf sb;
84 +                               umove(tcp, tcp->u_arg[1]+i*sizeof(struct sembuf), &sb);
85 +                               if(i != 0)
86 +                                       tprintf(", ");
87 +                               tprintf("{%u, %d, ", sb.sem_num, sb.sem_op);
88 +                               printflags(semop_flags, sb.sem_flg, "SEM_???");
89 +                               tprintf("}");
90 +                       }
91 +                       tprintf("}, %lu, ", tcp->u_arg[2]);
92                         printtv(tcp, tcp->u_arg[3]);
93                 }
94         }
This page took 0.061513 seconds and 2 git commands to generate.