]> granicus.if.org Git - strace/blob - or1k_atomic.c
tests: implement ioctl_evdev-success-v.test via ioctl_evdev-success.test
[strace] / or1k_atomic.c
1 /*
2  * Copyright (c) 2013 Christian Svensson <blue@cmd.nu>
3  * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
4  * Copyright (c) 2014-2018 The strace developers.
5  * All rights reserved.
6  *
7  * SPDX-License-Identifier: LGPL-2.1-or-later
8  */
9
10 #include "defs.h"
11
12 #ifdef OR1K
13
14 # define OR1K_ATOMIC_SWAP       1
15 # define OR1K_ATOMIC_CMPXCHG    2
16 # define OR1K_ATOMIC_XCHG       3
17 # define OR1K_ATOMIC_ADD                4
18 # define OR1K_ATOMIC_DECPOS     5
19 # define OR1K_ATOMIC_AND                6
20 # define OR1K_ATOMIC_OR         7
21 # define OR1K_ATOMIC_UMAX       8
22 # define OR1K_ATOMIC_UMIN       9
23
24 # include "xlat/atomic_ops.h"
25
26 SYS_FUNC(or1k_atomic)
27 {
28         printxval64(atomic_ops, tcp->u_arg[0], "???");
29         switch (tcp->u_arg[0]) {
30         case OR1K_ATOMIC_SWAP:
31                 tprintf(", 0x%lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]);
32                 break;
33         case OR1K_ATOMIC_CMPXCHG:
34                 tprintf(", 0x%lx, %#lx, %#lx", tcp->u_arg[1], tcp->u_arg[2],
35                         tcp->u_arg[3]);
36                 break;
37
38         case OR1K_ATOMIC_XCHG:
39         case OR1K_ATOMIC_ADD:
40         case OR1K_ATOMIC_AND:
41         case OR1K_ATOMIC_OR:
42         case OR1K_ATOMIC_UMAX:
43         case OR1K_ATOMIC_UMIN:
44                 tprintf(", 0x%lx, %#lx", tcp->u_arg[1], tcp->u_arg[2]);
45                 break;
46
47         case OR1K_ATOMIC_DECPOS:
48                 tprintf(", 0x%lx", tcp->u_arg[1]);
49                 break;
50
51         default:
52                 break;
53         }
54
55         return RVAL_DECODED | RVAL_HEX;
56 }
57
58 #endif /* OR1K */