Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753850AbdFSPyP (ORCPT ); Mon, 19 Jun 2017 11:54:15 -0400 Received: from mail-dm3nam03on0089.outbound.protection.outlook.com ([104.47.41.89]:6488 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752637AbdFSPyJ (ORCPT ); Mon, 19 Jun 2017 11:54:09 -0400 Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=caviumnetworks.com; From: Yury Norov To: Catalin Marinas , Arnd Bergmann , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: Yury Norov , Adam Borowski , Andreas Schwab , Andrew Pinski , Bamvor Zhangjian , Chris Metcalf , Chris Metcalf , Florian Weimer , Heiko Carstens , James Hogan , James Morse , Joseph Myers , Maxim Kuvyrkov , Nathan_Lynch@mentor.com, Prasun.Kapoor@caviumnetworks.com, Ramana Radhakrishnan , Steve Ellcey , Alexander Graf , Mark Brown , christoph.muellner@theobroma-systems.com, davem@davemloft.net, Geert Uytterhoeven , Alexey Klimov , linyongting@huawei.com, manuel.montezelo@gmail.com, philipp.tomsich@theobroma-systems.com, schwidefsky@de.ibm.com, szabolcs.nagy@arm.com, zhouchengming1@huawei.com, Bamvor Jian Zhang Subject: [PATCH 19/20] arm64:ilp32: add vdso-ilp32 and use for signal return Date: Mon, 19 Jun 2017 18:50:02 +0300 Message-Id: <20170619155003.13218-20-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170619155003.13218-1-ynorov@caviumnetworks.com> References: <20170619155003.13218-1-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [85.253.137.34] X-ClientProxiedBy: VI1P190CA0025.EURP190.PROD.OUTLOOK.COM (10.165.188.166) To BLUPR0701MB1857.namprd07.prod.outlook.com (10.162.88.143) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7edfdf53-6ee5-4abb-ac24-08d4b72b6267 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:BLUPR0701MB1857; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;3:n6oHSfDPz9nv5GqiiD155lbnHnXWdMuHeJy4VyEXfRSO9FMBFBjdzbGlYBzAT/XfMSIrKdkq3TkZd/xadjHpd0fZ65tYT83/PxfD3XcjloxveB+oyWUCyjTZ7AAWfah4PwLMQJ01+dH6NVZFGMWJgCKRmj+B4qGKIi8bsKV4EPZ1evfOvPeXsXtkxITD2jfqUhLwbCJIcA3gUUYPC32kRvFgJEEcVhanEyjmufmuVi/E18JYACXTeeVH16iL0palzw7pexEqLk8Bj+v6LIO/wt+dAz1wXfe0+51WEY2NkztHaSTGFWOjIax3qr1vN3a4ScYySnt3MceDxCbLC1Piqw== X-MS-TrafficTypeDiagnostic: BLUPR0701MB1857: X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;25:Eikyvkn6TQj4yznMvdslSol7H7GzGNOWH4P+XaNAhcBVFoN3CA2XCV1l3iFnkALjJEhcSm5nO2LEtTcdu/xxswi4ZDloSmIZQMhN4TFew47up/xpEkCuAOwSI1ZpU9lqLqVj6vZKeRezYTlO8UTyRbXIbcw98JU8+v7gbEaUzxgUZrNfXItFSc5lRxL5FcwLOqGFI27rqOCspJG2BYHH+T72BsDKG5ee44jmincq9W2HmMYhyzO1lpjx+H9FpzAPh60ymPBmk/5sqL8fhPairXLAfo2bJ6rp2kF0E6qLTPvK757IDCEx4dnZk/gIFcuacIyyQ1T2tXVEOtxqRhG6jX9co9z2Pm0coSgMUGU066uo1jgFIQyb2V7tnarL5pPiR9RiTxAS+bStZMXccg2VYLKThSHYAOtaewYFiIvebux2o9iy1bh8ZX0ke38lc57hCZCLxXrSW9vi2fItGwtMy3T39Sa9WiHHZNow4A3ZHmssAYN8CxvMH3vy/YJQqyk0iNThTHrnVlV9JGPKUvA4GqvaHF0ZJkada8+4YxMFKsQDLiVD6oV//W2dke6oB4GbgVxZifqseFILNHL0idzyN1EzoU1vZTbvB6oFcDPPVUgHGdouohcFTNYBQdu9cegn34c6F+blNF7Tdk4GDRWgkUl+5Agb1Rr1otNXk8CHlL1FJTr0kGvKO1h4XvZ44DSuAY3IKvRKbgB8LeH+OCT1HG9dBixXVA0C24gWZmJJwI/9Eo9i+OXK5P9AAHM5E+szToUkVel3EeS1QX9JEm+SojPw3C/NTkeK1zXV8Zlo/5ILMMHi+nJyDt5Au4U0epVejZfaOPr/Caqr7JDwA4/cnz7V1qNMBpOcrrNU/yJ/luRMmwiS73paWk98+3YvXIgkiCBFDPwxUDvIWHRC+FmijlNwSWD6SKeCj86HJ5apdwA= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;31:YEGVo3/aa5AkzuKay5KUPJiRIHdPeje+ZkoNSS8QUC3rVd9edkspe5TkoiCT+8KBN7eXANgBjKaWpIaLH7hRzadzgYpO6C/IrDTF2Q7w8tlwJFafgSY0aRQ5jv2cNHn/dOqvpXhf5BfHmmAEUfb/m+Yq8MUDZNQWkoQb7hm9Qc/RUNX0X4wVu+viTDeAGTO3Wd4viqzvMfFfVMclOdlvJxavsquhDB/IIxn7fG2oMbkVTnY8/xXK/KXeWK+5MCmdTSJYO636mAjOUKTk4OwKrm2Y1mLnNSEycUcPwL4Mi2evLC6J9wTUYgb+iTsSVzsltqyx0qt7VP6miaS2hoXZAJD76DKZG99bDNQB1TPBtZZdoYIjDCEhjYH0oEjI7PJjTlCUhc5LV3iOMRVhTyT9nUuiANSk7MrOIaMas6tlcqXAO3tLp+yGYHeryueRipqfcQ74sLSDMbq7ckhsIorh/z+iLmLSg9uC/QoivCNwQAFPpiyXY5lVwVWJnZAbgLlz8f7QJRNA/ookOC2ujMRWx7mAfIJT0kQEAHBMTP5BNiNYp6HukT1q3Xc7l0Bbo38Ux2oob/StCEpeGOcIHsgX6WhnBw/9PlYZcCLT/KD0dl0= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;20:100VHU1VEaG3PFzKefXvXIgLGYKtlBA4HwZtj00lLhOzwGGvz8EuJod6D8IoyojobNjqREX/RN0nN6tIBwBRxmhm2stdIMniXHQ7tg4UVGAoumVhJUF9B21TP+djf1guK0lwbnEfzf31SQ+dqjBzdfp1sJiMDTu/ooSr5j03nnuy9TyL2r4l1uQxDGQ31Yw+oAuePYOQroXV+nbbBQN0XNPO6LdWqPJpLsbcQ18jiNa0QPsvwzNSEyy3COh1FwEWS8woTuda/5JgJ264Wf4iW7sKWnBh9bG/MOv6ICIaJQJqRcKYnMdJvGIvvDLQbbA7ThLzWyFh+p+hRLSIR6QH4XYEvgq4LAjpn0gZLeLQdZYNhfH+NIVzr5X/kEJhKnCrRofdsBD6vvFWeLcoEXn8fR5k/otdKIq3YTkG/YzpwILHDoUAwYMRz8J6sJzw8t1GtN5OQ9WHSJuGsqhHpG3WGLJwcI/FN1an0v3osdWdGalrYD+5Oy9g2GVS2+7iSG2X3oP2v9TovoTemQsh5aBxB/HeIGqV3QQDHBnVWKzeZH1hkyBTo7pvBdEPaeBMH6P8Wv9jXBLEywluWYF7PuzKs2P/u4pv0PPXDYQYl0yVUhU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(180628864354917)(22074186197030); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(3002001)(100000703101)(100105400095)(10201501046)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BLUPR0701MB1857;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BLUPR0701MB1857; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0701MB1857;4:tTymIXUp9ZLZSuScVf7Nl+midLSBgt1r4fyZO5SV?= =?us-ascii?Q?KZXZiZ3uABuz/9BapRhpFgSuEimvrp6Nf3ERy6zhBZ7hVoqWGSOnT5yXRN3l?= =?us-ascii?Q?JkCbUQBNExa74AlUjbFQRYSjhi4YAOtYhNjWAFktn4El3gQiseX7ZgqxISG8?= =?us-ascii?Q?n5Sxo4eNRGiQZYb1Nnk9I68dSh7JFd+8wihDKH19LtYO84A2EQsU9N/YmJc8?= =?us-ascii?Q?/8INqaAczyArflOVH0+FL6n+TVTgjRg9dgFT5whBL5KvrKgzHabUx1PVyRv5?= =?us-ascii?Q?inRFzmsKYop1SIB8NNC2UtMq1HB31smtOvm51JPmq9qOPP9kwfk4YZikherQ?= =?us-ascii?Q?Qi4A2zC4lc2fp8JpY+3rSAznwHKLU/n1P0g8aohfP55ygbZCwzz4UU1BoTKt?= =?us-ascii?Q?BxnJ3PjlKYYNyP3jqjPjLGCiCTSc690jbR2NOti9/yZj2KLSrpHH9+CS4Jbv?= =?us-ascii?Q?ZDZPhf2ftmn3GyNWgdVHt+oz66Y9GgBPROHWn8UA4DLWxntYxELboiru1J3r?= =?us-ascii?Q?8XDKOqqb/N7eMpoEuRHi/cjEucuVVD9bqqSNUN5hgXLfbDM3s2uiOQtW/mg5?= =?us-ascii?Q?69TccDXPQZ1UTWVIDljXL4Nvv7RSBHCsHkQ3ZHLyEOnuAIGHZB22fftOM6+q?= =?us-ascii?Q?O1gWlwODwlCokRa+5NFEdfVSevjVkNo/w2zSUWpHHUChjTVI74jrlHHnUosa?= =?us-ascii?Q?QqOgi9C4xNRqYnGC6G5fPhRetSRYROETlB1ikKfAKyyKmYX+qfy0xnTXLA1q?= =?us-ascii?Q?8wtCu6oAQDmSDbz9AYzzKIAmS0jjtV1FsSZRa4wgS3SQn+L7KSBa8PCqrz5/?= =?us-ascii?Q?5tAlIirAG/6BWbLqZgjoYS7mruCzATj3mktd62/SayddLmK4a8kbhdQuKCHx?= =?us-ascii?Q?/DLYyAvSqsp603jH476MKukyZP1VEHWUsTzRJWRgGCl39S2Zr48JeRAPOIhh?= =?us-ascii?Q?8FOLdcxsMtIPxlBAc7DnJJEjTxy/57KoYX4eSvglq+a6qfs0y751UE/RKSb/?= =?us-ascii?Q?Sa5fo8egRpFFPagmOgCAy+wz2TQjaK+oW57xuPYese/uEjlCQT1W4uSgUSRN?= =?us-ascii?Q?dnc2ZNu6u5fs0L+8KWm+z7tNv82mqK0GqlpA/QGflwZC2T4rNEkhuGOC2MGr?= =?us-ascii?Q?63Eo8w/X3iW9YPTLDTD48O6Nz8BtK2emlhLeBMOeaPB6t/MGwBPqk19kodtr?= =?us-ascii?Q?lQesThGAeOBf64puOXqVBAUpKdfvIuZZ5yYjSiaqwSeTpoZwPupawAp6Lw?= =?us-ascii?Q?=3D=3D?= X-Forefront-PRVS: 0343AC1D30 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(39410400002)(39840400002)(39850400002)(39400400002)(39450400003)(6306002)(76506005)(54906002)(5003940100001)(47776003)(42186005)(6486002)(5660300001)(66066001)(2906002)(72206003)(33646002)(50466002)(48376002)(1076002)(6116002)(36756003)(3846002)(7416002)(478600001)(6666003)(2950100002)(81166006)(42882006)(76176999)(6496005)(38730400002)(50226002)(53936002)(25786009)(7736002)(8676002)(189998001)(50986999)(7406005)(305945005);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR0701MB1857;H:localhost;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0701MB1857;23:MPbl1YIV2LzeXQBwq04O+e48TGetuDnMcZZnVDX?= =?us-ascii?Q?bVbZ45Lq950QPgJEd5XKknzoIxpY/+lDvRmssJ/cUvnBmhBDMliFY/C/2UqR?= =?us-ascii?Q?Pks0g2WKLlFS9YjdIOrW1t5ncvz7sen60Zeo8q5vNb3/085TE+ORcmz06h3Q?= =?us-ascii?Q?lWm6GNynNbkjy/m+TReANUUWpEi6A1SmVAxoy89ER9ivhb1qPQeIa54ONVyr?= =?us-ascii?Q?LXF4wq1SyZZiMwT6QuPVCavwGB2BUa9Qsnp6XzMSiTJU3qP0VBbSdBd0iM2Z?= =?us-ascii?Q?4/TAsYV876H+vEb9T+uMuqCyO4F9ZqV4/sW0i17nYmOdMuVGVw51Hxp0Awo2?= =?us-ascii?Q?0dPz8P5oOa8JX1HfRX+7lkeMRh3FGfVJJBiEOJTwnuu/URx/6jdl1gNa25Zu?= =?us-ascii?Q?qfq2yQvrW1uFEMg3fWcihNvpCifbvDb05drpT2LAZ9GHyU5CuyMYP5warcQU?= =?us-ascii?Q?p/m4t8+/oNj0KGGuaQ7HXf7dHX0FjX8lJkoE/vBWwffgXts747QXo+DeMXF3?= =?us-ascii?Q?IoJbbwoSivXWDn+3ei3LwYZrhpPUhiCyC2Jk7UkwaHi6SZT7PmcLHkAnY/Px?= =?us-ascii?Q?trxO8W15TsPo+eJs7lKprZsUurujNZe6vC4nJwfEPFVZ/EefBdh7t6VbC/0z?= =?us-ascii?Q?q+TglmJNuRolqyTi4h3YQnSl9YG00QLh0dhUbq9gGiP5d/QeZQCWVjGukW3M?= =?us-ascii?Q?coR70AliHGZMXOTGwdfbQ8CwmrTrEtDkmcRm0qQOg4SLJMOPDoaFYs4VlPrS?= =?us-ascii?Q?lUlalDrClly8G7R+tfVFcsK3uePlTMkR4Iggn9czSs944YYwUEW6Yjnf+fCI?= =?us-ascii?Q?fGPQU7Vd/16LQybs5xfheS3p77kltpDMMgCG1A6DNKC/C4hizgStzldZ7A3u?= =?us-ascii?Q?4HXJpwJseLb8Q/zcYpfK5YbGyLS0qqKRZ67dcn/MZz6Z5iVM1CcZzq6+5L20?= =?us-ascii?Q?Hxj4DeJHZ56hubd/meeT2pa7Jr3XQFk1UJeqXfxBD95d+uRTV0A1VAOyfFxm?= =?us-ascii?Q?qr/pC/skfPVbCvfAtDB+f5wOE0LGiWU1jED3Is7EQv7aeQiq12x4mmBvDT9K?= =?us-ascii?Q?IBMGWS3YZj34yVRLaME8Ts/dklEFM+V9u/Tu1KZW5zwxNu9hBMA=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0701MB1857;6:6zu8DXG3ly2GuFVfnHKQZd4Wx/ilN419s/f2cXUM?= =?us-ascii?Q?YV4x3RM0b6IwwTIxCmErzWU2g/YkLWFCNyxRBsCMJXvbGSAPYSJBvW1BzVyW?= =?us-ascii?Q?Yu/I7EuBnJcfTOkAwPlWwonwjvnXyC9zyo2r70f6VsH94ix3tlDBvlEQZVW1?= =?us-ascii?Q?rCQueIy7cqzCIuRSU1NlGC0/bYGQsqcrHlpdWdDTNJhy8YG94leKNmQIuV1p?= =?us-ascii?Q?X/l9MjBWCBPrCToRxn0DCw5OYKxC0bB6h68TvZY2Vz+EqJIXENtPePg1fU5b?= =?us-ascii?Q?c7tsnUfGsb/Urj+VBwpHa71kH3SpKY9i0QSOC/B0yAqQ1oQInibedDznD9Xt?= =?us-ascii?Q?J+onIqcOn3/07QpD3NC2zP46qM8ZsL/j1uVd1MMjAbAfhsc4AZ+Cf7xu2vx3?= =?us-ascii?Q?aS3PSR9BL2vKTRTMma05ISdFl8M2H4R0AlGoPjmyCymyqOMft3j4rTt9/O0Z?= =?us-ascii?Q?LATgz/k19oBUlNx3S10EVQM+//S9y8Eh9yYdLsuOc9IaYa6LVuGzBx8MEZXq?= =?us-ascii?Q?VTbBR1UapgELRtoWab8UyZuoZe3bO2xJJl1JZmr+ONLEZVdwOZ9apPkmaVzZ?= =?us-ascii?Q?4+TZIklLZ2PrKfNcCy1GCmt4NZQP7oLrU/F2GKkznMmhH1UC9sxiyzjJS+7D?= =?us-ascii?Q?7WNFXIs7MXZMTjg4PuglRX0RwfjppaodbbLsqZ2L877lRs/A3Gl7GXGNAmX7?= =?us-ascii?Q?sRUA4Sls+o277m2QK56iK5vtfwaZ94WgCsmThTjYrbRFlzJvaXhas1ll5Jd4?= =?us-ascii?Q?FIxhPDJW+SqLb8YWyis5EegcPxulG+GD1rYr0KSPybXyJFeiMGh/hp4ggjsP?= =?us-ascii?Q?Gp+To4h/F02hXMRROVNI5kts8EzFk9FTji3WpuPgx8ldG5+0qSl+CDKEebZm?= =?us-ascii?Q?7z07hWIsTQhkPx/zbzD3e9KUFiLvJ/pxqVn/Vad9lcUmTnVyQ2FI/n9zBc3i?= =?us-ascii?Q?ZOlmhH8oynf56Ce/cJ2IIdGXsHLXwtLzV6mKTjUiimEmH055RlzM9SA4+Mv5?= =?us-ascii?Q?PxA=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;5:rp0omiroYIfSLYVpZYEc70rHn2eIXwhssABLRfyslq3Tf4yhWXlQdSxyEWiL1AMBOQZvFAYoxtevKm9jmA3DLFomDz24i5cl+p4zDbWqGObGDubHihXf39J3hWypA8i3muMedsKhw9Q6m9vCxNVBjmGYlZZaPZPQNS2jwXayAezP0J6aFzmyOlbniWCxJSP07Vb0uwPVvufWq2L2Mq2Y5eswfWPQ3RDuFAIbfouPW1wxK1coEJmd4mQdBqs0JCeHi2ULeDX7YWBOiDvG4p+SKhIqB9/o0kui+7kG44ST4Cf3eHWViU8uQVIh3U4EPSnoTdB77r2ZIOhDOZJtES9wBs5JitFAlRE7Dmzj1oSTZLbeJCjUkV/j4wyDpkzOWV9VW96rxlvD6SXou9BSvPnLzEuCeB+QLztzxPq12P5Jwd13eGNTL284SFbUVtk1YtpPwNBBgWrOc0f22GT2tqVFmnicddhvOdAnTtvspd87CY4RbXQau+QykrB/5xmJgOyr;24:EEs/7K9Z+rrgE17eGP2dBb30jQI40RnbNmrHEPF2DC8vmPfyjgDPgWkNVZ9iyPNflLvEYaI4WrqgCIUGcM2l7lVTE/Xggn7oifUE08vDOGM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BLUPR0701MB1857;7:S15wVJxDyS24Dbs4CTN5CjSTItN/M1L52+fkcnShdD3NrlKy3XhdFCvGONw98cOTWPjWEOOfqPFWKUMufzaYWHukUydsifrHffuqwy0G6bO/hqhEWx86fm/bkVE05w5kZhV8g5b+6CNtfDSoFhpyWtFlmlfp0yP7/w0o9R4+Qe4lTm5FoqVgk9rixY7jUK0nVgn8K0OCyo17tRPsyeWESW3Wi7TfSfczZL1J21m0RYCjG83MSJtjv2deNnDn828cpXV5LqEmcFPfKAopQOE/waKcIFG93JLawslC2zcBqaPZeK+ofgQpR+pJEfgHxT4Wz5lJ80oBNLzvOn6YyBTh8M9IviNrxoxHF6VmMfp97rMQie2wM1d4NAjjLzoeqJPamk1y/JA+qyQhfnDejbqAs9K5CBPciENofZpndxegWiCIYAuHaUPuG8oBoLqITztqh3sRnSFa7hmlDBd4sQpDT6l+W8LVBlJ4SKhFTFTH2I3+fKEmD/Hh7MKDUH/Sf9JsMdiaSe4UDqVT2BaM/JuiJUsaeHkvfM8i47c4BGRTk9DEy6eOkhmv6Iz/qQ2P7Wydkh2W4yClTKQRKrrCXQzAxi57YdILJmRamQKXE2X3UfmzPAV8Oc1yXQTplUmxl8vmVMamflFXjPxmkJb54aEn+nVUax2QRQHIHr3vrRrL/vbt7rul0LrgLbdL5V0EeZE68Ozx0yFdusBQWNRizAGj+ObyfbafpGpwm2rCGoelbsLmmiIlVl49Gy7Cyl3EKokfPslW+ok37x2CzVeibz5Q0EY26kUg5VX9RC/xyK5Pu+o= X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2017 15:53:52.4770 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1857 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 17300 Lines: 551 From: Philipp Tomsich ILP32 VDSO exports following symbols: __kernel_rt_sigreturn; __kernel_gettimeofday; __kernel_clock_gettime; __kernel_clock_getres. What shared object to use, kernel selects depending on result of is_ilp32_compat_task() in arch/arm64/kernel/vdso.c, so it substitutes correct pages and spec. Adjusted to move the data page before code pages in sync with commit 601255ae3c98 ("arm64: vdso: move data page before code pages") Signed-off-by: Philipp Tomsich Signed-off-by: Christoph Muellner Signed-off-by: Yury Norov Signed-off-by: Bamvor Jian Zhang --- arch/arm64/Makefile | 3 + arch/arm64/include/asm/vdso.h | 6 ++ arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/asm-offsets.c | 7 ++ arch/arm64/kernel/signal.c | 2 + arch/arm64/kernel/vdso-ilp32/.gitignore | 2 + arch/arm64/kernel/vdso-ilp32/Makefile | 80 ++++++++++++++++++++++ arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S | 33 ++++++++++ arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S | 95 +++++++++++++++++++++++++++ arch/arm64/kernel/vdso.c | 59 +++++++++++++++-- arch/arm64/kernel/vdso/gettimeofday.S | 20 +++++- arch/arm64/kernel/vdso/vdso.S | 6 +- 12 files changed, 301 insertions(+), 13 deletions(-) create mode 100644 arch/arm64/kernel/vdso-ilp32/.gitignore create mode 100644 arch/arm64/kernel/vdso-ilp32/Makefile create mode 100644 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S create mode 100644 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 807451ffcc29..b4e3537db2b0 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -155,6 +155,9 @@ archclean: prepare: vdso_prepare vdso_prepare: prepare0 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso include/generated/vdso-offsets.h +ifeq ($(CONFIG_ARM64_ILP32), y) + $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso-ilp32 include/generated/vdso-ilp32-offsets.h +endif define archhelp echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' diff --git a/arch/arm64/include/asm/vdso.h b/arch/arm64/include/asm/vdso.h index 839ce0031bd5..33a4e10014aa 100644 --- a/arch/arm64/include/asm/vdso.h +++ b/arch/arm64/include/asm/vdso.h @@ -29,6 +29,12 @@ #include +#ifdef CONFIG_ARM64_ILP32 +#include +#else +#define vdso_offset_sigtramp_ilp32 ({ BUILD_BUG(); 0; }) +#endif + #define VDSO_SYMBOL(base, name) \ ({ \ (void *)(vdso_offset_##name - VDSO_LBASE + (unsigned long)(base)); \ diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index a228aa7abc03..527fecea4e51 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -58,6 +58,7 @@ arm64-reloc-test-y := reloc_test_core.o reloc_test_syms.o arm64-obj-$(CONFIG_CRASH_DUMP) += crash_dump.o obj-y += $(arm64-obj-y) vdso/ probes/ +obj-$(CONFIG_ARM64_ILP32) += vdso-ilp32/ obj-m += $(arm64-obj-m) head-y := head.o extra-y += $(head-y) vmlinux.lds diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index aec5b6cedc7c..c8a09718e998 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c @@ -121,6 +121,13 @@ int main(void) DEFINE(TSPEC_TV_SEC, offsetof(struct timespec, tv_sec)); DEFINE(TSPEC_TV_NSEC, offsetof(struct timespec, tv_nsec)); BLANK(); +#ifdef CONFIG_COMPAT + DEFINE(COMPAT_TVAL_TV_SEC, offsetof(struct compat_timeval, tv_sec)); + DEFINE(COMPAT_TVAL_TV_USEC, offsetof(struct compat_timeval, tv_usec)); + DEFINE(COMPAT_TSPEC_TV_SEC, offsetof(struct compat_timespec, tv_sec)); + DEFINE(COMPAT_TSPEC_TV_NSEC, offsetof(struct compat_timespec, tv_nsec)); + BLANK(); +#endif DEFINE(TZ_MINWEST, offsetof(struct timezone, tz_minuteswest)); DEFINE(TZ_DSTTIME, offsetof(struct timezone, tz_dsttime)); BLANK(); diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c index b78f4c255636..a7f201dba9de 100644 --- a/arch/arm64/kernel/signal.c +++ b/arch/arm64/kernel/signal.c @@ -267,6 +267,8 @@ void setup_return(struct pt_regs *regs, struct k_sigaction *ka, if (ka->sa.sa_flags & SA_RESTORER) sigtramp = ka->sa.sa_restorer; + else if (is_ilp32_compat_task()) + sigtramp = VDSO_SYMBOL(current->mm->context.vdso, sigtramp_ilp32); else sigtramp = VDSO_SYMBOL(current->mm->context.vdso, sigtramp); diff --git a/arch/arm64/kernel/vdso-ilp32/.gitignore b/arch/arm64/kernel/vdso-ilp32/.gitignore new file mode 100644 index 000000000000..61806c3fd68b --- /dev/null +++ b/arch/arm64/kernel/vdso-ilp32/.gitignore @@ -0,0 +1,2 @@ +vdso-ilp32.lds +vdso-ilp32-offsets.h diff --git a/arch/arm64/kernel/vdso-ilp32/Makefile b/arch/arm64/kernel/vdso-ilp32/Makefile new file mode 100644 index 000000000000..8fac22a8b90e --- /dev/null +++ b/arch/arm64/kernel/vdso-ilp32/Makefile @@ -0,0 +1,80 @@ +# +# Building a vDSO image for AArch64. +# +# Author: Will Deacon +# Heavily based on the vDSO Makefiles for other archs. +# + +obj-ilp32-vdso := gettimeofday-ilp32.o note-ilp32.o sigreturn-ilp32.o + +# Build rules +targets := $(obj-ilp32-vdso) vdso-ilp32.so vdso-ilp32.so.dbg +obj-ilp32-vdso := $(addprefix $(obj)/, $(obj-ilp32-vdso)) + +ccflags-y := -shared -fno-common -fno-builtin +ccflags-y += -nostdlib -Wl,-soname=linux-ilp32-vdso.so.1 \ + $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) + +# Disable gcov profiling for VDSO code +GCOV_PROFILE := n + +# Workaround for bare-metal (ELF) toolchains that neglect to pass -shared +# down to collect2, resulting in silent corruption of the vDSO image. +ccflags-y += -Wl,-shared + +obj-y += vdso-ilp32.o +extra-y += vdso-ilp32.lds +CPPFLAGS_vdso-ilp32.lds += -P -C -U$(ARCH) -mabi=ilp32 + +# Force dependency (incbin is bad) +$(obj)/vdso-ilp32.o : $(obj)/vdso-ilp32.so + +# Link rule for the .so file, .lds has to be first +$(obj)/vdso-ilp32.so.dbg: $(src)/vdso-ilp32.lds $(obj-ilp32-vdso) + $(call if_changed,vdso-ilp32ld) + +# Strip rule for the .so file +$(obj)/%.so: OBJCOPYFLAGS := -S +$(obj)/%.so: $(obj)/%.so.dbg FORCE + $(call if_changed,objcopy) + +# Generate VDSO offsets using helper script +gen-vdsosym := $(srctree)/$(src)/../vdso/gen_vdso_offsets.sh +quiet_cmd_vdsosym = VDSOSYM $@ +define cmd_vdsosym + $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ +endef + +include/generated/vdso-ilp32-offsets.h: $(obj)/vdso-ilp32.so.dbg FORCE + $(call if_changed,vdsosym) + +# Assembly rules for the .S files +#$(obj-ilp32-vdso): %.o: $(src)/../vdso/$(subst -ilp32,,%.S) +# $(call if_changed_dep,vdso-ilp32as) + +$(obj)/gettimeofday-ilp32.o: $(src)/../vdso/gettimeofday.S + $(call if_changed_dep,vdso-ilp32as) + +$(obj)/note-ilp32.o: $(src)/../vdso/note.S + $(call if_changed_dep,vdso-ilp32as) + +# This one should be fine because ILP32 uses the same generic +# __NR_rt_sigreturn syscall number. +$(obj)/sigreturn-ilp32.o: $(src)/../vdso/sigreturn.S + $(call if_changed_dep,vdso-ilp32as) + +# Actual build commands +quiet_cmd_vdso-ilp32ld = VDSOILP32L $@ + cmd_vdso-ilp32ld = $(CC) $(c_flags) -mabi=ilp32 -Wl,-n -Wl,-T $^ -o $@ +quiet_cmd_vdso-ilp32as = VDSOILP32A $@ + cmd_vdso-ilp32as = $(CC) $(a_flags) -mabi=ilp32 -c -o $@ $< + +# Install commands for the unstripped file +quiet_cmd_vdso_install = INSTALL $@ + cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ + +vdso-ilp32.so: $(obj)/vdso-ilp32.so.dbg + @mkdir -p $(MODLIB)/vdso + $(call cmd,vdso_install) + +vdso_install: vdso-ilp32.so diff --git a/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S new file mode 100644 index 000000000000..46ac0728443c --- /dev/null +++ b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 ARM Limited + * + * 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 . + * + * Author: Will Deacon + */ + +#include +#include +#include +#include + + __PAGE_ALIGNED_DATA + + .globl vdso_ilp32_start, vdso_ilp32_end + .balign PAGE_SIZE +vdso_ilp32_start: + .incbin "arch/arm64/kernel/vdso-ilp32/vdso-ilp32.so" + .balign PAGE_SIZE +vdso_ilp32_end: + + .previous diff --git a/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S new file mode 100644 index 000000000000..c82098f7037d --- /dev/null +++ b/arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S @@ -0,0 +1,95 @@ +/* + * GNU linker script for the VDSO library. + * + * Copyright (C) 2012 ARM Limited + * + * 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 . + * + * Author: Will Deacon + * Heavily based on the vDSO linker scripts for other archs. + */ + +#include +#include +#include + +SECTIONS +{ + PROVIDE(_vdso_data = . - PAGE_SIZE); + . = VDSO_LBASE + SIZEOF_HEADERS; + + .hash : { *(.hash) } :text + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + + .note : { *(.note.*) } :text :note + + . = ALIGN(16); + + .text : { *(.text*) } :text =0xd503201f + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + + .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr + .eh_frame : { KEEP (*(.eh_frame)) } :text + + .dynamic : { *(.dynamic) } :text :dynamic + + .rodata : { *(.rodata*) } :text + + _end = .; + PROVIDE(end = .); + + /DISCARD/ : { + *(.note.GNU-stack) + *(.data .data.* .gnu.linkonce.d.* .sdata*) + *(.bss .sbss .dynbss .dynsbss) + } +} + +/* + * We must supply the ELF program headers explicitly to get just one + * PT_LOAD segment, and set the flags explicitly to make segments read-only. + */ +PHDRS +{ + text PT_LOAD FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */ + dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ + note PT_NOTE FLAGS(4); /* PF_R */ + eh_frame_hdr PT_GNU_EH_FRAME; +} + +/* + * This controls what symbols we export from the DSO. + */ +VERSION +{ + LINUX_4.12 { + global: + __kernel_rt_sigreturn; + __kernel_gettimeofday; + __kernel_clock_gettime; + __kernel_clock_getres; + local: *; + }; +} + +/* + * Make the sigreturn code visible to the kernel. + */ +VDSO_sigtramp_ilp32 = __kernel_rt_sigreturn; diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index a9f24184da38..27d7bcef9122 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c @@ -37,8 +37,13 @@ #include #include -extern char vdso_start[], vdso_end[]; -static unsigned long vdso_pages __ro_after_init; +extern char vdso_lp64_start[], vdso_lp64_end[]; +static unsigned long vdso_lp64_pages __ro_after_init; + +#ifdef CONFIG_ARM64_ILP32 +extern char vdso_ilp32_start[], vdso_ilp32_end[]; +static unsigned long vdso_ilp32_pages __ro_after_init; +#endif /* * The vDSO data page. @@ -110,7 +115,17 @@ int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp) } #endif /* CONFIG_AARCH32_EL0 */ -static struct vm_special_mapping vdso_spec[2] __ro_after_init = { +static struct vm_special_mapping vdso_lp64_spec[2] __ro_after_init = { + { + .name = "[vvar]", + }, + { + .name = "[vdso]", + }, +}; + +#ifdef CONFIG_ARM64_ILP32 +static struct vm_special_mapping vdso_ilp32_spec[2] __ro_after_init = { { .name = "[vvar]", }, @@ -118,10 +133,14 @@ static struct vm_special_mapping vdso_spec[2] __ro_after_init = { .name = "[vdso]", }, }; +#endif -static int __init vdso_init(void) +static int __init vdso_init(char *vdso_start, char *vdso_end, + unsigned long *vdso_pagesp, + struct vm_special_mapping *vdso_spec) { int i; + unsigned long vdso_pages; struct page **vdso_pagelist; unsigned long pfn; @@ -131,8 +150,10 @@ static int __init vdso_init(void) } vdso_pages = (vdso_end - vdso_start) >> PAGE_SHIFT; + *vdso_pagesp = vdso_pages; pr_info("vdso: %ld pages (%ld code @ %p, %ld data @ %p)\n", - vdso_pages + 1, vdso_pages, vdso_start, 1L, vdso_data); + vdso_pages + 1, vdso_pages, + vdso_start, 1L, vdso_data); /* Allocate the vDSO pagelist, plus a page for the data. */ vdso_pagelist = kcalloc(vdso_pages + 1, sizeof(struct page *), @@ -155,7 +176,22 @@ static int __init vdso_init(void) return 0; } -arch_initcall(vdso_init); + +static int __init vdso_lp64_init(void) +{ + return vdso_init(vdso_lp64_start, vdso_lp64_end, + &vdso_lp64_pages, vdso_lp64_spec); +} +arch_initcall(vdso_lp64_init); + +#ifdef CONFIG_ARM64_ILP32 +static int __init vdso_ilp32_init(void) +{ + return vdso_init(vdso_ilp32_start, vdso_ilp32_end, + &vdso_ilp32_pages, vdso_ilp32_spec); +} +arch_initcall(vdso_ilp32_init); +#endif int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) @@ -163,8 +199,17 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, struct mm_struct *mm = current->mm; unsigned long vdso_base, vdso_text_len, vdso_mapping_len; void *ret; + unsigned long pages = vdso_lp64_pages; + struct vm_special_mapping *vdso_spec = vdso_lp64_spec; + +#ifdef CONFIG_ARM64_ILP32 + if (is_ilp32_compat_task()) { + pages = vdso_ilp32_pages; + vdso_spec = vdso_ilp32_spec; + } +#endif - vdso_text_len = vdso_pages << PAGE_SHIFT; + vdso_text_len = pages << PAGE_SHIFT; /* Be sure to map the data page */ vdso_mapping_len = vdso_text_len + PAGE_SIZE; diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index e00b4671bd7c..062a33df4ba5 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S @@ -25,6 +25,16 @@ #define NSEC_PER_SEC_LO16 0xca00 #define NSEC_PER_SEC_HI16 0x3b9a +#ifdef __LP64__ +#define PTR_REG(n) x##n +#define OFFSET(n) n +#define DELOUSE(n) +#else +#define PTR_REG(n) w##n +#define OFFSET(n) COMPAT_##n +#define DELOUSE(n) mov w##n, w##n +#endif + vdso_data .req x6 seqcnt .req w7 w_tmp .req w8 @@ -119,7 +129,7 @@ x_tmp .req x8 .if \shift == 1 lsr x11, x11, x12 .endif - stp x10, x11, [x1, #TSPEC_TV_SEC] + stp PTR_REG(10), PTR_REG(11), [x1, #OFFSET(TSPEC_TV_SEC)] mov x0, xzr ret .endm @@ -136,6 +146,8 @@ x_tmp .req x8 /* int __kernel_gettimeofday(struct timeval *tv, struct timezone *tz); */ ENTRY(__kernel_gettimeofday) .cfi_startproc + DELOUSE(0) + DELOUSE(1) adr vdso_data, _vdso_data /* If tv is NULL, skip to the timezone code. */ cbz x0, 2f @@ -160,7 +172,7 @@ ENTRY(__kernel_gettimeofday) mov x13, #1000 lsl x13, x13, x12 udiv x11, x11, x13 - stp x10, x11, [x0, #TVAL_TV_SEC] + stp PTR_REG(10), PTR_REG(11), [x0, #OFFSET(TVAL_TV_SEC)] 2: /* If tz is NULL, return 0. */ cbz x1, 3f @@ -182,6 +194,7 @@ ENDPROC(__kernel_gettimeofday) /* int __kernel_clock_gettime(clockid_t clock_id, struct timespec *tp); */ ENTRY(__kernel_clock_gettime) .cfi_startproc + DELOUSE(1) cmp w0, #JUMPSLOT_MAX b.hi syscall adr vdso_data, _vdso_data @@ -297,6 +310,7 @@ ENDPROC(__kernel_clock_gettime) /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ ENTRY(__kernel_clock_getres) .cfi_startproc + DELOUSE(1) cmp w0, #CLOCK_REALTIME ccmp w0, #CLOCK_MONOTONIC, #0x4, ne ccmp w0, #CLOCK_MONOTONIC_RAW, #0x4, ne @@ -311,7 +325,7 @@ ENTRY(__kernel_clock_getres) ldr x2, 6f 2: cbz w1, 3f - stp xzr, x2, [x1] + stp PTR_REG(zr), PTR_REG(2), [x1] 3: /* res == NULL. */ mov w0, wzr diff --git a/arch/arm64/kernel/vdso/vdso.S b/arch/arm64/kernel/vdso/vdso.S index 82379a70ef03..a40ae2485430 100644 --- a/arch/arm64/kernel/vdso/vdso.S +++ b/arch/arm64/kernel/vdso/vdso.S @@ -21,12 +21,12 @@ #include #include - .globl vdso_start, vdso_end + .globl vdso_lp64_start, vdso_lp64_end .section .rodata .balign PAGE_SIZE -vdso_start: +vdso_lp64_start: .incbin "arch/arm64/kernel/vdso/vdso.so" .balign PAGE_SIZE -vdso_end: +vdso_lp64_end: .previous -- 2.11.0