linux/arch/arm64/kernel/entry32.S
<<
>>
Prefs
   1/*
   2 * Compat system call wrappers
   3 *
   4 * Copyright (C) 2012 ARM Ltd.
   5 * Authors: Will Deacon <will.deacon@arm.com>
   6 *          Catalin Marinas <catalin.marinas@arm.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19 */
  20
  21#include <linux/linkage.h>
  22#include <linux/const.h>
  23
  24#include <asm/assembler.h>
  25#include <asm/asm-offsets.h>
  26#include <asm/errno.h>
  27#include <asm/page.h>
  28
  29/*
  30 * System call wrappers for the AArch32 compatibility layer.
  31 */
  32
  33ENTRY(compat_sys_sigreturn_wrapper)
  34        mov     x0, sp
  35        b       compat_sys_sigreturn
  36ENDPROC(compat_sys_sigreturn_wrapper)
  37
  38ENTRY(compat_sys_rt_sigreturn_wrapper)
  39        mov     x0, sp
  40        b       compat_sys_rt_sigreturn
  41ENDPROC(compat_sys_rt_sigreturn_wrapper)
  42
  43ENTRY(compat_sys_statfs64_wrapper)
  44        mov     w3, #84
  45        cmp     w1, #88
  46        csel    w1, w3, w1, eq
  47        b       compat_sys_statfs64
  48ENDPROC(compat_sys_statfs64_wrapper)
  49
  50ENTRY(compat_sys_fstatfs64_wrapper)
  51        mov     w3, #84
  52        cmp     w1, #88
  53        csel    w1, w3, w1, eq
  54        b       compat_sys_fstatfs64
  55ENDPROC(compat_sys_fstatfs64_wrapper)
  56
  57/*
  58 * Note: off_4k (w5) is always in units of 4K. If we can't do the
  59 * requested offset because it is not page-aligned, we return -EINVAL.
  60 */
  61ENTRY(compat_sys_mmap2_wrapper)
  62#if PAGE_SHIFT > 12
  63        tst     w5, #~PAGE_MASK >> 12
  64        b.ne    1f
  65        lsr     w5, w5, #PAGE_SHIFT - 12
  66#endif
  67        b       sys_mmap_pgoff
  681:      mov     x0, #-EINVAL
  69        ret
  70ENDPROC(compat_sys_mmap2_wrapper)
  71
  72/*
  73 * Wrappers for AArch32 syscalls that either take 64-bit parameters
  74 * in registers or that take 32-bit parameters which require sign
  75 * extension.
  76 */
  77ENTRY(compat_sys_pread64_wrapper)
  78        regs_to_64      x3, x4, x5
  79        b       sys_pread64
  80ENDPROC(compat_sys_pread64_wrapper)
  81
  82ENTRY(compat_sys_pwrite64_wrapper)
  83        regs_to_64      x3, x4, x5
  84        b       sys_pwrite64
  85ENDPROC(compat_sys_pwrite64_wrapper)
  86
  87ENTRY(compat_sys_truncate64_wrapper)
  88        regs_to_64      x1, x2, x3
  89        b       sys_truncate
  90ENDPROC(compat_sys_truncate64_wrapper)
  91
  92ENTRY(compat_sys_ftruncate64_wrapper)
  93        regs_to_64      x1, x2, x3
  94        b       sys_ftruncate
  95ENDPROC(compat_sys_ftruncate64_wrapper)
  96
  97ENTRY(compat_sys_readahead_wrapper)
  98        regs_to_64      x1, x2, x3
  99        mov     w2, w4
 100        b       sys_readahead
 101ENDPROC(compat_sys_readahead_wrapper)
 102
 103ENTRY(compat_sys_fadvise64_64_wrapper)
 104        mov     w6, w1
 105        regs_to_64      x1, x2, x3
 106        regs_to_64      x2, x4, x5
 107        mov     w3, w6
 108        b       sys_fadvise64_64
 109ENDPROC(compat_sys_fadvise64_64_wrapper)
 110
 111ENTRY(compat_sys_sync_file_range2_wrapper)
 112        regs_to_64      x2, x2, x3
 113        regs_to_64      x3, x4, x5
 114        b       sys_sync_file_range2
 115ENDPROC(compat_sys_sync_file_range2_wrapper)
 116
 117ENTRY(compat_sys_fallocate_wrapper)
 118        regs_to_64      x2, x2, x3
 119        regs_to_64      x3, x4, x5
 120        b       sys_fallocate
 121ENDPROC(compat_sys_fallocate_wrapper)
 122