From patchwork Tue Jun 28 16:39:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 13440 Received: (qmail 32749 invoked by alias); 28 Jun 2016 16:43:00 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 32672 invoked by uid 89); 28 Jun 2016 16:43:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=loff_t X-HELO: na01-bl2-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; From: Yury Norov To: , CC: , , , , , , , , , , , , , , , , Yury Norov , Yury Norov Subject: [PATCH 17/23] [AARCH64] ILP32: introduce syscalls that pass off_t Date: Tue, 28 Jun 2016 19:39:32 +0300 Message-ID: <1467131978-669-18-git-send-email-ynorov@caviumnetworks.com> In-Reply-To: <1467131978-669-1-git-send-email-ynorov@caviumnetworks.com> References: <1467131978-669-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 X-ClientProxiedBy: AM5PR0901CA0042.eurprd09.prod.outlook.com (10.164.186.180) To CY1PR07MB2247.namprd07.prod.outlook.com (10.164.112.149) X-MS-Office365-Filtering-Correlation-Id: 5d60958a-57b6-4f06-4dcd-08d39f733ab2 X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2247; 2:Tmry6BXGPyTCCQpn0560AS+BhDmuRLAGqS2FsYdEJl6pSBW4FMqL9gF+QDpr0aJpylXivWja4bKoCmITumPEGoTY4/ymqatqesLUWeJiZ+sejkMROjEMl12Ij4RwjLRijXhcI6IDNJyt1DMNQkCVNbs/28sTd33EUJTzO6R6/XT08xWeyL3x/TntHDxgR1hu; 3:woTdyOXEUTtcZxuf7C9GZHZaLLwNmBgYj2eo6gqV3Fz/DxYl+YZ2AnWS37zH8kG8FH0g3xIuGimVTeAseyt79ioHtGgCcCv3PpSaaWO1I9DKKipC1n46q2WKgniDKxUm X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2247; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2247; 25:+JnnsKKEcXPMq9GThgMwvsi0dIo11tpdM/pYpacoIpOb55dsOMRtIxdQYRhm6AEFHyc1BVLRui/5mQesP2lX7e9T/96Bmtz8hhI5ZnAW5ySUNyI1yP2bgVUP6RopSq6ndI6nxoXHpOwrQEKTtpg+bo/IGVGsGIPuV1dH6KiUaLNBQ0ifnBQ+gLjMN+ybizPFLPIEDfyYPI0VdfHctlMotZsAsI1vQ1Cz+5MFtg2QSsdqzQIFsNxnwHZwrFDEmJAN4Hi/rp+8xneGUYYAlMz7+l25b9MqC5iXclphC2UDXzT0Fbi6yMO7NW1wVZVQ+x9cfewHkXGfLiciCjESob6lo3Zm8RE52ZoCaNkVUoo+8/whLOBAT32wiw4XqEBdVDKkdMPrvHOhD+paOZPpoBUSaWwdoq3U8gL51KRmTYDEZLIWv540tqW1CqAGfULKveql0GeZmRa8SL0I8/nRxFMoMOZGJZZ2lUhJkZ7db4mwv56cK7h0pVaIVDtynqZoUbsaPr694+/WWSGp1vKzLY82XHI34asjFC/4lgyBxg+wmIh5T6h7kCyxkscDuI8sYaU6TUB22XJaIcyIDvFxZB2LLzy28PRFHoxQID+Rxf3FuKQvKAtwoXlmTUVGupK/8CntU/D86GUV/Y5RQUJ1HOCe/SXrAEeRWwSbFZw0v7VGxk1JahmVs1FT7YD+V5oTWU2q3AR9xyqIjOiRjAKrat8ZJtAC3N3R3VTtHhF+aA6Nq2/1TeN/6CttDE1dljYklqNlNXV6+0JDuIcTpZFB5IBErxDQlesgYDrAmjh4AzgkUXOMO2H5MRDDIJ1Ar/0++JczkbAYMUJe6/wEb6zRVSos8Q== X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2247; 20:B4XIpHNEGeg6p/oCwG+aj+y0/yShhMPAoozgXKRPfEF9AE7FGFrkVOfwF9lZhah6B2WAIJF/uHWyTY10/NbJ1wbl0rNEJYzDTjVWWbNr78hm4dcD5TIoDg/LrJJLjJp5fXqQCHbNNslGaBSd8RGeSGpIM0QEyw/CHuowolZjK0oJCfVmWGb6qKZNfLEfU5IDaoAYtkTSClE1gKN5YDu4+unGWCqsVvv1wTd7pFygk1MCSAXtRjjeV9AuKpFvuKuEWbZJEECVEpi6RAAI9j9abwfGUzSDOV35zcGp6pw7u1MFtOX7eEneV8vD7rMBpZs3PNDDJLFWtkv6GhAdGebNkcQbm60pBErNUzUvWmc3rzsTJWIJkqge38VOIHPWO/TANSNSxNd97l2EvbKVSWw86/3i43F4r6mj8R8RhZsZKi5UvoRYuEyjV8YjpWHc99EyKfkQubMNRKvz4ytWbcdS5WD8qC05J60p0a+U7m/IX7Xtt2+C1VYUKbBtD8zEDubBTrsB1UcJfRtvS1qa/yKrlLUfsAQNGp34u1zs3GoIAOIQRPTT0JeSUn7E4coIoy0SFxW8qAiz6BhKR2hCj/0lKzdfCcbrbTO1D9PKUnjoddI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(22074186197030); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:CY1PR07MB2247; BCL:0; PCL:0; RULEID:; SRVR:CY1PR07MB2247; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2247; 4:THQCvg3I/NFSE4vksyjDDDinKr6tmgov/vayoaO+XV+ruCL4c2XiA+B5o/wL6zhXMZDufaYQn5rWmPxmQj6pIzlWs5jG+ZVi1cVN9m7DInyP+VrMEVFoMRFPC3vMjcroaWwg86Fj9D2bpnE9ROH142CoFPvEc2VjfoUbzbH1Jv0ZR3GiPTF0CkCz0Imlk2nAdmyvDj31CcYYjg/XapDWKCJW6E6TSd7gCSwwPosdmNSjDFWe3nXhcslJHu92fSq4xbihGDIZ7GUL/3xhA/dEtzaM4ewzLvLZLNiz4MvBkGugQIKbiPmSiByThfHxzt74ftntpWHRfamnyIrJ/aDXjUbAggllcyAZgrDen3I/xyF+Y+GlUgj9MQ5yKt1de44hSXe3tcGgPTTw6iLFSdwd0Mc5CjfbZWxbGsDTud+tugu5o1ofWTMkLa3J6pFm8Ia/ X-Forefront-PRVS: 0987ACA2E2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(7736002)(50466002)(6116002)(3846002)(586003)(50226002)(2950100001)(68736007)(189998001)(7846002)(15975445007)(33646002)(2906002)(48376002)(305945005)(8676002)(76176999)(50986999)(77096005)(107886002)(5001770100001)(97736004)(19580405001)(81156014)(4326007)(19580395003)(81166006)(36756003)(5003940100001)(66066001)(575784001)(101416001)(229853001)(42186005)(106356001)(4001430100002)(105586002)(92566002)(47776003)(76506005)(2004002)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR07MB2247; 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; CY1PR07MB2247; 23:BGMI9PkG2mD+Tnhc95mv+Lk3ipirbhPBhQ/jk1sMv?= =?us-ascii?Q?QKLkoZqsyzTJNZrH7FUomw2vxkFlBukvbTULyuplwQWOqeqgEV0OR7lamm0a?= =?us-ascii?Q?A0mBPJbOsAutZ6yjn6/SKPrhbw5Y2JqIw/Ev3KvwGv14AeQDiGssMuBPAqKn?= =?us-ascii?Q?uEwAq411BeuRl06hwUlu5WaSg2XcErVBPdg4Uy2pYwtPXQawO2prqPVb6cxs?= =?us-ascii?Q?ukY0MyRJEmlMIAfKkcQt3jMZq07jOnbmZ7OTgjYTGIH/mlSGTkm+WD4wfEks?= =?us-ascii?Q?m1PPzeBegdQjjOuecULhykjX0K1eNqBzR2AkiYM2k470N+BSlB3vL+GJ9Qgf?= =?us-ascii?Q?5V+D02AqeP8Umd37CC6/Y1HRWw0S7FDKKNBaZTutnwu6FwGVBWi2yQnT6rfL?= =?us-ascii?Q?8nY++iCZgDdIyD3QbKSKUafmRJRiLSOlKGUccG04N/I4EEX7OSgHjKAjWFBP?= =?us-ascii?Q?Pntyv+qKrveKVFjG2TJyBomj3g2QgHjRgvfUEE1jdGgJT14+Hjf2Dd8DGhSX?= =?us-ascii?Q?tZH5suzw9WCf75rj5XwhEGqUxR5ezOvIycb7sLAY0vMbCJFgTz9pFK8yixYX?= =?us-ascii?Q?g+yndchByOkKLEeo9aH3MVVrjkqv5rpBbeFp7McLuYuCA9KWzehvfnuV8aBE?= =?us-ascii?Q?LRCe8uklxg+MgpPbHZiotixwxDHyymPgzinTNQMxBIvclLUJD3lISN9VTwQF?= =?us-ascii?Q?cptZEctO6QOvRfh7Yy6ISBSme/tlK+a59c00O47WBTA3XJTS24jcndY1DviI?= =?us-ascii?Q?2/01ano1t0U7CkuE+2xioJjS8HZBEXxzkrKCJ/xVRkW+imfhpcGFWFAeJdMs?= =?us-ascii?Q?y/Ig2QalEz6ZhZ8XfddpxIK5Sd+qzf24VW3B0FwVJpVWntcUDXGPfqLwQeZq?= =?us-ascii?Q?gIsODsCqZYq1vOLDy5OrL0pfg2PAY0Ky9RUk/H3QC8q9cz5BVomO8etbZ5d+?= =?us-ascii?Q?NK1tUpfc+drKAobb/cdyfm1lgFT0t+vadC969THorujNKltLtemarcN2+5ET?= =?us-ascii?Q?nCjAuPvQCiapIMsX1gx+2iOP+LEApetj6Y4RtrXjzvjB4BbeJSKt6xYs3oCp?= =?us-ascii?Q?XSDR9F57XBXqlGU/mQLwrV4zrW5LI4L6H7pIKwdoQka5UsO45dtGhQPiSA5w?= =?us-ascii?Q?/cDhuFXpXqhXlln2oTmPmWpAnmsuJqC8O9C3Y/eDZuC0+60n7Wd8aIQlTzzK?= =?us-ascii?Q?jUExtf2FLCV3IRfSWstKiz6KDfoGFHTPC2IooItc5a1uy0mOfLCIB1udQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2247; 6:peUrAJOKiCk1FRieDnMyjk2qW7dg/4+LUkLSnX5sAybzeRXTIOATJ0HuosuurZaRcetO5GJY8HZ9WO6kMxzkfmD41dWXsKSpS+X0nr3xyyYzSKsy9olBmI2RaqojJRLK/O6ri1ueD48sIHyMdAgdsQzGsnWCQK+D7OJsITzFggRa6qqekerdLVpkwh94qb1SmUuMTNJ6iE7P3HgfEtyg0zuEzt5cX2jsW8e6wQPMf2ZXhJA9Kioi6P01OL/VhI7icqJnfUebLxhDkOOqnVWfEFFvhpg6D56JheOkIDunMXmzc74dblGpJeGwvCL0t02P; 5:DqbH9sTvAtz0/8BMKVPgmou2367Vuu5H8eBXfDmdCoL+w9Y+TSCTplHaj9MQJl2gGK9Yv/fdWwW3zVdVt2uryVqe3/gJtxtTji2QAaWu83crbjRgSK3k/eViOf8VFLsQyMT8fRaLBLbUFAIMzGxYPg==; 24:icXuAJP7z1808hnWKZ8FJI2Gb1hyA5dtK2d4qtr4VSE9y/lUQaUawlbHXjkCCFS3QqnclvHrv14sg8eFq6+qvDXqsDRLwzmbgicoUlEMxRM=; 7:vo0xNXNV+BePZw4rvJ2r9+lPJcwQS/dabcFEBeATSODPo/I2ZURXHRgSV8Ghy+zwbYY8nBmvFBnm9iWUdvGqFrtwl5WD+6ygWrTVRFYIqgnkoPG3Ad/Hgbye8lir50sIvnBkgE8P5h4yxlt3bTZPeK4dHFY9hVCKbiTfll2UoUp8FNgr8BnpRts3f7NicRbnqvsbJ7Fp/5MRFxxAE5lXAsjeJmwLkCEmpph9ec6wr/7i8gBPDAckl0TIuWUvU3uvkglWxv6gTzuuzYVjaUG26A== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jun 2016 16:42:43.9327 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2247 From: Yury Norov ILP32 has 64-bit off_t, to follow modern requirements. But kernel clears top-halves of input registers. It means we have to pass corresponding arguments in a pair, like aarch32 does. In this patch all affected syscalls are redefined. Most of them are taken from arm code. Signed-off-by: Yury Norov --- sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c | 1 + .../unix/sysv/linux/aarch64/ilp32/ftruncate64.c | 4 +++ sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c | 36 ++++++++++++++++++++++ sysdeps/unix/sysv/linux/aarch64/ilp32/lseek64.c | 0 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c | 1 + .../unix/sysv/linux/aarch64/ilp32/posix_fadvise.c | 1 + .../sysv/linux/aarch64/ilp32/posix_fadvise64.c | 2 ++ sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c | 1 + sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c | 1 + sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c | 4 +++ sysdeps/unix/sysv/linux/aarch64/kernel-features.h | 27 ++++++++++++++++ 11 files changed, 78 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek64.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c create mode 100644 sysdeps/unix/sysv/linux/aarch64/kernel-features.h diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c new file mode 100644 index 0000000..fb5b598 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c @@ -0,0 +1 @@ +/* See sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncatei64.c */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c new file mode 100644 index 0000000..bd0f5fe --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c @@ -0,0 +1,4 @@ +#include + +weak_alias (__ftruncate64, __ftruncate) +weak_alias (__ftruncate64, ftruncate) diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c new file mode 100644 index 0000000..6e00863 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2011-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include +#include +#include + +#include +#include + +off_t +__lseek (int fd, off_t offset, int whence) +{ + loff_t res; + int rc = INLINE_SYSCALL (_llseek, 5, fd, (off_t) (offset >> 32), + (off_t) offset, &res, whence); + return rc ?: res; +} +libc_hidden_def (__lseek) +weak_alias (__lseek, lseek) +strong_alias (__lseek, __libc_lseek) diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek64.c deleted file mode 100644 index e69de29..0000000 diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c new file mode 100644 index 0000000..813ab64 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c new file mode 100644 index 0000000..4430e6e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c new file mode 100644 index 0000000..596c6a1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c @@ -0,0 +1,2 @@ +#define __NR_arm_fadvise64_64 __NR_fadvise64_64 +#include diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c new file mode 100644 index 0000000..80170c3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c new file mode 100644 index 0000000..23548a5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c @@ -0,0 +1 @@ +/* See sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c new file mode 100644 index 0000000..56cb37f --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c @@ -0,0 +1,4 @@ +#include + +weak_alias (truncate64, __truncate) +weak_alias (truncate64, truncate) diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h new file mode 100644 index 0000000..5b0c44d --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h @@ -0,0 +1,27 @@ +/* Set flags signalling availability of kernel features based on given + kernel version number. + Copyright (C) 2006-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include_next + +#ifdef __ILP32__ +/* Define this if your 32-bit syscall API requires 64-bit register + pairs to start with an even-number register. */ +#define __ASSUME_ALIGNED_REGISTER_PAIRS 1 +#endif /* __ILP32__ */ +