]>
Commit | Line | Data |
---|---|---|
08bede39 JB |
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 | } |