From patchwork Sat May 14 15:03:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 9095161 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id C3668BF29F for ; Sat, 14 May 2016 15:07:01 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A58AB2025A for ; Sat, 14 May 2016 15:07:00 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8557120251 for ; Sat, 14 May 2016 15:06:59 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1b1b7b-00065H-J6; Sat, 14 May 2016 15:04:51 +0000 Received: from mail-bn1on0060.outbound.protection.outlook.com ([157.56.110.60] helo=na01-bn1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1b1b7Y-00063n-5H for linux-arm-kernel@lists.infradead.org; Sat, 14 May 2016 15:04:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-caviumnetworks-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=6kZZYresvUn7PP2eKaqDVa54D1h6moWB0QE349dkgXo=; b=Eee8fAMuwtBJqcPoZVHjNUSZpuucebFHWXVS6xvxnxY20WiGmZ0IbP57q2XmoFTUPK9W1zQ7uszqQJKUR9/UWXmtefNeQXUKYJh1kzQcOAZXjNC7eyoCdNi9lZFZm1XJjyjMhmYvIMVtwb4K5xod08U+44NR/2fpIi0Ka4YDDRg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Received: from localhost (95.143.213.121) by DM3PR07MB2235.namprd07.prod.outlook.com (10.164.33.145) with Microsoft SMTP Server (TLS) id 15.1.492.11; Sat, 14 May 2016 15:04:24 +0000 Date: Sat, 14 May 2016 18:03:52 +0300 From: Yury Norov To: , , , Subject: Re: [PATCH 20/25] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Message-ID: <20160514150352.GA30533@yury-N73SV> References: <1459894127-17698-1-git-send-email-ynorov@caviumnetworks.com> <1459894127-17698-21-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1459894127-17698-21-git-send-email-ynorov@caviumnetworks.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: HE1PR03CA0019.eurprd03.prod.outlook.com (10.163.170.157) To DM3PR07MB2235.namprd07.prod.outlook.com (10.164.33.145) X-MS-Office365-Filtering-Correlation-Id: e844abb4-c8fd-44d0-451c-08d37c090a07 X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2235; 2:02FdjIsbq/j4T8+B1tlfJSZ73M9w7TZKgIJ5dUYnUgOyNWDXn1wU63ExqW2Sew7EuIKQeWjF2DMTAebhTC6w5rZcZaGApHw6O7qZkSmQLIYNQOgDpi/CpqLlME7LAsP6NElaMIkG2r3mIdAKjmSxf6FPJhVvdBhQEnk5mTncaGTGtIAesTReYu/zpb3TWGc2; 3:lZ99p9/XHY6loo/4H7ILKqtxsM0ORU4gsLdk+2OXVmHFcHde51NY5Rea/NhEuo2O0EPcE6VbIzOKuPMzM1q9Kvwj67svgzTS8bqDO/o1KPAb1rTQcmEh0BVkRNP/FPAn X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2235; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2235; 25:7SufJnaCALT9DDLmJjwsP3EjHMggsd9q/ABv2I9EBBZC+QzO4nanGoSxzdRXIouXFDCPvUOrY1EcPNz6VAMIOEFtzocEAmQMuUa+JVJd3kSB6rZYjezdxqa2614NbUIHWQQFaLaohKlw2+uAxJyITjuYZF617QtAQaKn5zqUosA+nBNADZjOZo6OVNu0qT15itWwc6Dv5Oz15MjkaYPJOw9j8/4+eQgqbx7FNBXN+fKYm1e2uldvP6M6BXftBReNxhuvhqc7EpciQxfKfPDY3/EvW3cyPZGA+q1T4VWPJougVI+rLcWNOH1IC9CBQBBEA/6LyByWkb3qW7EzAgYR7U8kiz+Mk9CbiG7UYogss4E3vgHTnjUp9rgZPLxzReGtGBVdK7d0SsbCH5HZoo9qUNl5yNKsMvRYE0KfBLobuO8bynIIaBVtRiAtobYSHQ08HwssJtLeqeryjGhyDlmMdRYPq5gn2qPc3hseuLT8AXMsLTB+URd/LX8GNu9NE41ZbzrlQe3XckiP6moj99zjwOEIc1B91zamjdm6atCVkG6sKQKGfZ8jtpe7ds8J5cbUmkhcj0z+tp8t89RY41+qssgvqQjqcz8AcjemjpkLWi9T2nGYAeQ4Vl2Zr8gStlsfJpxnRTdHWDGQEiyO3YyeI4KVDkPyejHuPgGiriQqVPL6CrsVD3gTpp1MoZgp2iZ3Ng17DIJFZsp6fURoNtEdyf5vGNUHQ95/iox1QAvM64Dc7z4OJb++Jik2XRAkLq89Vp1h9YXj2JLJU4+dTFTicCFnnDaOdL1G36GnxTnn7KOyvgSstnHBJnFhXBBbtha+ X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2235; 20:2/zjyxONOw6RYIuwOx0BIATc10AKE8uoqg0xOkPH7cuBhenqiN45lB1l+h2yP3w4zyS2QuHaFlrx30QZxClQ6N1D6lmzVtpjQBnlIwl2IAJaaGA+7arSVKyTeDbsPWT9daj4LfKaXwhA9G4bv5ax5R49/G8fPulrrp0tHOurqWD9LFCAjOYkMHs93eKQQL1RKoAzPBW9AwmFIllLgwc7s9URGfqfSP+fwtrOQuvcWQ+lt/MLb/ZqHZ2/RXTqVDJ4bgqdLJJMZguDswZizGA5JqaVWYOq6Df6svIAC0LGZpuiQidN/xa+Fjf3JbalNg3bf8ikVb71Qgz3J0w5yrbS+OCFCw3Mry8ovj0GIIYncSC6SLIVaQu9tOeHXs9NGbIMk9n1i2Sk0uPEzdu+6FQD05s0cLc+sdbZafy7AIv4dAt7XQgxJI71hmWHWVOUimuAXQ+d7yCysSSvryQo7AiqAFYzqIQbjdlBT297iyPMP6GycjsZ+5lxN8QPSP1ho/kA5TdUlSJGHim7V/YxuM+/2oACkwMvHWkGDWyR/g3wQzzIR0zFcr8xFU53QxFaa/tUKRyFvZOSCgfvN05vfCU3vuLDw/m9HJhTRUqpf3gsmQQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:DM3PR07MB2235; BCL:0; PCL:0; RULEID:; SRVR:DM3PR07MB2235; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2235; 4:4wzvQaP1wZzvAuZX5E/0nupTw4abXA44R7Z4Hgxn6PzCm+rMW7Kx8bB9L7zzM8dKQCPd8taw7dyhqhY3hVutoN3M+dUtjp3EvLmCoTo3LgDVTl528pKOIP1yEMshvtqcACiqjWfgART76z1buaQ2KmeLxyFQsCJK+BmRFkM6ZJMCjCIuNgl1sa2ILPzCzytoes2U9WtmiMqFostfCGhQQtUJGfQyOepqqvgE9mUFCi238hZu5mf4/t3Xh8ZtJC6MHscUZuknV57QiTVpQ6GKSDYQFsNrWonaWX0qD8T1pb5DN2k7kYspBjfKl9Bl6ZuuKfTWlygdPfebl4rIEgLLEi5la0ZldkQhzUQeAePbEvo= X-Forefront-PRVS: 094213BFEA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(189002)(199003)(97756001)(2201001)(83506001)(101416001)(33716001)(76176999)(50986999)(54356999)(97736004)(4001350100001)(5001770100001)(107886002)(92566002)(189998001)(105586002)(106356001)(68736007)(8676002)(81156014)(81166006)(9686002)(586003)(2906002)(4326007)(23726003)(6116002)(3846002)(1076002)(76506005)(42186005)(4001430100002)(2950100001)(15975445007)(77096005)(5004730100002)(5008740100001)(33656002)(66066001)(47776003)(19580395003)(19580405001)(50466002)(46406003)(2004002)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM3PR07MB2235; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: caviumnetworks.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM3PR07MB2235; 23:DO8xai0lU5dN0KygbLWoXBBxWD311S+8IQcZy/O9f?= =?us-ascii?Q?bEzO+Kz1hkrnF1cZEwR9x+dbqn1VhwERjk3GKk5IoLBXnJ/b7xKhdw92ZHIp?= =?us-ascii?Q?bhR9yesl+/ojydRXmG7DBcxCGiXurFdfjsiSFSQnmIMBirp5jmW0YORclYVC?= =?us-ascii?Q?6T1SYigNfGiRaAG6QsIfdN2Dduy3rkkgMXE9GCTAz6qXQb4cBg6QFq1OeNTw?= =?us-ascii?Q?8GiCXE4NCZeR4r3dgso2IJ7Sy+pGLnj1ZpFkbAPpDjN+hmNlqOSMU9uvWb43?= =?us-ascii?Q?s5XhlHBXMzz1nOyHo8/3HFYHqpJ+ZS6DeQN45xWaBKD725nLQyBNSOiY0UHJ?= =?us-ascii?Q?gNm0TfA4r93JP2ofLrTbl1fh1aJcXtyR4W6yQJ8CkUxsA5Q349AMBg6nhVFt?= =?us-ascii?Q?TbjDDioK0zHoK3ZGhaEdcTWpS0H0RixwGWwicCL0BGm5LmD2IWdrntb9pR33?= =?us-ascii?Q?iBFUh1p6QGMtyr2N1Z0pUOeR3alPg9bGXzOgfcqQcY1lgdvEyVDjovewmR6u?= =?us-ascii?Q?SDCGSlxg7Ec1C6A5AqqG2Ltu+HNrUS2V2UGLdv1S5RhThzTXnEamULzo3fIi?= =?us-ascii?Q?+Pzon4N/wPUx0jm+YujqeRza/OKScGnj5YmpplGtBu1d+1GE9ThvSY5C0HT/?= =?us-ascii?Q?RlV3//d3mWwPXDE4UkB8hLVvFkBh1jdjQ1n5PmQD1RbfzMrEdDiKOG4BCz+F?= =?us-ascii?Q?00EPAxzxCMpDrOBFB17jXGysr0KH2CycX5DDOex3qRNX51BTzIxo2d/NH5Io?= =?us-ascii?Q?3NNbqFMmhNz/6CToGrqYBX0/9CV5pvvMu/om1+EXXFdf9fzj0fclYN/4PTZQ?= =?us-ascii?Q?m1COAjm8NCbH8jKuPr/WIFO8HWEbkv8eL5ZRbZiB5apOpe4deYuLfD/+JGn8?= =?us-ascii?Q?nkkKpxEZbptAEjf74ERzO9pStgw0X6+/B8Q89W70l8Froegsv+9JeTpdkzGH?= =?us-ascii?Q?a851WvLIPUllQcw778ilGxl5g+LMN7j9+qxoinUwQKRYGzNkh62gvqEtQfFf?= =?us-ascii?Q?tF+jxlAiP3yxcxG4T9klwEc1316Z9TyeGTOA1Ey5v7HiAU2rFAPjWQXiZkb8?= =?us-ascii?Q?kIDECoN9ydxVE+qJBTfayJzADAW55k+/4JyMy+k0bkMHsc7guUAdLn8SEZ0Q?= =?us-ascii?Q?iNEPN9dchTO/XZajhM/Zu7qNLy8oy6dfbZxlJsTamsCFEAVkhyLUEiVozh4+?= =?us-ascii?Q?LS8K1IW4/3y9gyz3Z/A1fa3oJhE2EWb3Jms8RqTiHESaOjx2VNOuOcOHcd/W?= =?us-ascii?Q?ddHmr91svQW0CsAIFrEIwAWVbc/bo4IRfua9GPj?= X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2235; 5:dZEMHAUEXrwUmiRE5vLwxzacxXADxbpef4ABnkmRH5q49W+TV1HZfIc4Nxw/lmeNcrLGLJ5e2NJh371xw/nGKLFzeqTpPA56iAVh6WrL1C+i8JoVGx5BuQ5hKuVHljtY+sZebsyPBMLoU5YIydDRUw==; 24:1ZJd7SHvmL73zHU6cOJI6AIzviUpVdhD2lS0aBvrtaGFpSdVz531/+gv7Mu39iT/fRFOmhox2mmh5AdFK3VsdUd5AwkGhKo2BxOqsIFQnYY=; 7:6uv/OGHZ8gMlMwNhvGof6/tT1CAzkaUGLR3wqAh28x7b7Yx6/cz1IUFbWF7+vQzmdumUqP2DFeblT32GnckdBZhw9ERuL77qDR7ggQ1425txxFzj8PKzG14VTzIhAKA3OEpI4hTZBVQySOfGtjbDEl8EuyY2WkMStqvXbvfnEbAVpL1gJYmdOPX+MFj8D8xh SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2016 15:04:24.9014 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2235 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160514_080448_597449_D29DF37C X-CRM114-Status: GOOD ( 12.58 ) X-Spam-Score: -1.9 (-) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, pinskia@gmail.com, Prasun.Kapoor@caviumnetworks.com, heiko.carstens@de.ibm.com, linux-doc@vger.kernel.org, Nathan_Lynch@mentor.com, agraf@suse.de, klimov.linux@gmail.com, Andrew Pinski , broonie@kernel.org, bamvor.zhangjian@huawei.com, Andrew Pinski , schwab@suse.de, schwidefsky@de.ibm.com, joseph@codesourcery.com, christoph.muellner@theobroma-systems.com Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-5.5 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED,RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP So, after all discussions, this patch is looking like this. Changes: - assembler part reworked to be more clear, as Catalin recommended; - mmap now points to mmap2, as in 1st versions (suggested by Bamvor), and ilp32 wrapper delouses required arguments; - pread64 and pwrite64 wrappers introduced to delouse args as well; - removed unneeded #undefs; Did I miss something? diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index 2971dea..5ea18ef 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h @@ -13,9 +13,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + +#ifdef CONFIG_COMPAT +#define __ARCH_WANT_COMPAT_STAT64 +#endif + +#ifdef CONFIG_ARM64_ILP32 +#define __ARCH_WANT_COMPAT_SYS_PREADV64 +#define __ARCH_WANT_COMPAT_SYS_PWRITEV64 +#endif + #ifdef CONFIG_AARCH32_EL0 #define __ARCH_WANT_COMPAT_SYS_GETDENTS64 -#define __ARCH_WANT_COMPAT_STAT64 #define __ARCH_WANT_SYS_GETHOSTNAME #define __ARCH_WANT_SYS_PAUSE #define __ARCH_WANT_SYS_GETPGRP diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index 9dfdf86..7aa65ea 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -28,7 +28,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE arm64-obj-$(CONFIG_AARCH32_EL0) += sys32.o kuser32.o signal32.o \ sys_compat.o entry32.o \ ../../arm/kernel/opcodes.o binfmt_elf32.o -arm64-obj-$(CONFIG_ARM64_ILP32) += binfmt_ilp32.o +arm64-obj-$(CONFIG_ARM64_ILP32) += binfmt_ilp32.o sys_ilp32.o arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o arm64-obj-$(CONFIG_ARM64_MODULE_PLTS) += module-plts.o diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index cf4d1ae..0f651bc 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -500,6 +500,7 @@ el0_svc_compat: * AArch32 syscall handling */ adrp stbl, compat_sys_call_table // load compat syscall table pointer + ldr x16, [tsk, #TI_FLAGS] uxtw scno, w7 // syscall number in w7 (r7) mov sc_nr, #__NR_compat_syscalls b el0_svc_naked @@ -716,15 +717,20 @@ ENDPROC(ret_from_fork) .align 6 el0_svc: adrp stbl, sys_call_table // load syscall table pointer + ldr x16, [tsk, #TI_FLAGS] uxtw scno, w8 // syscall number in w8 mov sc_nr, #__NR_syscalls +#ifdef CONFIG_ARM64_ILP32 + adrp x17, sys_call_ilp32_table // load ilp32 syscall table pointer + tst x16, #_TIF_32BIT_AARCH64 + csel stbl, stbl, x17, eq // We are using ILP32 +#endif el0_svc_naked: // compat entry point stp x0, scno, [sp, #S_ORIG_X0] // save the original x0 and syscall number enable_dbg_and_irq ct_user_exit 1 - ldr x16, [tsk, #TI_FLAGS] // check for syscall hooks - tst x16, #_TIF_SYSCALL_WORK + tst x16, #_TIF_SYSCALL_WORK // check for syscall hooks b.ne __sys_trace cmp scno, sc_nr // check upper syscall limit b.hs ni_sys diff --git a/arch/arm64/kernel/sys_ilp32.c b/arch/arm64/kernel/sys_ilp32.c new file mode 100644 index 0000000..64db612 --- /dev/null +++ b/arch/arm64/kernel/sys_ilp32.c @@ -0,0 +1,84 @@ +/* + * AArch64- ILP32 specific system calls implementation + * + * Copyright (C) 2016 Cavium Inc. + * Author: Andrew Pinski + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define __SYSCALL_COMPAT + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Using non-compat syscalls where necessary */ +#define compat_sys_fadvise64_64 sys_fadvise64_64 +#define compat_sys_fallocate sys_fallocate +#define compat_sys_ftruncate64 sys_ftruncate +#define compat_sys_lookup_dcookie sys_lookup_dcookie +#define compat_sys_readahead sys_readahead +#define compat_sys_shmat sys_shmat +#define compat_sys_sync_file_range sys_sync_file_range +#define compat_sys_truncate64 sys_truncate +#define sys_llseek sys_lseek + +SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, + unsigned long, prot, unsigned long, flags, unsigned long, fd, + unsigned long, pgoff) +{ + if (pgoff & (~PAGE_MASK >> 12)) + return -EINVAL; + + return sys_mmap_pgoff((compat_uptr_t) addr, (compat_size_t) len, + (int) prot, (int) flags, (int) fd, + pgoff >> (PAGE_SHIFT-12)); +} + +COMPAT_SYSCALL_DEFINE4(pread64, unsigned int, fd, compat_uptr_t __user *, ubuf, + compat_size_t, count, off_t, offset) +{ + return sys_pread64(fd, (char *) ubuf, count, offset); +} + +COMPAT_SYSCALL_DEFINE4(pwrite64, unsigned int, fd, compat_uptr_t __user *, ubuf, + compat_size_t, count, off_t, offset) +{ + return sys_pwrite64(fd, (char *) ubuf, count, offset); +} + +#include + +#undef __SYSCALL +#undef __SC_WRAP + +#define __SYSCALL(nr, sym) [nr] = sym, +#define __SC_WRAP(nr, sym) [nr] = compat_##sym, + +/* + * The sys_call_ilp32_table array must be 4K aligned to be accessible from + * kernel/entry.S. + */ +void *sys_call_ilp32_table[__NR_syscalls] __aligned(4096) = { + [0 ... __NR_syscalls - 1] = sys_ni_syscall, +#include +};