From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71700 invoked by alias); 22 Aug 2016 15:28:51 -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 71595 invoked by uid 89); 22 Aug 2016 15:28:50 -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=pseudo X-HELO: NAM02-SN1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Mon, 22 Aug 2016 15:28:00 -0000 From: Yury Norov To: Adhemerval Zanella CC: Subject: Re: [PATCH 1/4] Add INTERNAL_SYSCALL_CALL Message-ID: <20160822152826.GE15745@yury-N73SV> References: <1471617709-16267-1-git-send-email-adhemerval.zanella@linaro.org> <1471617709-16267-2-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-2-git-send-email-adhemerval.zanella@linaro.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-ClientProxiedBy: VI1PR0901CA0048.eurprd09.prod.outlook.com (10.167.203.144) To CY1PR07MB2246.namprd07.prod.outlook.com (10.164.112.148) X-MS-Office365-Filtering-Correlation-Id: a266a927-3842-47fc-27d3-08d3caa0fc9c X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;2:T2VZ89SKvLWDpx3T3YOBoVEHgvgZtldepMYQu0y3rESMFLyUkgoAiig9mH6Y5ebUQUSySW+LOtfLK/7Yf5TR0krG8IqeVmctmdklNt0Z6CDc1SmY+EPbpVbhIQ3DvZ3sokCOxAgJa9PHa1lxLf0AK/JERA8OvakHXlgcQ8ZniHiSPEA/xuEFQ+ZrhKmiNFiE;3:wWilkjDE/N5TcX8pee4+phhgpGbc/yu7kF/unXr9zPp4G9QlN1XAITy1zJYEY3zUzAJZbqYxOmVwc+om60QRFTKOYGFipC74lRuA2HyXO7MWQZgnatScOzuZQkst3vvZ;25:rBI+BMYe74gGFNC7TGFKJXPoNWCBUWl0j5VqWsfS6LIT54B7tZpPrytwm0XlWDXNgqEDT32qb6bONdGUZID9l0IQY7mCLUsv7BQbn4Uw4papzLJhErD+af2mjX0kIaaJBWxj61uEMWdvHU9i35UJHT/nMrRRPtHtCwbgpKybotnd/LaPnx0fa2YHMZpOB8KK+iYLaL7uM42v96q9DpCrFil6aIqjagKWzc6g14h5TQ7+66qgU5ndahzoL45TY/sm7xyu7nABIVXC8LuSS84vpVvJPZUMgftVE0YnxlSbErTZDcdyNFypaew5CrwNY1tN/1SYA8bE58V7HtgEiUAL5PkTt048mAoGQCcOyceVoO9cf5f0MGKrmHqMPOeareHTvFcrwZ3v5ehItFHtnSvpzDHtxjsr0KX2jKoN4F23aIA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2246; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;31:/YcXhZLemn3fKkFeL5UzNl8R9dqzG5Ghzrt9YMJKL5iHiRWxH/iZJCrs1wN2B92aFb/pOZ8amOWorGURbVaX8l1kDk9yDgoGabS1oo+eIO118hfXRQ/4sso637yKJCl0wK4kHrQz12atmH4ga67cqXR1oS82YmTd42o/HNv846p0kS7oAbCs+OLNfaTxHStLZPU9r0C+T6PxS21BZ3CC4si4B8c9hy7UKMh/Sjr6PUo=;20:3PIjPpAeHLdyw8PgHFKKEiDAqFiX2adeKbN1CbG8pJhsjsUrt+8RHhAPwgwskxK4zdes2axKHbHrWetz7S76g1t1y3q/AyUOEKjucL/KpWjybEsmXIN1SNenQfh5jZBJFBdBWlv4hm1RCDkq4s7dRk4a8iz8zBttLeahWsWGR0idW0WE4EGVHuomgOKzZWeU3E//VRUlqPSZndhXCh82jRdRcTltflfJ8/xWEWkN2hKASx8Ox6MDPKiC+r5krueWwFOSFRbGX64nUkXs0JYSzS6Z+TFOlEKvGlZymsNJpp/ucf37o98e3hsvA07FBH92fY4iJDmYClvMPhqL6DBuRICwXNSzz68/eS4QAkkcjQn5k2c7l7AcgYy0wlPuMJjsiLJoB9uYJnxE+U4DAYy1JtddVPCbUKj+pFjOUCjtH523MhCr+YiT71HmCtBgYDXsig+mmrrB+/d8ABzOxEM96vpNuFG5YBMD01WctpPC1Bh2OOeHeKUffPUhx9AuoHLCxZGz7Wtv/rNgrYdqeMSMvoG2HYI6FvidmXrYTgJeTQRlpyCRyEj05xJ7mfKyNbeiNnhcKCZetgKdrmoEd9OgOFNWa1GPtvhl7amnRN2YJuo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:CY1PR07MB2246;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2246; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;4:eTU4AQxlf03laUZKUvOZZNaMrcsncymE5YQHvpg7Pm/TyIiNyPFXWz5DNxh0j63KXGpoIOr1tHXD/egyZLhrXR3r9wKQhjBy38G+6wRqrSLLGlVREKTdbVmwQv6i6FXY193D3iopOBt81zpRhsDwU5FXrph9OiAkkH9jGtKDFVXtF6+CDvl7YR9PyFARa6V360Id6Z/Vb/n6T2QBn/VfmQCRqSOJ3ccJXVt80HVYFX7dAPJmJk4HNjWpYUby2rVncDUwbmdpqpaGI6FOfD3uO15Pl2hNEs0gU7vbrBGzM7k96g74d8cf4AxIqWi4/ANEs+Eocb47Du6YKiJNnq61rHasMmh91nEXz4Me1fZbzp+GD2cQNAg+8YCvwrQZ++iXKJI159xP/h4fzKEm7L7Kv2csyrOtiPmNDZrdnMsMPLg= X-Forefront-PRVS: 00429279BA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(199003)(24454002)(189002)(2906002)(4326007)(83506001)(54356999)(76176999)(33656002)(97756001)(50986999)(7736002)(7846002)(105586002)(8676002)(101416001)(23726003)(81166006)(81156014)(9686002)(3846002)(6116002)(586003)(76506005)(92566002)(1076002)(42186005)(50466002)(106356001)(47776003)(97736004)(4001350100001)(66066001)(33716001)(77096005)(110136002)(46406003)(68736007)(5660300001)(305945005)(2950100001)(189998001)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2246;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;CY1PR07MB2246;23:e/bjMxDr0BY7vK7E6n4Dmznyv04cfwMFn0oQvpWqW?= =?us-ascii?Q?K2E/AOAoaQvDUNudWW2iGUvSMg91oXqn20VEquR2moeEqXtdOja66PWbD+uS?= =?us-ascii?Q?szM9CQGHkaJhDm8K3UtTG4yhMR2dkXpk02M5eKuSfdhqd9GTFQEHRbT0owre?= =?us-ascii?Q?gpmtELvabkr0ktTm9bpvCR+2yUpKT+ZxtXG8c4LM7xF1QPS++QOF+ukrW+hy?= =?us-ascii?Q?4D0cOU6RNoEyY18LXlUQtcQ204X1jkSRNAgNVcuuIBn+bvFMcrGVmp66rdug?= =?us-ascii?Q?EbwOuBk07007HUdB9Im0VhY742JMNVrBqGOIwOSewM6cJwboF3oEXur7rGYG?= =?us-ascii?Q?FOFt68xcjRyPaK10sF5aIjitQmQkMxyUvTdTD9y0xkqOxcTo2ZakdI21Zz5e?= =?us-ascii?Q?ThWWjtzBXiWuhEdXR+OcV4jPJeXIA4KRmeqD79vjRvCXL91EBOyhNc14W+IS?= =?us-ascii?Q?ZswjmVpLj9/Ue77M5x9SZT/FBv9PJyTA61E4CeCYgTTtz7J6CUr+A3F8aUg0?= =?us-ascii?Q?AxDzHqPAfHrgsXLPPUyXr6X4MYJXCOmE9afVLZNWQSEuDCJIuwVB5lUPcGfO?= =?us-ascii?Q?LzV7x4ffy5asPk99BaFNzlOx5zIuxwR0+EsKwqsMFK2OwU4jfrL9yItS3Sn6?= =?us-ascii?Q?cACe3Wpgt2Uoew2T+iBEjNIIFUfeZ7SlJqrTPJUR/Nf5rGoF2aRDtwdQuian?= =?us-ascii?Q?5QkcQTx2A8ecUXX9opDYIdFpJrov7h7MqWv04fHagqpyPjaPJw3bWo4rIBDu?= =?us-ascii?Q?kG29p5GBf4s+jd92uohZu7WY3AE7Lka0JJvuQQN9TXvYa1OXgo2VIggqpiwN?= =?us-ascii?Q?jlxNJPz4SH0fpTIlHF/ksA9dV7Zy2+KfGqdaccWL/qrMUnyQBdyV9108/9hq?= =?us-ascii?Q?mrmGVdAdRU2ail4ml6G6bHnVw6AF/MVCR2OqU//Iog+7KkufNcgkSLXbQ7Ra?= =?us-ascii?Q?7NpE5OJyxpTXnQCxn108CSW/IFxJmTYsTpOV0d0nJQON/zYHVDFzD/iQ1eos?= =?us-ascii?Q?J77bIPPMiLMAFzX8uOYeHlUg4YKNa/3zYEU2jRfwudHNs5PIFV9cvDGH/S3V?= =?us-ascii?Q?Sf2m+Nu9itwzH1CM/B5W1reS7rDSz7mGyJL/EYjQK0X43P4CSfiI0aaVTXtP?= =?us-ascii?Q?YErok9TOF5Al9vn3QuO4tJ+AkwHYAmsWyLpK+RiryS2Yr8lN7FpQw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;6:Yz0Pp5QnnI4y0wmw8WPZiRtjT4Sa1f9eWu4Z7fgewc+3qisVEsbTFGzalgs7o6wLAtaWOJmFzGVTXlwAYKgMKnfBP6Po8VjsmlBa/0/r+0v12YjeKBR1DSdE4ka62ZBjUm2woPjYwEOcYTQCyTMFmHtA3wLrSx2Sju9bBVSgARItp7P2uQjtIIsL+1Ge1hkJUkDEQoFhLtewQzXuB/RSR0L7m1GWECDQyIijilkyi9pJBPMiKj90GUp5QpurgodCxtNmK0XiT3EK6RO8vwNBghnz7Y5Q6lG+UQnEicMOglk=;5:5oqha8y1/q2JkPa7tBYYjb051eILmydnV9cdsjh4gK/TMWvyMuuRVnojWq2Pw3B3F1ERvFIxtwMHav5cYZoHFw/esfbqzuALxNGwMy6CGwFpUxwdFdf5te01ITrYQOoR562TPLuQjLdIjfrFzXlnwg==;24:LCj8UY3yiWhEzCZOIAx2ynAay3dtVSBVftDT2KUP5QAiEK9at40eSqqZo0U0i+RpOh2PujD0WaElvB4+Q5Azss0iHEETOnrgrHnfPW7OWKI=;7:oFfaakffVhzU9cJHT29MwhmEigplwWUFyItJ+bU1x/C3abu7ARv/5DOFGYlGg0H3NM62JS2R4NvS05D4h1eta9zqvTPQk0WZjNMIfadGcXyQQLKSo6HRNsVZ6lzp0zWP7pVc5tquSCNRUYUajzPZnXWpgXFRothuDFYUvARhOCEsi4dnnsqcdmyctzLSRPeOu1SRfDkYT2NajvbG1CBwhhXn7TxyVUmLoc2KajppCqPpiChi+N5zk/vJFi1m4ocQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2016 15:28:36.6598 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2246 X-SW-Source: 2016-08/txt/msg00702.txt.bz2 On Fri, Aug 19, 2016 at 11:41:46AM -0300, Adhemerval Zanella wrote: > This patch adds two new macros for internal and inline syscall to use > within GLIBC: INTERNAL_SYSCALL_CALL and INLINE_SYSCALL_CALL. They are > similar to the old INTERNAL_SYSCALL and INLINE_SYSCALL with the difference > the new macros accept a variable argument call and do not require to pass > the expected argument size. > > The advantage is it is possible to use variable argument macros like > SYSCALL_LL{64} without the need to also handle the argument size. So > for an ABI where SYSCALL_LL might split the argument in high and low > parts, instead of: > > INTERNAL_SYSCALL_DECL (err); > #if ... > INTERNAL_SYSCALL (syscall, err, 2, SYSCALL_LL (len)); > #else > INTERNAL_SYSCALL (syscall, err, 1, SYSCALL_LL (len)); > #endif > > It will be just: > > INTERNAL_SYSCALL_CALL (syscall, err, SYSCALL_LL (len)); > > The INLINE_SYSCALL_CALL follows the same semanthic regarding the argument > and is similar to INLINE_SYSCALL regarding setting errno. > > * sysdeps/unix/sysdep.h (__INTERNAL_SYSCALL0): New macro. > (__INTERNAL_SYSCALL1): Likewise. > (__INTERNAL_SYSCALL2): Likewise. > (__INTERNAL_SYSCALL3): Likewise. > (__INTERNAL_SYSCALL4): Likewise. > (__INTERNAL_SYSCALL5): Likewise. > (__INTERNAL_SYSCALL6): Likewise. > (__INTERNAL_SYSCALL7): Likewise. > (__INTERNAL_SYSCALL_NARGS_X): Likewise. > (__INTERNAL_SYSCALL_NARGS): Likewise. > (__INTERNAL_SYSCALL_CONCAT_X): Likewise. > (__INTERNAL_SYSCALL_CONCAT): Likewise. > (__INTERNAL_SYSCALL_DISP): Likewise. > (INTERNAL_SYSCALL_CALL): Likewise. > (__SYSCALL_CALL): Rename to INLINE_SYSCALL_CALL. > (SYSCALL_CANCEL): Replace __SYSCALL_CALL with INLINE_SYSCALL_CALL. > --- > sysdeps/unix/sysdep.h | 42 +++++++++++++++++++++++++++++++++++++++--- > 2 files changed, 56 insertions(+), 3 deletions(-) > > diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h > index 94a2ce0..2253603 100644 > --- a/sysdeps/unix/sysdep.h > +++ b/sysdeps/unix/sysdep.h > @@ -24,6 +24,37 @@ > #define SYSCALL__(name, args) PSEUDO (__##name, name, args) > #define SYSCALL(name, args) PSEUDO (name, name, args) > > +#define __INTERNAL_SYSCALL0(name, err) \ > + INTERNAL_SYSCALL (name, err, 0) > +#define __INTERNAL_SYSCALL1(name, err, a1) \ > + INTERNAL_SYSCALL (name, err, 1, a1) > +#define __INTERNAL_SYSCALL2(name, err, a1, a2) \ > + INTERNAL_SYSCALL (name, err, 2, a1, a2) > +#define __INTERNAL_SYSCALL3(name, err, a1, a2, a3) \ > + INTERNAL_SYSCALL (name, err, 3, a1, a2, a3) > +#define __INTERNAL_SYSCALL4(name, err, a1, a2, a3, a4) \ > + INTERNAL_SYSCALL (name, err, 4, a1, a2, a3, a4) > +#define __INTERNAL_SYSCALL5(name, err, a1, a2, a3, a4, a5) \ > + INTERNAL_SYSCALL (name, err, 5, a1, a2, a3, a4, a5) > +#define __INTERNAL_SYSCALL6(name, err, a1, a2, a3, a4, a5, a6) \ > + INTERNAL_SYSCALL (name, err, 6, a1, a2, a3, a4, a5, a6) > +#define __INTERNAL_SYSCALL7(name, err, a1, a2, a3, a4, a5, a6, a7) \ > + INTERNAL_SYSCALL (name, err, 7, a1, a2, a3, a4, a5, a6, a7) > + > +#define __INTERNAL_SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n Missed whitespaces after commas? > +#define __INTERNAL_SYSCALL_NARGS(...) \ > + __INTERNAL_SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) Same > +#define __INTERNAL_SYSCALL_CONCAT_X(a,b) a##b Same > +#define __INTERNAL_SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) > +#define __INTERNAL_SYSCALL_DISP(b,err,...) \ > + __INTERNAL_SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(err,__VA_ARGS__) Missed whitespaces after commas and before opening braces? > + > +/* Issue a syscall defined by syscall number plus any other argument required. > + It is similar to INLINE_SYSCALL macro, but without the need to pass the Did you mean INTERNAL_SYSCALL macro? > + expected argument number as second parameter. */ > +#define INTERNAL_SYSCALL_CALL(nr, err, ...) \ > + __INTERNAL_SYSCALL_DISP (__INTERNAL_SYSCALL, nr, err, __VA_ARGS__) > + > #define __SYSCALL0(name) \ > INLINE_SYSCALL (name, 0) > #define __SYSCALL1(name, a1) \ > @@ -49,17 +80,22 @@ > #define __SYSCALL_DISP(b,...) \ > __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) > > -#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) > +/* Issue a syscall defined by syscall number plus any other argument required. > + Any error will be handled using arch defined macros and errno will be se > + accordingly. > + It is similar to INLINE_SYSCALL macro, but without the need to pass the > + expected argument number as second parameter. */ > +#define INLINE_SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) Missed whitespaces after commas and before opening braces? > > #define SYSCALL_CANCEL(...) \ > ({ \ > long int sc_ret; \ > if (SINGLE_THREAD_P) \ > - sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ > + sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \ > else \ > { \ > int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ > - sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ > + sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \ > LIBC_CANCEL_RESET (sc_cancel_oldtype); \ > } \ > sc_ret; \ > -- > 2.7.4