216
216
#ifdef PR_SET_KEEPCAPS
217
217
{ PR_SET_KEEPCAPS, "PR_SET_KEEP_CAPS" },
220
{ PR_GET_FPEMU, "PR_GET_FPEMU" },
223
{ PR_SET_FPEMU, "PR_SET_FPEMU" },
226
{ PR_GET_FPEXC, "PR_GET_FPEXC" },
229
{ PR_SET_FPEXC, "PR_SET_FPEXC" },
232
{ PR_GET_TIMING, "PR_GET_TIMING" },
235
{ PR_SET_TIMING, "PR_SET_TIMING" },
238
{ PR_SET_NAME, "PR_SET_NAME" },
241
{ PR_GET_NAME, "PR_GET_NAME" },
244
{ PR_GET_ENDIAN, "PR_GET_ENDIAN" },
247
{ PR_SET_ENDIAN, "PR_SET_ENDIAN" },
249
#ifdef PR_GET_SECCOMP
250
{ PR_GET_SECCOMP, "PR_GET_SECCOMP" },
252
#ifdef PR_SET_SECCOMP
253
{ PR_SET_SECCOMP, "PR_SET_SECCOMP" },
1677
1712
struct tcb *tcp;
1718
char data[sizeof(long)];
1682
int max = max_strlen / 2;
1684
for (sep = ""; --max >= 0; sep = ", ") {
1687
if (umove(tcp, addr, &cp) < 0) {
1724
for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
1725
if (umoven(tcp, addr, personality_wordsize[current_personality],
1688
1727
tprintf("%#lx", addr);
1730
if (personality_wordsize[current_personality] == 4)
1694
printstr(tcp, (long) cp, -1);
1695
addr += sizeof(char *);
1735
printstr(tcp, cp.p64, -1);
1736
addr += personality_wordsize[current_personality];
1739
tprintf("%s...", sep);
3067
3194
#endif /* !SVR4 */
3197
# ifndef FUTEX_CMP_REQUEUE
3198
# define FUTEX_CMP_REQUEUE 4
3200
# ifndef FUTEX_WAKE_OP
3201
# define FUTEX_WAKE_OP 5
3203
# ifndef FUTEX_LOCK_PI
3204
# define FUTEX_LOCK_PI 6
3205
# define FUTEX_UNLOCK_PI 7
3206
# define FUTEX_TRYLOCK_PI 8
3208
# ifndef FUTEX_WAIT_BITSET
3209
# define FUTEX_WAIT_BITSET 9
3211
# ifndef FUTEX_WAKE_BITSET
3212
# define FUTEX_WAKE_BITSET 10
3214
# ifndef FUTEX_PRIVATE_FLAG
3215
# define FUTEX_PRIVATE_FLAG 128
3070
3217
static const struct xlat futexops[] = {
3071
{ FUTEX_WAIT, "FUTEX_WAIT" },
3072
{ FUTEX_WAKE, "FUTEX_WAKE" },
3073
{ FUTEX_FD, "FUTEX_FD" },
3074
{ FUTEX_REQUEUE,"FUTEX_REQUEUE" },
3218
{ FUTEX_WAIT, "FUTEX_WAIT" },
3219
{ FUTEX_WAKE, "FUTEX_WAKE" },
3220
{ FUTEX_FD, "FUTEX_FD" },
3221
{ FUTEX_REQUEUE, "FUTEX_REQUEUE" },
3222
{ FUTEX_CMP_REQUEUE, "FUTEX_CMP_REQUEUE" },
3223
{ FUTEX_WAKE_OP, "FUTEX_WAKE_OP" },
3224
{ FUTEX_LOCK_PI, "FUTEX_LOCK_PI" },
3225
{ FUTEX_UNLOCK_PI, "FUTEX_UNLOCK_PI" },
3226
{ FUTEX_TRYLOCK_PI, "FUTEX_TRYLOCK_PI" },
3227
{ FUTEX_WAIT_BITSET, "FUTEX_WAIT_BITSET" },
3228
{ FUTEX_WAKE_BITSET, "FUTEX_WAKE_BITSET" },
3229
{ FUTEX_WAIT|FUTEX_PRIVATE_FLAG, "FUTEX_WAIT_PRIVATE" },
3230
{ FUTEX_WAKE|FUTEX_PRIVATE_FLAG, "FUTEX_WAKE_PRIVATE" },
3231
{ FUTEX_FD|FUTEX_PRIVATE_FLAG, "FUTEX_FD_PRIVATE" },
3232
{ FUTEX_REQUEUE|FUTEX_PRIVATE_FLAG, "FUTEX_REQUEUE_PRIVATE" },
3233
{ FUTEX_CMP_REQUEUE|FUTEX_PRIVATE_FLAG, "FUTEX_CMP_REQUEUE_PRIVATE" },
3234
{ FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG, "FUTEX_WAKE_OP_PRIVATE" },
3235
{ FUTEX_LOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_LOCK_PI_PRIVATE" },
3236
{ FUTEX_UNLOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_UNLOCK_PI_PRIVATE" },
3237
{ FUTEX_TRYLOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_TRYLOCK_PI_PRIVATE" },
3238
{ FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG, "FUTEX_WAIT_BITSET_PRIVATE" },
3239
{ FUTEX_WAKE_BITSET|FUTEX_PRIVATE_FLAG, "FUTEX_WAKE_BITSET_PRIVATE" },
3242
#ifndef FUTEX_OP_SET
3243
# define FUTEX_OP_SET 0
3244
# define FUTEX_OP_ADD 1
3245
# define FUTEX_OP_OR 2
3246
# define FUTEX_OP_ANDN 3
3247
# define FUTEX_OP_XOR 4
3248
# define FUTEX_OP_CMP_EQ 0
3249
# define FUTEX_OP_CMP_NE 1
3250
# define FUTEX_OP_CMP_LT 2
3251
# define FUTEX_OP_CMP_LE 3
3252
# define FUTEX_OP_CMP_GT 4
3253
# define FUTEX_OP_CMP_GE 5
3255
static const struct xlat futexwakeops[] = {
3256
{ FUTEX_OP_SET, "FUTEX_OP_SET" },
3257
{ FUTEX_OP_ADD, "FUTEX_OP_ADD" },
3258
{ FUTEX_OP_OR, "FUTEX_OP_OR" },
3259
{ FUTEX_OP_ANDN, "FUTEX_OP_ANDN" },
3260
{ FUTEX_OP_XOR, "FUTEX_OP_XOR" },
3263
static const struct xlat futexwakecmps[] = {
3264
{ FUTEX_OP_CMP_EQ, "FUTEX_OP_CMP_EQ" },
3265
{ FUTEX_OP_CMP_NE, "FUTEX_OP_CMP_NE" },
3266
{ FUTEX_OP_CMP_LT, "FUTEX_OP_CMP_LT" },
3267
{ FUTEX_OP_CMP_LE, "FUTEX_OP_CMP_LE" },
3268
{ FUTEX_OP_CMP_GT, "FUTEX_OP_CMP_GT" },
3269
{ FUTEX_OP_CMP_GE, "FUTEX_OP_CMP_GE" },
3080
3275
struct tcb *tcp;
3082
3277
if (entering(tcp)) {
3278
long int cmd = tcp->u_arg[1] & 127;
3083
3279
tprintf("%p, ", (void *) tcp->u_arg[0]);
3084
3280
printxval(futexops, tcp->u_arg[1], "FUTEX_???");
3085
3281
tprintf(", %ld", tcp->u_arg[2]);
3086
if (tcp->u_arg[1] == FUTEX_WAIT) {
3088
printtv(tcp, tcp->u_arg[3]);
3089
} else if (tcp->u_arg[1] == FUTEX_REQUEUE)
3282
if (cmd == FUTEX_WAKE_BITSET)
3283
tprintf(", %lx", tcp->u_arg[5]);
3284
else if (cmd == FUTEX_WAIT) {
3286
printtv(tcp, tcp->u_arg[3]);
3287
} else if (cmd == FUTEX_WAIT_BITSET) {
3289
printtv(tcp, tcp->u_arg[3]);
3290
tprintf(", %lx", tcp->u_arg[5]);
3291
} else if (cmd == FUTEX_REQUEUE)
3090
3292
tprintf(", %ld, %p", tcp->u_arg[3], (void *) tcp->u_arg[4]);
3293
else if (cmd == FUTEX_CMP_REQUEUE)
3294
tprintf(", %ld, %p, %ld", tcp->u_arg[3], (void *) tcp->u_arg[4], tcp->u_arg[5]);
3295
else if (cmd == FUTEX_WAKE_OP) {
3296
tprintf(", %ld, %p, {", tcp->u_arg[3], (void *) tcp->u_arg[4]);
3297
if ((tcp->u_arg[5] >> 28) & 8)
3298
tprintf("FUTEX_OP_OPARG_SHIFT|");
3299
printxval(futexwakeops, (tcp->u_arg[5] >> 28) & 0x7, "FUTEX_OP_???");
3300
tprintf(", %ld, ", (tcp->u_arg[5] >> 12) & 0xfff);
3301
if ((tcp->u_arg[5] >> 24) & 8)
3302
tprintf("FUTEX_OP_OPARG_SHIFT|");
3303
printxval(futexwakecmps, (tcp->u_arg[5] >> 24) & 0x7, "FUTEX_OP_CMP_???");
3304
tprintf(", %ld}", tcp->u_arg[5] & 0xfff);