(root)/
strace-6.5/
src/
or1k_atomic.c
       1  /*
       2   * Copyright (c) 2013 Christian Svensson <blue@cmd.nu>
       3   * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
       4   * Copyright (c) 2014-2021 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  	/* type */
      29  	printxval64(atomic_ops, tcp->u_arg[0], "???");
      30  
      31  	switch (tcp->u_arg[0]) {
      32  	case OR1K_ATOMIC_DECPOS:
      33  		tprint_arg_next();
      34  		PRINT_VAL_X(tcp->u_arg[1]);
      35  		break;
      36  
      37  	case OR1K_ATOMIC_SWAP:
      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  		tprint_arg_next();
      45  		PRINT_VAL_X(tcp->u_arg[1]);
      46  		tprint_arg_next();
      47  		PRINT_VAL_X(tcp->u_arg[2]);
      48  		break;
      49  
      50  	case OR1K_ATOMIC_CMPXCHG:
      51  		tprint_arg_next();
      52  		PRINT_VAL_X(tcp->u_arg[1]);
      53  		tprint_arg_next();
      54  		PRINT_VAL_X(tcp->u_arg[2]);
      55  		tprint_arg_next();
      56  		PRINT_VAL_X(tcp->u_arg[3]);
      57  		break;
      58  
      59  	default:
      60  		break;
      61  	}
      62  
      63  	return RVAL_DECODED | RVAL_HEX;
      64  }
      65  
      66  #endif /* OR1K */