(root)/
strace-6.5/
src/
linux/
arm/
shuffle_scno.c
       1  /*
       2   * Copyright (c) 2015-2021 The strace developers.
       3   * All rights reserved.
       4   *
       5   * SPDX-License-Identifier: LGPL-2.1-or-later
       6   */
       7  
       8  #ifdef shuffle_scno_pers_is_static
       9  static
      10  #endif
      11  kernel_ulong_t
      12  shuffle_scno_pers(kernel_ulong_t scno, int pers)
      13  {
      14  	if (scno < ARM_FIRST_SHUFFLED_SYSCALL)
      15  		return scno;
      16  
      17  	/* __ARM_NR_cmpxchg? Swap with LAST_ORDINARY+1 */
      18  	if (scno == ARM_FIRST_SHUFFLED_SYSCALL)
      19  		return 0x000ffff0;
      20  	if (scno == 0x000ffff0)
      21  		return ARM_FIRST_SHUFFLED_SYSCALL;
      22  
      23  #define ARM_SECOND_SHUFFLED_SYSCALL (ARM_FIRST_SHUFFLED_SYSCALL + 1)
      24  	/*
      25  	 * Is it ARM specific syscall?
      26  	 * Swap [0x000f0000, 0x000f0000 + LAST_SPECIAL] range
      27  	 * with [SECOND_SHUFFLED, SECOND_SHUFFLED + LAST_SPECIAL] range.
      28  	 */
      29  	if (scno >= 0x000f0000 &&
      30  	    scno <= 0x000f0000 + ARM_LAST_SPECIAL_SYSCALL) {
      31  		return scno - 0x000f0000 + ARM_SECOND_SHUFFLED_SYSCALL;
      32  	}
      33  	if (scno <= ARM_SECOND_SHUFFLED_SYSCALL + ARM_LAST_SPECIAL_SYSCALL) {
      34  		return scno + 0x000f0000 - ARM_SECOND_SHUFFLED_SYSCALL;
      35  	}
      36  
      37  	return scno;
      38  }