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 23#include <asm/assembler.h> 24#include <asm/asm-offsets.h> 25 26/* 27 * System call wrappers for the AArch32 compatibility layer. 28 */ 29 30compat_sys_sigreturn_wrapper: 31 mov x0, sp 32 mov x27, #0 // prevent syscall restart handling (why) 33 b compat_sys_sigreturn 34ENDPROC(compat_sys_sigreturn_wrapper) 35 36compat_sys_rt_sigreturn_wrapper: 37 mov x0, sp 38 mov x27, #0 // prevent syscall restart handling (why) 39 b compat_sys_rt_sigreturn 40ENDPROC(compat_sys_rt_sigreturn_wrapper) 41 42compat_sys_statfs64_wrapper: 43 mov w3, #84 44 cmp w1, #88 45 csel w1, w3, w1, eq 46 b compat_sys_statfs64 47ENDPROC(compat_sys_statfs64_wrapper) 48 49compat_sys_fstatfs64_wrapper: 50 mov w3, #84 51 cmp w1, #88 52 csel w1, w3, w1, eq 53 b compat_sys_fstatfs64 54ENDPROC(compat_sys_fstatfs64_wrapper) 55 56/* 57 * Wrappers for AArch32 syscalls that either take 64-bit parameters 58 * in registers or that take 32-bit parameters which require sign 59 * extension. 60 */ 61compat_sys_pread64_wrapper: 62 regs_to_64 x3, x4, x5 63 b sys_pread64 64ENDPROC(compat_sys_pread64_wrapper) 65 66compat_sys_pwrite64_wrapper: 67 regs_to_64 x3, x4, x5 68 b sys_pwrite64 69ENDPROC(compat_sys_pwrite64_wrapper) 70 71compat_sys_truncate64_wrapper: 72 regs_to_64 x1, x2, x3 73 b sys_truncate 74ENDPROC(compat_sys_truncate64_wrapper) 75 76compat_sys_ftruncate64_wrapper: 77 regs_to_64 x1, x2, x3 78 b sys_ftruncate 79ENDPROC(compat_sys_ftruncate64_wrapper) 80 81compat_sys_readahead_wrapper: 82 regs_to_64 x1, x2, x3 83 mov w2, w4 84 b sys_readahead 85ENDPROC(compat_sys_readahead_wrapper) 86 87compat_sys_fadvise64_64_wrapper: 88 mov w6, w1 89 regs_to_64 x1, x2, x3 90 regs_to_64 x2, x4, x5 91 mov w3, w6 92 b sys_fadvise64_64 93ENDPROC(compat_sys_fadvise64_64_wrapper) 94 95compat_sys_sync_file_range2_wrapper: 96 regs_to_64 x2, x2, x3 97 regs_to_64 x3, x4, x5 98 b sys_sync_file_range2 99ENDPROC(compat_sys_sync_file_range2_wrapper) 100 101compat_sys_fallocate_wrapper: 102 regs_to_64 x2, x2, x3 103 regs_to_64 x3, x4, x5 104 b sys_fallocate 105ENDPROC(compat_sys_fallocate_wrapper) 106 107#undef __SYSCALL 108#define __SYSCALL(x, y) .quad y // x 109 110/* 111 * The system calls table must be 4KB aligned. 112 */ 113 .align 12 114ENTRY(compat_sys_call_table) 115#include <asm/unistd32.h> 116