1 /*
2 * Check decoding of semtimedop ipc call.
3 *
4 * Copyright (c) 2020-2021 The strace developers.
5 * All rights reserved.
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10 #include "tests.h"
11 #include "scno.h"
12
13 #if defined __NR_ipc && !defined __ARM_EABI__
14
15 # define SYSCALL_NAME "semtimedop"
16
17 # if SIZEOF_LONG > 4
18 # define semtimedop_timespec_t kernel_timespec64_t
19 # else
20 # define semtimedop_timespec_t kernel_timespec32_t
21 # endif
22
23 # include "semtimedop-common.c"
24
25 # define XLAT_MACROS_ONLY
26 # include "xlat/ipccalls.h"
27 # undef XLAT_MACROS_ONLY
28
29 static long
30 k_semtimedop_imp(const kernel_ulong_t semid,
31 const kernel_ulong_t sops,
32 const kernel_ulong_t nsops,
33 const kernel_ulong_t timeout)
34 {
35 static const kernel_ulong_t bad =
36 (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
37 static const kernel_ulong_t call =
38 (kernel_ulong_t) 0xdefaced00000000ULL | SEMTIMEDOP;
39 # if defined __s390x__ || defined __s390__
40 return syscall(__NR_ipc, call, semid, nsops, timeout, sops, bad);
41 # else
42 return syscall(__NR_ipc, call, semid, nsops, bad, sops, timeout);
43 # endif
44 }
45
46 #else
47
48 SKIP_MAIN_UNDEFINED("__NR_ipc && !__ARM_EABI__")
49
50 #endif