From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Tautschnig, Michael" Subject: Re: [PATCH] Syscall arguments are unsigned long (full registers) Date: Mon, 4 Jul 2016 20:13:21 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT Return-path: In-Reply-To: Content-Language: en-US Content-ID: Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: "H. Peter Anvin" Cc: "x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org" , "linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Thomas Gleixner , Ingo Molnar , Jaswinder Singh , Andi Kleen List-Id: linux-api@vger.kernel.org > On 4 Jul 2016, at 20:27, H. Peter Anvin wrote: > > On July 4, 2016 6:52:58 AM PDT, "Tautschnig, Michael" wrote: >> All syscall arguments are passed in as types of the same byte size as >> unsigned long (width of full registers). Using a smaller type without a >> cast may result in losing bits of information. In all other instances >> apart from the ones fixed by the patch the code explicitly introduces >> type casts (using, e.g., SYSCALL_DEFINE1). >> >> While goto-cc reported these problems at build time, it is noteworthy >> that the calling conventions specified in the System V AMD64 ABI do >> ensure that parameters 1-6 are passed via registers, thus there is no >> implied risk of misaligned stack access. >> >> [...] > > Wrong. Syscall arguments aren't necessarily full registers, and on x86 truncation is already done by the callee, so we don't need any special handing. Some other architectures have other constraints. Ok - I'm assuming I have thus misunderstood eb974c62565072e10c1422eb3205f5b611dd99a1 ? Supposedly all those SYSCALL_DEFINEx are required for other architectures only? Best, Michael