From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12696 invoked by alias); 22 Aug 2016 15:08:44 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 12681 invoked by uid 89); 22 Aug 2016 15:08:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=0xcd, 1,27, 1,39, elsewhere X-HELO: NAM03-CO1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Mon, 22 Aug 2016 15:08:00 -0000 From: Yury Norov To: Adhemerval Zanella CC: Subject: Re: [PATCH 4/4] Consolidate posix_fadvise implementations Message-ID: <20160822150819.GC15745@yury-N73SV> References: <1471617709-16267-1-git-send-email-adhemerval.zanella@linaro.org> <1471617709-16267-5-git-send-email-adhemerval.zanella@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1471617709-16267-5-git-send-email-adhemerval.zanella@linaro.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-ClientProxiedBy: DB5PR10CA0012.EURPRD10.PROD.OUTLOOK.COM (10.165.4.150) To DM3PR07MB2250.namprd07.prod.outlook.com (10.164.33.148) X-MS-Office365-Filtering-Correlation-Id: 16a89c31-bf43-4284-14d6-08d3ca9e2c0b X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2250;2:IA/KOE7dUbRRdJcwsKJ0MWy41+DXJQwNJ4XbdWJiC6ZJRpEDooBkI0YbO3s9givNAe8y+dFBTtRBT0n9JvAc9Y50hPq9RmeuJ/CeMaHA4Xq5EMcWp7wiucAj3+EUPGeN7OLU9T6q++AYvFlzmkWlksuxskRmzwG0556vAkox8Vk+2728akfvNq/oSBTg58tA;3:KptgZU9sBJ1/4tBACKIvOnW5/qw7quu5+pA4cbrtxlhE7uzhxeR2JMFuk0Z8hozGUTfhwyI7y1vZddMrhV+Rn4jY+8WLRmJ+H0K9LC6S1q24fuM0DwFBoZUjHK0+vXS0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2250; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2250;25:pB/FgdlsCgN6ACZNixanufkRi4BqIhB/N+Y5FtOKOVfEbITomKa79c+16oT1/gWxg3b4Jt5heX0SBK5VLyEGJoeKeqO2/LgwFzxnXsPvcyM1XaRrbI6SlHwt/pa4Ih/hii0ZSBZdPvqJ9hMdefGZ4eeieN1Ev17YDplpGL2uxi0B1DfGXb16MJ2WGFCBwJnmmNhwNYKA63nqPyNoVP6rpCYrZWUJvq1OU8w7qlGgwVHug0mBA8snTgKdzaXTVgm4ZUFM51Gh6XjQVwgYdY5VdPt0TJxQnl8BNldh1sR5Mx7Ko+s0bfoC4RJdFoMYbcjy2Y86tida8euJsm5BB4UgTxlZuPX3e1l8ihG9dJOflSFyCkey9Hev9vN3tj+ESr3t+J3clM5FQh9C2vCbBmLNfKJ5xOy5yAnINQJoVko1GcNHFud2Tt8UIzCbdyJuMoziEV3FC6Ra+aT7PJUK4VnBOdzWEIKHjJwIRnIhC+XKvnSxI4ubOci6GQ4Ln7eDbkE4D7LCSTbvWC9UTSlE+Hs6q1UhRTQmR6MRv2hpClxqSnbN68dpdJO/JRDdmGXalsGA1yqrCkeTKg+mpE/m5oHsgf2XT/smdvHu1/IIQbKLc6fy4pEcO6LMc6jv7/zjOaTBjAJQ0fZKYzvhoD9G6K9lY+f35W/IelEvqp+2FevkPU8H2veUIjD4pxKN+3QX3G4w82aKRJ6NcTwykqq+VbokAYer2/NIMYe3NtQ7ATSEpN/Td2d8F0NTtLRHTkNwQHzjoDLq+prcEaot8XDepaHqXdLE0JAnwLaqknb1fHwy6yanTvhwN/H9RNl6mCTQac6Fun4FMe5hEYabtRls5O6R9uDio0yJxHmvtZVW3VYb7/c= X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2250;31:EFCR8/a8mIxNqDEVT2yhPPy/CFbj/lC9vot/7j+UrM+6r7E/PE32+iO6BsgZf/OESVcJDm4+oIOruXCk2+JJbQFaCwPaFqxe3IhdVAOV49LUm1Y/2l6xPNMcrrvA5ZeBuSKZubmVoX3t4CD0VuUFYESob/1q3HvHe+WB2Opujxgt2aKA+4sPHF+yaYP5AYqOti/7sRhYAIkr+G2Azk1vDMYxRa2DHTeTjD/GwEFGrlE=;20:2mUxzU/C11up5lQKhwIm+2h6c0jAgBTqSOr+/4I55eikUZIPbmkMadBI1v0KQwIfcvnhifaBzBr0sQ60jVCmKyJcGlfkqT6so5LYGlnoD4hcqUPFnO1FvE1j9EPYF3SqlWWEaQhOUnBTZ7Ghn+CNb3mfH9pnlfHFshG2ESJBHpoHLFU+V2q5TNB5SgdVJ7d90nv5il0Z8bxoVtLEVxNV+vKzwqmN2NOkepHOT5AmmukWaWwkIIDck6OYrYeRzZH5jQ9w3pM1SJXwwlER5pGsUFmL34nhqjaRPjFKbHTYp9akvMK5UNqEBMy0DLfL2purgxC6nxRwqBLLLA9OFxvjUkdXWJWQmXRakiput+hCkTpMuwpo2ArrsMtkt1ypLkKlD5PMc1NzEWZIzQDCl2tGIvi1PRPP7aDvMbb5tQ36pVA9ZwhU5yBHyuwatX9WwLbFwlkYwIVsA71ezesK11qz2uJrtFQ2EI2ld2cES8YaV9u+Zgdx/aVQ+aVFC8eveaC7BIBNRNP6+4z1BBtF6OHP6i6gXtmJEWS3c+9fGD5kRVEfHDLkV94qQcfdeKYqpNQ6ODFEbRJGb5sKFefvyEvXYQ0k1UV+xNOXh9elKAC16hU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(22074186197030); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:DM3PR07MB2250;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2250; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2250;4:+oyisy4mUjlX5to1VXze2YXc56EJbEXlQ8fp5VEvPkVNvQrdPkYdfsCF6n1KZqk6gez+1Kwf9+lOgUv/PfH92i9u64o607BKOMIIT0zlei9GP+25t/kdpbNJndy1l++y2HnkGcQO8ZP280N4uLHHnqVS5yYCbttalFfJPmMxrar/QKKUOtU2lTPfsTTerLC5U66qqeIWjOU5cbJRqB5mYSKoezI0+hoCnl5nfDkKIQlK8xNCTeQVbD8fYVbv/A8WX9qlJy6wWOdfz/cz61xLYz/6nulh2uiOlHc9CAKVWpYYh9sSoM/DwTwz7jlH83Hv8IdAlZFptmFEKPS0dH/3EuOmdOM7ZwzgWB6fy0gVyriTuUsdCrezfAXopWgjTSZAjHhfL8SlcNZL6+XFWWkMUzyo+eOi6H6Ze0IIIJZfKGLjiN1K4SGxJWiEk/G2CWbiQJXZMQAnpsT7Wrbs4B+SDw== X-Forefront-PRVS: 00429279BA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(24454002)(97736004)(110136002)(189998001)(4001350100001)(50466002)(33656002)(97756001)(50986999)(101416001)(92566002)(83506001)(19580395003)(5660300001)(76506005)(19580405001)(2950100001)(105586002)(7736002)(46406003)(9686002)(68736007)(7846002)(8676002)(81156014)(305945005)(81166006)(33716001)(575784001)(15975445007)(106356001)(66066001)(1076002)(586003)(23726003)(76176999)(6116002)(2906002)(4326007)(3846002)(54356999)(47776003)(42186005)(77096005)(18370500001)(2004002)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR07MB2250;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX: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;DM3PR07MB2250;23:czvp4hoEi+rVp8bAPBos0BFE8/5MilyyYaYP9y1XI?= =?us-ascii?Q?w8XdT4XNDNigxUg/clArCiieackoPIlCwOCoqgOeWCaXwsrKRlPaW+fGO9ON?= =?us-ascii?Q?7YRuJUY+eBs55rE2ucjezQMLWjz3iN6BkhaP3zlLjlfgRJlF/vgCtbif9exB?= =?us-ascii?Q?3wifAkTxsgHSh3zmuH8DO8iGBEfeIn4jHSepSsM4uQP8gDgURHDmEJKNZ4/4?= =?us-ascii?Q?OkcPXN+xvGs8oi1ZAkbr6G8hqu7qC7H/p+wwS8TvxLMi9SZ4PtxJfH6FKrJL?= =?us-ascii?Q?YkIAjGpgMRgRPsd4NUdGFyQhqKlkUWzweC26gaq8LB4iWiMj0sb1XxTgxdB0?= =?us-ascii?Q?m6/2OjLfSt3wzFs6Y1rvyMNmpM+I4fxSBajqkKMnvY8nZ5l4mLoA2TssPABA?= =?us-ascii?Q?k1EoPahcCTsmhK7fXxcHHX1WrG033gOZKVUXUU7NFhy7GQ5ACkUdv8Ezbvgc?= =?us-ascii?Q?N55IdOKgGbeUaUoAzRXb4eRybKohWt0XWDS53hAQJZL86UwbpEeLSImAN+Jh?= =?us-ascii?Q?IYCpzNOG3ikSLc1htF847zNFDWGq9SJdw10SWziHOqzvfH5IflMcIrrYN8Ks?= =?us-ascii?Q?BrU50c6P/JDXObILZs61uulkqynCWNp4jCzZQHIYu+J/HE8y9BJr/gxJmlJj?= =?us-ascii?Q?MDKy2iWryiQffZyLzYhRZFxscaqKiTQ5/SBg4h+h9RQW0JEOQBXApbbrLwZy?= =?us-ascii?Q?pUdJVc5VfTzc0GBmMr3gr+zGzTbOkzosA3PCB5x8Uok10z5Qa0f1ymDKWNN3?= =?us-ascii?Q?HWFdAl95HO9WvykhoFPbNx93PUUk6ke1vNSw9f/HRpk6214yatKdt1fUrkw1?= =?us-ascii?Q?dJiA/qPi8kdpk2k/I2yedC7V0DqQJBnDE/EXukvwb/mD+7IGuXE68qvt5s3L?= =?us-ascii?Q?rQ4IipSBkAviwHdikbJCcT0UJykC471uw77Ga83fYttB1iyCbdG6WGuqmP/D?= =?us-ascii?Q?edInjJdC8N9monME5p9LUblCom0GxmYEDBnbk153VLAP84o30yneNqtrI/+s?= =?us-ascii?Q?2cXb4jQwVtjp4kvP71z7gWvamtGTTVSdD0nnDca/OKMDrSUBHp9clCDgXk9C?= =?us-ascii?Q?xmP9Z6gjoBqonr/ZzBSPuLKROITb60qO0v1a+WEU+8cv/O4TZAn/CZFUn8Sl?= =?us-ascii?Q?wqM1RteZhN2eMeOYiGKNwHTWPsUdyOTpF0b/yG67LbvutsznqXNOoALMTC1x?= =?us-ascii?Q?8Mxt6mCxUg+WQwV0dgU9+3l0yszK6Yp+BorsCdlzHCPEEWpZKMyG7cITciLb?= =?us-ascii?Q?GqMMOu7SOKyaGz7nlJntTB9U2yUwcYBi/Wy3yMeKwGALmbN0/zceL3+W0pt9?= =?us-ascii?Q?u1hGQ8PgKPYbkUgFLvltLQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2250;6:Ussh8wcNbC9SVy1t3I4lgFAy7z0vHnEg+DEJMAwEswIel8ZUnUbP0mPP8HtX+p4lfkBY9aa2uLoWKE6avhz6wBjYmcfiGGNkUVJZ8k+wyra965oMuhE1EKxFjAZMP9eAzjMfozYf36Xj1CPOqJK169I5dKAVf2CmDnJGW4r8awvP95c2NSg9YCN51npL0ed6YxaKr97+ZHarTdC+f0gX89dqIuN9JqXkC6RvQ5qA4kcXbt7wjMN9hRYfZMcRw28cQQ2TwgkrBpbGyjFZaesHNfImFtO4pJ+aCYlGTpJjemY=;5:zKHmQwGYPZIMC5gChn+67NpGN8Ngv+z5b0HJh38QbSOqOXt3xj8Rx0Lmw1M8JcQqCPNNiiKa4/nBz5+KdhjYP0wDTRrb05nCzNa8Dni3MK2ZMVer3/E8+nqAW60TaB24NjWhHq5EL0ogSAdxN9gwZw==;24:NrxwXZtTSXzBXZTZOkXWze4MWHgq0N/FCv9IGR/s+3v/D436+qN6C6xrUn+BDEPwMejPrA+Rl9lcXvpDIGTxI/BxRC9ccC5STLtEXht5/fU=;7:GRGpjJ60+O5lQQ5XYPROY3/R5wHxLC3wiw5Qhi8fpiomNS1jkzdJWUBxPJQfKh6EFw9Gd+Rt/u2dA+ulptkhBkk5gsXTwdBZIz3jcoklj5mrhnya34JFyyhPB2CvslI9wlIxCJFyVNvS9VQbHidGWaiobzVSPeC/ngKnziC13EiPcFszf1ilvrara6S9gpn6paX285HYwIQbeWMoYFSl/t2C5ZAaVNAz6buyZiEwkj8VUIxBEDVFeTi1i2UC80c4 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2016 15:08:27.8035 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2250 X-SW-Source: 2016-08/txt/msg00699.txt.bz2 On Fri, Aug 19, 2016 at 11:41:49AM -0300, Adhemerval Zanella wrote: > This patch consolidates mostly of the Linux posix_fallocate{64} implementations > on sysdeps/unix/sysv/linux/posix_fallocate{64}.c. It still keeps arch-specific > files for: > > * S390-32: it uses a packed structure to pass all the arguments on syscall. > It is the only supported port that implements __NR_fadvise64_64 in this > way. > > * ARM: it does not implement __NR_fadvise64 (as other 32-bits ports), so > posix_fadvise calls internal posix_fadvise64 symbol. > > * MIPS64 n64: it requires a different version number that other ports. > > The new macro SYSCALL_LL{64} is used to handle the offset argument and > INTERNAL_SYSCALL_CALL to handle passing the correct number of expect > arguments. > > The default Linux adds two new defines a port can use to control how > __NR_fadvise64_64 passes the kernel arguments: > > * __ASSUME_FADVISE64_64_6ARG: the 'advise' argument is moved on second > position. This is the case of powerpc32 and arm to avoid implement > 7 argument syscall. > > * __ASSUME_FADVISE64_64_NO_ALIGN: for ABIs that defines > __ASSUME_ALIGNED_REGISTER_PAIRS packs the offset without the leading > '0'. This is the case of tile 32 bits. > > ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64 (which is also > handled on arch kernel-feature.h). > > Tested on x86_64, x32, i686, armhf, and aarch64. > > * posix/Makefile (tests): Add tst-posix_fadvise and tst-posix_fadvise64. > * posix/tst-posix_fadvise.c: New file. > * posix/tst-posix_fadvise64.c: Likewise. > * posix/tst-posix_fadvise-common.c: Likewise. > * sysdeps/unix/sysv/linux/arm/kernel-features.h > (__ASSUME_FADVISE64_64_6ARG): Define. > * sysdeps/unix/sysv/linux/powerpc/kernel-features.h > [!__powerpc64__] (__ASSUME_FADVISE64_64_6ARG): Add define. > * sysdeps/unix/sysv/linux/arm/posix_fadvise64.c: Remove file. > * sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Likewise. > * sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c: > Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c > (SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l64]: > Alias to __posix_fadvise64_l32. > (SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l32]: > Add compat definition to posix_fadvise64. > (SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l64]: > Add versioned definition to posix_fadvise64. > * sysdeps/unix/sysv/linux/posix_fadvise.c (posix_fadvise): Build iff > __OFF_T_MATCHES_OFF64_T is defined, use INTERNAL_SYSCALL_CALL, add > __ASSUME_FADVISE64_64_6ARG/__ASSUME_FADVISE64_64_NO_ALIGN support. > * sysdeps/unix/sysv/linux/posix_fadvise64.c (posix_fadvise64): Add > __ASSUME_FADVISE64_64_NO_ALIGN support and use INTERNAL_SYSCALL_CALL. > * sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list (posix_fadvise): > Remove. > > --- > posix/Makefile | 3 +- > posix/tst-posix_fadvise-common.c | 113 +++++++++++++++++++++ > posix/tst-posix_fadvise.c | 25 +++++ > posix/tst-posix_fadvise64.c | 44 ++++++++ > sysdeps/unix/sysv/linux/arm/kernel-features.h | 7 ++ > sysdeps/unix/sysv/linux/arm/posix_fadvise64.c | 38 ------- > .../sysv/linux/generic/wordsize-32/posix_fadvise.c | 37 ------- > sysdeps/unix/sysv/linux/i386/posix_fadvise64.S | 92 ----------------- > .../unix/sysv/linux/mips/mips32/posix_fadvise.c | 41 -------- > .../unix/sysv/linux/mips/mips32/posix_fadvise64.c | 60 ----------- > .../sysv/linux/mips/mips64/n32/posix_fadvise.c | 37 ------- > .../sysv/linux/mips/mips64/n32/posix_fadvise64.c | 55 ---------- > .../sysv/linux/mips/mips64/n64/posix_fadvise.c | 50 --------- > .../sysv/linux/mips/mips64/n64/posix_fadvise64.c | 28 ++++- > sysdeps/unix/sysv/linux/posix_fadvise.c | 45 +++++--- > sysdeps/unix/sysv/linux/posix_fadvise64.c | 52 +++++++--- > sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 5 + > .../sysv/linux/powerpc/powerpc32/posix_fadvise.c | 39 ------- > .../sysv/linux/powerpc/powerpc32/posix_fadvise64.c | 55 ---------- > sysdeps/unix/sysv/linux/tile/kernel-features.h | 1 + > .../unix/sysv/linux/wordsize-64/posix_fadvise.c | 40 -------- > .../unix/sysv/linux/wordsize-64/posix_fadvise64.c | 1 - > sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 1 - > 24 files changed, 333 insertions(+), 574 deletions(-) > create mode 100644 posix/tst-posix_fadvise-common.c > create mode 100644 posix/tst-posix_fadvise.c > create mode 100644 posix/tst-posix_fadvise64.c > delete mode 100644 sysdeps/unix/sysv/linux/arm/posix_fadvise64.c > delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/i386/posix_fadvise64.S > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c > > diff --git a/posix/Makefile b/posix/Makefile > index 3a7719e..97867ca 100644 > --- a/posix/Makefile > +++ b/posix/Makefile > @@ -90,7 +90,8 @@ tests := tstgetopt testfnm runtests runptests \ > bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \ > tst-pathconf tst-getaddrinfo4 tst-rxspencer-no-utf8 \ > tst-fnmatch3 bug-regex36 tst-getaddrinfo5 \ > - tst-posix_spawn-fd > + tst-posix_spawn-fd \ > + tst-posix_fadvise tst-posix_fadvise64 > xtests := bug-ga2 > ifeq (yes,$(build-shared)) > test-srcs := globtest > diff --git a/posix/tst-posix_fadvise-common.c b/posix/tst-posix_fadvise-common.c > new file mode 100644 > index 0000000..6670835 > --- /dev/null > +++ b/posix/tst-posix_fadvise-common.c > @@ -0,0 +1,113 @@ > +/* Common posix_fadvise tests definitions. > + Copyright (C) 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 > +#include > +#include > +#include > + > +static void do_prepare (void); > +#define PREPARE(argc, argv) do_prepare () > +static int do_test (void); > +#define TEST_FUNCTION do_test () > + > +#include > + > +static char *temp_filename; > +static int temp_fd; > +static char fifoname[] = "/tmp/tst-posix_fadvise-fifo-XXXXXX"; > +static int fifofd; > + > +static void > +do_prepare (void) > +{ > + temp_fd = create_temp_file ("tst-posix_fadvise.", &temp_filename); > + if (temp_fd == -1) > + { > + printf ("cannot create temporary file: %m\n"); > + exit (1); > + } > + > + if (mktemp (fifoname) == NULL) > + { Trailing whitespace > + printf ("%s: cannot generate temp file name: %m\n", __func__); > + exit (1); > + } > + add_temp_file (fifoname); > + > + if (mkfifo (fifoname, S_IWUSR | S_IRUSR) != 0) > + { > + printf ("%s: cannot create fifo: %m\n", __func__); > + exit (1); > + } > + > + fifofd = open (fifoname, O_RDONLY | O_NONBLOCK); > + if (fifofd == -1) > + { > + printf ("%s: cannot open fifo: %m\n", __func__); > + exit (1); > + } > +} > + > +#define FAIL(str) \ > + do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0) > + You don't fit into a single line anyway. Why don't you make it nicer? > +/* Effectivelly testing posix_fadvise is hard because side effects are not > + observed without checking either performance or any kernel specific > + supplied information. Also, the syscall is meant to be an advisory, > + so kernel is free to use these information in which way it seems as > + fit (even ignoring it). > + Trailing whitespaces > + This test check for some invalid returned operation to check argument > + passing and if implementation follows POSIX error definition. */ > +static int > +do_test_common (void) > +{ > + /* Add some data to file and ensure it is written down on disk. */ > + char buffer[2048] = { 0xcd }; > + > + if (write (temp_fd, buffer, 2048) != 2048) > + FAIL ("write returned a value different than expected 2048"); > + > + if (fsync (temp_fd) != 0) > + FAIL ("fsync failed"); > + > + /* Test passing an invalid fd. */ > + if (posix_fadvise (-1, 0, 0, POSIX_FADV_NORMAL) != EBADF) > + FAIL ("posix_fadvise with invalid fd did not return EBADF"); > + > + /* Test passing an invalid operation. */ > + if (posix_fadvise (temp_fd, 0, 0, -1) != EINVAL) > + FAIL ("posix_fadvise with invalid advise did not return EINVAL"); > + > + /* Test passing a FIFO fd. */ > + if (posix_fadvise (fifofd, 0, 0, POSIX_FADV_NORMAL) != ESPIPE) > + FAIL ("posix_advise with PIPE fd did not return ESPIPE"); > + > + /* Default fadvise on all file starting at initial position. */ > + if (posix_fadvise (temp_fd, 0, 0, POSIX_FADV_NORMAL) != 0) > + FAIL ("default posix_fadvise failed"); > + > + if (posix_fadvise (temp_fd, 0, 4096, POSIX_FADV_NORMAL) != 0) > + FAIL ("posix_fadvise failed (offset = 0, len = 4096) failed"); > + > + if (posix_fadvise (temp_fd, 4096, 0, POSIX_FADV_NORMAL) != 0) > + FAIL ("posix_fadvise failed (offset = 4096, len = 0) failed"); > + > + return 0; > +} > diff --git a/posix/tst-posix_fadvise.c b/posix/tst-posix_fadvise.c > new file mode 100644 > index 0000000..6ee0936 > --- /dev/null > +++ b/posix/tst-posix_fadvise.c > @@ -0,0 +1,25 @@ > +/* Basic posix_fadvise tests. > + Copyright (C) 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 "tst-posix_fadvise-common.c" > + > +static int > +do_test (void) > +{ > + return do_test_common (); > +} > diff --git a/posix/tst-posix_fadvise64.c b/posix/tst-posix_fadvise64.c > new file mode 100644 > index 0000000..91d1860 > --- /dev/null > +++ b/posix/tst-posix_fadvise64.c > @@ -0,0 +1,44 @@ > +/* Basic posix_fadvise64 tests. > + Copyright (C) 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 > + . */ > + > +#define _FILE_OFFSET_BITS 64 > +#include "tst-posix_fadvise-common.c" > + > +static int > +do_test (void) > +{ > + int ret = do_test_common (); > + if (ret == -1) > + return -1; > + > + /* Test passing a negative length. The compat fadvise64 might use > + off64_t for size argument passing, so using -1 for len without > + _FILE_OFFSET_BITS might not trigger the length issue. */ > + if (posix_fadvise (temp_fd, 0, -1, POSIX_FADV_NORMAL) != EINVAL) > + FAIL ("posix_fadvise with negative length did not return EINVAL"); > + > + /* Check with some offset values larger than 32-bits. */ > + off_t offset = UINT32_MAX + 2048LL; > + if (posix_fadvise (temp_fd, 0, offset, POSIX_FADV_NORMAL) != 0) > + FAIL ("posix_fadvise failed (offset = 0, len = 4096) failed"); > + > + if (posix_fadvise (temp_fd, offset, 0, POSIX_FADV_NORMAL) != 0) > + FAIL ("posix_fadvise failed (offset = 4096, len = 0) failed"); > + > + return 0; > +} > diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h > index 6ca607e..628d27f 100644 > --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h > @@ -27,6 +27,13 @@ > # undef __ASSUME_SET_ROBUST_LIST > #endif > > +/* ARM fadvise64_64 reorganize the syscall arguments. */ > +#define __ASSUME_FADVISE64_64_6ARG 1 > + > /* 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 > + > +/* ARM only has a syscall for fadvise64{_64} and it defined with a > + non-standard name. */ > +#define __NR_fadvise64_64 __NR_arm_fadvise64_64 > diff --git a/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c b/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c > deleted file mode 100644 > index ffb3ecd..0000000 > --- a/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c > +++ /dev/null > @@ -1,38 +0,0 @@ > -/* Copyright (C) 2003-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 > -#include > -#include > - > -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) > -{ > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise, > - __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset), > - __LONG_LONG_PAIR ((long)(len >> 32), (long)len)); > - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return 0; > - return INTERNAL_SYSCALL_ERRNO (ret, err); > -} > -weak_alias (__posix_fadvise64_l64, posix_fadvise64); > diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c > deleted file mode 100644 > index 7c93a8f..0000000 > --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c > +++ /dev/null > @@ -1,37 +0,0 @@ > -/* 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 > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, > - __LONG_LONG_PAIR (offset >> 31, offset), > - __LONG_LONG_PAIR (len >> 31, len), > - advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -} > diff --git a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S b/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S > deleted file mode 100644 > index 4b5d65c..0000000 > --- a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S > +++ /dev/null > @@ -1,92 +0,0 @@ > -/* Copyright (C) 1995-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 > - > -#define EINVAL 22 > -#define ENOSYS 38 > -#define EOVERFLOW 75 > - > -#define SVRSP 16 /* saved register space */ > -#define PARMS 4+SVRSP /* space for 4 saved regs */ > -#define FD PARMS > -#define OFFLO FD+4 > -#define OFFHI OFFLO+4 > -#define LENLO OFFHI+4 > -#define LENHI LENLO+4 > -#define FLAGS LENHI+4 > - > - .text > -ENTRY (__posix_fadvise64_l64) > - > - /* Save registers. */ > - pushl %ebp > - cfi_adjust_cfa_offset (4) > - pushl %ebx > - cfi_adjust_cfa_offset (4) > - pushl %esi > - cfi_adjust_cfa_offset (4) > - pushl %edi > - cfi_adjust_cfa_offset (4) > - > - movl FD(%esp), %ebx > - cfi_rel_offset (ebx, 8) > - movl OFFLO(%esp), %ecx > - movl OFFHI(%esp), %edx > - movl LENLO(%esp), %esi > - cfi_rel_offset (esi, 4) > - movl LENHI(%esp), %edi > - cfi_rel_offset (edi, 0) > - movl FLAGS(%esp), %ebp > - cfi_rel_offset (ebp, 12) > - > - movl $SYS_ify(fadvise64_64), %eax > - ENTER_KERNEL > - > - /* Restore registers. */ > - popl %edi > - cfi_adjust_cfa_offset (-4) > - cfi_restore (edi) > - popl %esi > - cfi_adjust_cfa_offset (-4) > - cfi_restore (esi) > - popl %ebx > - cfi_adjust_cfa_offset (-4) > - cfi_restore (ebx) > - popl %ebp > - cfi_adjust_cfa_offset (-4) > - cfi_restore (ebp) > - > - /* The function returns zero, or the error number. So all we > - have to do is negate the value passed back from the kernel. */ > - /* If 0 > %eax > -4096 there was an error. */ > - negl %eax > - > - /* Successful; return the syscall's value. */ > - ret > - > -END (__posix_fadvise64_l64) > - > - .section .text.compat, "ax" > -ENTRY (__posix_fadvise64_l32) > - DO_CALL (fadvise64, 5) > - negl %eax > - ret > -PSEUDO_END_ERRVAL (__posix_fadvise64_l32) > - > -default_symbol_version (__posix_fadvise64_l64, posix_fadvise64, GLIBC_2.3.3) > -symbol_version (__posix_fadvise64_l32, posix_fadvise64, GLIBC_2.2) > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c b/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c > deleted file mode 100644 > index 705c0c7..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c > +++ /dev/null > @@ -1,41 +0,0 @@ > -/* Copyright (C) 2007-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 > -#include > -#include > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > -/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 7, fd, 0, > - __LONG_LONG_PAIR (offset >> 31, offset), > - __LONG_LONG_PAIR (len >> 31, len), > - advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c > deleted file mode 100644 > index 0ded3c3..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c > +++ /dev/null > @@ -1,60 +0,0 @@ > -/* Copyright (C) 2007-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 > -#include > -#include > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) > -{ > -/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 7, fd, 0, > - __LONG_LONG_PAIR ((long) (offset >> 32), > - (long) offset), > - __LONG_LONG_PAIR ((long) (len >> 32), > - (long) len), > - advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > - > -#include > - > -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > - > -int > -attribute_compat_text_section > -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) > -{ > - return __posix_fadvise64_l64 (fd, offset, len, advise); > -} > - > -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > -#else > -strong_alias (__posix_fadvise64_l64, posix_fadvise64); > -#endif > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c > deleted file mode 100644 > index 3b1ef7e..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c > +++ /dev/null > @@ -1,37 +0,0 @@ > -/* Copyright (C) 2003-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 > -#include > -#include > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 4, fd, offset, len, advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c > deleted file mode 100644 > index e7ddc87..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c > +++ /dev/null > @@ -1,55 +0,0 @@ > -/* Copyright (C) 2007-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 > -#include > -#include > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) > -{ > -/* MIPS kernel only has NR_fadvise64 which acts as NR_fadvise64_64 */ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 4, fd, offset, len, advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > - > -#include > - > -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > - > -int > -attribute_compat_text_section > -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) > -{ > - return __posix_fadvise64_l64 (fd, offset, len, advise); > -} > - > -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > -#else > -strong_alias (__posix_fadvise64_l64, posix_fadvise64); > -#endif > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c > deleted file mode 100644 > index 86ff6ef..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c > +++ /dev/null > @@ -1,50 +0,0 @@ > -/* Copyright (C) 2003-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 > - . */ > - > -#define posix_fadvise64 __no_posix_fadvise64 > -#include > -#include > -#include > -#undef posix_fadvise64 > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 4, fd, offset, len, advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > - > -#include > - > -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > -strong_alias (posix_fadvise, __posix_fadvise64_l32); > -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > -strong_alias (posix_fadvise, __posix_fadvise64_l64); > -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > -#else > -weak_alias (posix_fadvise, posix_fadvise64); > -#endif > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c > index c9f72c4..3856fe0 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c > @@ -1 +1,27 @@ > -/* posix_fadvise64 is in posix_fadvise.c */ > +/* Copyright (C) 2003-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 > + . */ > + > +#undef strong_alias > +#define strong_alias(a, b) > + > +#include > + > +#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > +_strong_alias (__posix_fadvise64_l64, __posix_fadvise64_l32); > +compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > +versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > +#endif > diff --git a/sysdeps/unix/sysv/linux/posix_fadvise.c b/sysdeps/unix/sysv/linux/posix_fadvise.c > index 093d707..869a642 100644 > --- a/sysdeps/unix/sysv/linux/posix_fadvise.c > +++ b/sysdeps/unix/sysv/linux/posix_fadvise.c > @@ -22,27 +22,46 @@ > /* Advice the system about the expected behaviour of the application with > respect to the file associated with FD. */ > > +#ifndef __OFF_T_MATCHES_OFF64_T > + > +/* Both arm and powerpc implements fadvise64_64 with last 'advise' argument > + just after 'fd' to avoid the requirement of implementing 7-arg syscalls. > + ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64. > + > + tile requires __ASSUME_ALIGNED_REGISTER_PAIRS but implements the 32-bit > + fadvise64_64 without the padding 0 after fd. > + > + s390 implements fadvice64_64 using a specific struct with arguments > + packed inside. This is the only implementation handled in arch-specific > + code. */ Are you sure it will be the only implementation forever, and comment will be valid too? > + > int > posix_fadvise (int fd, off_t offset, off_t len, int advise) > { > -#if defined(__NR_fadvise64) || defined(__NR_fadvise64_64) > INTERNAL_SYSCALL_DECL (err); > # ifdef __NR_fadvise64 > - int ret = INTERNAL_SYSCALL (fadvise64, err, 5, fd, > - __LONG_LONG_PAIR (offset >> 31, offset), len, > - advise); > + int ret = INTERNAL_SYSCALL_CALL (fadvise64, err, fd, > + __ALIGNMENT_ARG SYSCALL_LL (offset), > + len, advise); > # else > - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, > - __LONG_LONG_PAIR ((long) (offset >> 31), > - (long) offset), > - __LONG_LONG_PAIR ((long) (len >> 31), > - (long) len), > - advise); > +# ifdef __ASSUME_FADVISE64_64_6ARG > + int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise, > + __ALIGNMENT_ARG SYSCALL_LL (offset), > + SYSCALL_LL (len)); > +# else > + > +# ifdef __ASSUME_FADVISE64_64_NO_ALIGN > +# undef __ALIGNMENT_ARG > +# define __ALIGNMENT_ARG > +# endif > + > + int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, > + __ALIGNMENT_ARG SYSCALL_LL (offset), > + SYSCALL_LL (len), advise); > +# endif > # endif > if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > return INTERNAL_SYSCALL_ERRNO (ret, err); > return 0; > -#else > - return ENOSYS; > -#endif > } > +#endif /* __OFF_T_MATCHES_OFF64_T */ > diff --git a/sysdeps/unix/sysv/linux/posix_fadvise64.c b/sysdeps/unix/sysv/linux/posix_fadvise64.c > index 6d10558..15e08b7 100644 > --- a/sysdeps/unix/sysv/linux/posix_fadvise64.c > +++ b/sysdeps/unix/sysv/linux/posix_fadvise64.c > @@ -17,32 +17,54 @@ > > #include > #include > -#include > +#include > > int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); > -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); > + > +/* Both arm and powerpc implements fadvise64_64 with last 'advise' argument > + just after 'fd' to avoid the requirement of implementing 7-arg syscalls. > + ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64. > + > + tile requires __ASSUME_ALIGNED_REGISTER_PAIRS but implements the 32-bit > + fadvise64_64 without the padding 0 after fd. > + > + s390 implements fadvice64_64 using a specific struct with arguments > + packed inside. This is the only implementation handled in arch-specific > + code. */ > + > +#ifdef __ASSUME_FADVISE64_64_NO_ALIGN > +# undef __ALIGNMENT_ARG > +# define __ALIGNMENT_ARG > +#endif > + > +#ifndef __NR_fadvise64_64 > +# define __NR_fadvise64_64 __NR_fadvise64 > +#endif > > /* Advice the system about the expected behaviour of the application with > respect to the file associated with FD. */ > - Is it necessary to remove this line. You don't do so elsewhere... > int > __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) > { > INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, > - __LONG_LONG_PAIR ((long) (offset >> 32), > - (long) offset), > - __LONG_LONG_PAIR ((long) (len >> 32), > - (long) len), > - advise); > +#ifdef __ASSUME_FADVISE64_64_6ARG > + int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise, > + SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); > +#else > + int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, > + __ALIGNMENT_ARG SYSCALL_LL64 (offset), > + SYSCALL_LL64 (len), advise); > +#endif > if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) > return 0; > return INTERNAL_SYSCALL_ERRNO (ret, err); > } > > -#include > - > -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > +/* The type of the len argument was changed from size_t to off_t in > + POSIX.1-2003 TC1. */ > +#ifndef __OFF_T_MATCHES_OFF64_T > +# if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > +int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); > > int > attribute_compat_text_section > @@ -53,6 +75,10 @@ __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) > > versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > +# else > +weak_alias (__posix_fadvise64_l64, posix_fadvise64); > +# endif > #else > -strong_alias (__posix_fadvise64_l64, posix_fadvise64); > +weak_alias (__posix_fadvise64_l64, posix_fadvise64); > +strong_alias (__posix_fadvise64_l64, posix_fadvise); > #endif > diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > index 996535f..42a53f2 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h > @@ -46,4 +46,9 @@ > # define __ASSUME_ALIGNED_REGISTER_PAIRS 1 > #endif > > +/* powerpc compat fadvise64_64 reorganize the syscall argument. */ > +#ifndef __powerpc64__ > +# define __ASSUME_FADVISE64_64_6ARG 1 > +#endif > + > #include_next > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c > deleted file mode 100644 > index e846bf5..0000000 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c > +++ /dev/null > @@ -1,39 +0,0 @@ > -/* Copyright (C) 2003-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 > -#include > -#include > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 6, fd, 0, > - __LONG_LONG_PAIR (offset >> 31, offset), len, > - advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c > deleted file mode 100644 > index c26206f..0000000 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c > +++ /dev/null > @@ -1,55 +0,0 @@ > -/* Copyright (C) 2003-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 > -#include > -#include > - > -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); > -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) > -{ > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, advise, > - __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset), > - __LONG_LONG_PAIR ((long)(len >> 32), (long)len)); > - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return 0; > - return INTERNAL_SYSCALL_ERRNO (ret, err); > -} > - > -#include > - > -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) > - > -int > -attribute_compat_text_section > -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) > -{ > - return __posix_fadvise64_l64 (fd, offset, len, advise); > -} > - > -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); > -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); > -#else > -strong_alias (__posix_fadvise64_l64, posix_fadvise64); > -#endif > diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h > index 9425e1c..ded0e43 100644 > --- a/sysdeps/unix/sysv/linux/tile/kernel-features.h > +++ b/sysdeps/unix/sysv/linux/tile/kernel-features.h > @@ -23,4 +23,5 @@ > pairs to start with an even-number register. */ > #ifndef _LP64 > # define __ASSUME_ALIGNED_REGISTER_PAIRS 1 > +# define __ASSUME_FADVISE64_64_NO_ALIGN 1 > #endif > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c > deleted file mode 100644 > index 137b591..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c > +++ /dev/null > @@ -1,40 +0,0 @@ > -/* Copyright (C) 2003-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 > - . */ > - > -#define posix_fadvise64 __no_posix_fadvise64 > -#include > -#include > -#include > -#undef posix_fadvise64 > - > -/* Advice the system about the expected behaviour of the application with > - respect to the file associated with FD. */ > - > -int > -posix_fadvise (int fd, off_t offset, off_t len, int advise) > -{ > -#ifdef __NR_fadvise64 > - INTERNAL_SYSCALL_DECL (err); > - int ret = INTERNAL_SYSCALL (fadvise64, err, 4, fd, offset, len, advise); > - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) > - return INTERNAL_SYSCALL_ERRNO (ret, err); > - return 0; > -#else > - return ENOSYS; > -#endif > -} > -weak_alias (posix_fadvise, posix_fadvise64) > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c > deleted file mode 100644 > index c9f72c4..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c > +++ /dev/null > @@ -1 +0,0 @@ > -/* posix_fadvise64 is in posix_fadvise.c */ > diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list > index 8cccb1d..63657eb9 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list > @@ -2,5 +2,4 @@ > > gettimeofday - gettimeofday:__vdso_gettimeofday@LINUX_2.6 i:pP __gettimeofday gettimeofday > personality EXTRA personality Ei:i __personality personality > -posix_fadvise - fadvise64 Vi:iiii posix_fadvise posix_fadvise64 > time - time:__vdso_time@LINUX_2.6 Ei:P time > -- > 2.7.4