xref: /aosp_15_r20/external/strace/linux/arm/shuffle_scno.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker kernel_ulong_t
shuffle_scno(kernel_ulong_t scno)2*cf84ac9aSAndroid Build Coastguard Worker shuffle_scno(kernel_ulong_t scno)
3*cf84ac9aSAndroid Build Coastguard Worker {
4*cf84ac9aSAndroid Build Coastguard Worker 	if (scno < ARM_FIRST_SHUFFLED_SYSCALL)
5*cf84ac9aSAndroid Build Coastguard Worker 		return scno;
6*cf84ac9aSAndroid Build Coastguard Worker 
7*cf84ac9aSAndroid Build Coastguard Worker 	/* __ARM_NR_cmpxchg? Swap with LAST_ORDINARY+1 */
8*cf84ac9aSAndroid Build Coastguard Worker 	if (scno == ARM_FIRST_SHUFFLED_SYSCALL)
9*cf84ac9aSAndroid Build Coastguard Worker 		return 0x000ffff0;
10*cf84ac9aSAndroid Build Coastguard Worker 	if (scno == 0x000ffff0)
11*cf84ac9aSAndroid Build Coastguard Worker 		return ARM_FIRST_SHUFFLED_SYSCALL;
12*cf84ac9aSAndroid Build Coastguard Worker 
13*cf84ac9aSAndroid Build Coastguard Worker #define ARM_SECOND_SHUFFLED_SYSCALL (ARM_FIRST_SHUFFLED_SYSCALL + 1)
14*cf84ac9aSAndroid Build Coastguard Worker 	/*
15*cf84ac9aSAndroid Build Coastguard Worker 	 * Is it ARM specific syscall?
16*cf84ac9aSAndroid Build Coastguard Worker 	 * Swap [0x000f0000, 0x000f0000 + LAST_SPECIAL] range
17*cf84ac9aSAndroid Build Coastguard Worker 	 * with [SECOND_SHUFFLED, SECOND_SHUFFLED + LAST_SPECIAL] range.
18*cf84ac9aSAndroid Build Coastguard Worker 	 */
19*cf84ac9aSAndroid Build Coastguard Worker 	if (scno >= 0x000f0000 &&
20*cf84ac9aSAndroid Build Coastguard Worker 	    scno <= 0x000f0000 + ARM_LAST_SPECIAL_SYSCALL) {
21*cf84ac9aSAndroid Build Coastguard Worker 		return scno - 0x000f0000 + ARM_SECOND_SHUFFLED_SYSCALL;
22*cf84ac9aSAndroid Build Coastguard Worker 	}
23*cf84ac9aSAndroid Build Coastguard Worker 	if (scno <= ARM_SECOND_SHUFFLED_SYSCALL + ARM_LAST_SPECIAL_SYSCALL) {
24*cf84ac9aSAndroid Build Coastguard Worker 		return scno + 0x000f0000 - ARM_SECOND_SHUFFLED_SYSCALL;
25*cf84ac9aSAndroid Build Coastguard Worker 	}
26*cf84ac9aSAndroid Build Coastguard Worker 
27*cf84ac9aSAndroid Build Coastguard Worker 	return scno;
28*cf84ac9aSAndroid Build Coastguard Worker }
29