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