| kernel_ulong_t |
| shuffle_scno(kernel_ulong_t scno) |
| { |
| if (scno < ARM_FIRST_SHUFFLED_SYSCALL) |
| return scno; |
| |
| /* __ARM_NR_cmpxchg? Swap with LAST_ORDINARY+1 */ |
| if (scno == ARM_FIRST_SHUFFLED_SYSCALL) |
| return 0x000ffff0; |
| if (scno == 0x000ffff0) |
| return ARM_FIRST_SHUFFLED_SYSCALL; |
| |
| #define ARM_SECOND_SHUFFLED_SYSCALL (ARM_FIRST_SHUFFLED_SYSCALL + 1) |
| /* |
| * Is it ARM specific syscall? |
| * Swap [0x000f0000, 0x000f0000 + LAST_SPECIAL] range |
| * with [SECOND_SHUFFLED, SECOND_SHUFFLED + LAST_SPECIAL] range. |
| */ |
| if (scno >= 0x000f0000 && |
| scno <= 0x000f0000 + ARM_LAST_SPECIAL_SYSCALL) { |
| return scno - 0x000f0000 + ARM_SECOND_SHUFFLED_SYSCALL; |
| } |
| if (scno <= ARM_SECOND_SHUFFLED_SYSCALL + ARM_LAST_SPECIAL_SYSCALL) { |
| return scno + 0x000f0000 - ARM_SECOND_SHUFFLED_SYSCALL; |
| } |
| |
| return scno; |
| } |