From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754024AbcHZSvw (ORCPT ); Fri, 26 Aug 2016 14:51:52 -0400 Received: from mail-he1eur01on0137.outbound.protection.outlook.com ([104.47.0.137]:56721 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752513AbcHZSvu (ORCPT ); Fri, 26 Aug 2016 14:51:50 -0400 X-Greylist: delayed 4655 seconds by postgrey-1.27 at vger.kernel.org; Fri, 26 Aug 2016 14:51:49 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, , , , , , , , , , Dmitry Safonov Subject: [PATCHv3 4/6] x86/coredump: use pr_reg size, rather that TIF_IA32 flag Date: Fri, 26 Aug 2016 20:13:15 +0300 Message-ID: <20160826171317.3944-5-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160826171317.3944-1-dsafonov@virtuozzo.com> References: <20160826171317.3944-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR07CA0045.eurprd07.prod.outlook.com (10.164.94.141) To VI1PR0801MB1741.eurprd08.prod.outlook.com (10.168.67.19) X-MS-Office365-Filtering-Correlation-Id: 6ca9f5a1-2ebf-47a3-4cbb-08d3cdd4a362 X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;2:IKC4C+LHBz/0TgHauMxgr/PFixuQXwCareS2jso0MvPX1zcRaqAymQnubIon0BX394tDpEZ7jxbsQI+a3sqb7xrVgP2VA98vTrHfsYwR02L72ARUhJ2rc2onsvDsx1C6KlrYwcbKO2dJ12/8U8lFoPx0d8LpZUi7C72IcN7yRbD/EdZ8po+e9T/umZAD8Pcp;3:GW+kRkGiEkHlEtc6+GPWhCXdmsrgV9WGOaxKzdzZ+DSI/Jhb3WX7WBg+MmlKoHI4jF5cTLv/2nJoxlZ85wwrnZeRHehPxl05qVAFdlxSpbvp97o7rQ0kUAhzUxJI544F;25:fbUKTU8RxS4H41vLPgR4JHT2dBfoGB3EoZURW19lFeaMH6KJXBorV7jPpC+m394XFdLvi3niFWEkT/dS01cGqnpk0YZuvZZ2csr2rLFtRgqAywPM9PbzuFxWt9HbWwqUVtYB2UFeSBEY7Kh/0cwo2oI5I9qyPN+07LjMQjjHWoPXSrcP+e4YKFyUkQSfWk3gI04F8OszyMZ2p/hlrWBEMTtfgZMkJC7X5Re+Irbg9tbomSX7S52KZpzR42Atic+HYKQNJF9SZOAKnQnyqdc6xwhh0OREU43RkWiKB4euNFTaZR3KST1sGa6ppdu5TaJqZ1bGKLt5L2bMWxdKKgWzMgnhvR0OH+zNrVBrMn4PxlwCkBZqn13Vc9AzaXq2sPmnd4rQ/o+QWyO6K7UGQ1Hytg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1741; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;31:KmJLJtMD1VfoaL474xx5cH6rPWQcAp48LbnBOR4tINyOjWzNPytuZMt03+JMmsdE5q13LE68TB07BOYwn111b3FENgd8IZmYGHEnbM4bQdpeePVGmCgXgenpr+vgpl6CZI9HFZ91i3sKsTAzJ21l8CuSxkkFcd6mV+5eKrWwnh8GuIbOrfdAQsws/V+yxFZHUX4eUQMqRFwv+rc84PwpRROAGjI/2C5VEzV+o7bi5J8=;4:sXI5zksiy9CbPwmQtitcL56ItzfZDq7ucfeu/rVGv6eIM70jMr4TUXWhi4V5b90fZAjzm3XH64ReZlapE4kpGin+zxsIXRNzrYZj1xmHDXlBahif35xd1Xlf7C79XyUpN5v0/OZjLqo7hYRBcWrJQsEvNCY1MCXxfm5NuLNo9u93zRej9yFquRanW3f3ZXe/PwyxJTqNoV/rXd7/sKlhglR3w81A2WVJZtMxUkVVkyqfJF0F4sSz3oxW5A7q6ihV7JUMVwtI+Iam/HHerC/E7GNubG4WqdWMBdD72y1q4LCsQ5xW5z0ZSUFS6WLof7yPWmmHgVAXmskqMFZBmUZBaRCNOP//zc4pZVt+3i7c4pcHQln2ktKDE1dZDj7mfv+kwsvOPmAa66D/12NMQZpHalw1dFSp//G/Tpa6vCDsVrk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6043046)(6042046);SRVR:VI1PR0801MB1741;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1741; X-Forefront-PRVS: 00462943DE X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(8676002)(68736007)(7736002)(7846002)(81166006)(81156014)(305945005)(76176999)(50226002)(97736004)(101416001)(1076002)(107886002)(110136002)(189998001)(36756003)(42186005)(5660300001)(50986999)(50466002)(48376002)(33646002)(6116002)(3846002)(105586002)(586003)(4001430100002)(47776003)(77096005)(106356001)(2950100001)(229853001)(2351001)(66066001)(2906002)(4326007)(5003940100001)(53416004)(69596002)(86362001)(92566002)(19580395003)(19580405001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1741;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0801MB1741;23:Vxyq38r7fj3PsfSTZ6Q/AI5/a0IelVxZOk3SmPn?= =?us-ascii?Q?JfhT1MdI4Uq2t7smcwImE3cPfJPFAl04MB7YANc8qxPVWhm1+weEnMZmmp+U?= =?us-ascii?Q?biMxjLEJeP4s3LnjbENY0bqtdzIYWrCsbF/8LpeTkJDrtJtmnY9zjSqucSuQ?= =?us-ascii?Q?xFs0+NAuCDDdewdOSpXQOBX8VXfQbo2RSbUc35//gcgRFzyjOrI2vveQr6p8?= =?us-ascii?Q?Ox9BlmszV+Z9lfgibK44z6jSOMZ7JKVJznekS594hfiiR/p9qb3lb15xrypV?= =?us-ascii?Q?t6x7RkcEoEsegOeghW8g1l+UM8K24BO3us6G0OLQ7MODwf9h+pal9SFqWIet?= =?us-ascii?Q?AIPUv7+2iWSbSpe8W/aoQQdOhGoavG9uKsz+7HL2fTRsKaCWlx0A2HiCHons?= =?us-ascii?Q?hgF/ckduUOrb3ABOg6lm+8FhITiZm+VT3SBj4VPdy7vh3jf8wvyEa5Bekkxo?= =?us-ascii?Q?fozigBDufDCRHKapLuFKf6c1s14KWwXNdqiaxptPrPkuOUJIAfDZI3KPFy6E?= =?us-ascii?Q?LtAOt6zB8Q/lorcrBRliihIkKN3fLLG+QTeP7FTo5t74fbX6lSxbwnfrP83n?= =?us-ascii?Q?kJjsFsL02ndyuGbV0RRU5/bY2+7r1jTSOvIQbJFpMsd5vIdVJledzRvc3M+W?= =?us-ascii?Q?gIStwiEUBXA+evKXtyAUbclZHqOJv4BdqloMA63WcwMMmBz9KXc+OJci+hZ/?= =?us-ascii?Q?htddUP1OId8+dbmgFowiZFn+bceW5eZfQzyGrXdkp+AnyOS8mQ0Raiwx8rYj?= =?us-ascii?Q?qeT/98YQsQ73dyIxIQnOTDocTSG6ckkX7YD0p6NymAKnnMhv7+5JKjlpF6bk?= =?us-ascii?Q?V3NxUetpxWqYTQH+cKGMNns4o36rnYR17kry5+mfoazoqX2Gw92yFCLQboPa?= =?us-ascii?Q?LST3xMtfKlN25yP6N6ELzaDWC1Y5w4sVnoc0jjQokns3KX8Vg5V9OLGMVMLi?= =?us-ascii?Q?bOQ8Gzs1+9Z/DrTbttnOMyNqQ6w97VNmrvsn2otBFvCqd/jADwzUzgT1FtbX?= =?us-ascii?Q?uYH2/FPw3XR32PY3oD5HWnRC6q7j4hTM057F6qu6qBK7OOxmjs+PwxEDFgYe?= =?us-ascii?Q?d+o9DqLgT/vjcdjDi7BV2fGI7vVYnBPx9Djs1zndYpN9TnoqwF9RyXaWndqx?= =?us-ascii?Q?UARC40YTseC5LtHAIDri+RCpub7c4OmR2nMY+mJpkZFK7nv40qFR/zoi7EPl?= =?us-ascii?Q?Eysd+0czxHhWqlh4A9mVmVz9Ho0q9ek0dmRd5?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;6:WM4zkGRUCPJRO1RhH9RqKw8rS+1QTWK+LAUXU0DdWTMSD6QEXKP8YznpIGZU/iCu7PbuGwy1irse5MxbXpOdGIRHdds+ro2I9FOLfHehs6JTXfdNYvkpn7cW3q/q/gCbOkDR5Fst6zXx067B+fwzingd+HqAWgDcowIYXbX5x7gWNvCliroytMw7ekE7CZuQ2D9P0E0+xUUQOy4aEOCUL93GUMXeNlyC9iO2HX+94sOWGWfFdnuv5/YAioEpTXL6cVy7o7KUqAQCShGiEbokrwF3EB6a9vtFIKfOozpIZ26hX56969juk7U0CpvxL0y1;5:yVD5eO1smxTqk05AwH937SF1XiGfoPfWdY2KLVue8aIwj2F1TJUT+ZDLku+Gw6Ol3I5dbp+c5lnRXJlJtV72REmE/rDKUXd9pz9efP1Y+Lss3iSj/wZs5yQ+wAxsVJd1cyzlt4vGOYz0AJim2HgyVQ==;24:HbhIih3rhCY/lrYsOQ01zoZSsOLr6YAhaNlGtaENIKtk43HOfJF8qaxPyVNYm/NUUd27e/jLSSxYJw7WxnWd1zQcW3ZXKoK1TciA4pYi/94=;7:IHM2/p3JLTypn47morjiWnSZ2IPCxLBdq9VTHmGR8Ebp3zbETdOpFQQU5KbYPlJ6V/yKD3r4Xoh4GkR17jGL3LZOF6D2UdJQGSnY/1LVW6kiTSo/bIbMryGv1E5HWFhCbqIMeNipJnEY+BhgIh+FWUadRb+tw1K74nzKFqOsKcdtCLrXvtv3caJ5kilpTnBCVSkHT3i5zRJbo1Jt1Rl40EKxFsUo8FboAvs6xcgmEQnzpDN0VY+1H4PdJ2KfEiEM SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;20:mkD2/WKDbgxWN4FB1ptbBXqDrDfF92YKekV/FtcSaVfutf+eyxdsW3NWd6gr5p4gW+NpONBXJ0/jexL9V4MUq/VzSt+llL0iSO0SoyCnyZmxOXqjJQi1OKP8qbY2mGvpiIRNyt07Utd658VEzQQZq21gZwa7CFhiXKr6I7sWi0M= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2016 17:15:53.7863 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1741 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Killed PR_REG_SIZE and PR_REG_PTR macro as we can get regset size from regset view. I wish I could also kill PRSTATUS_SIZE nicely. Cc: Andy Lutomirski Cc: Oleg Nesterov Cc: Thomas Gleixner Cc: "H. Peter Anvin" Cc: Ingo Molnar Cc: linux-mm@kvack.org Cc: x86@kernel.org Cc: Cyrill Gorcunov Cc: Pavel Emelyanov Suggested-by: Oleg Nesterov Signed-off-by: Dmitry Safonov --- arch/x86/include/asm/compat.h | 8 ++++---- fs/binfmt_elf.c | 23 ++++++++--------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h index a18806165fe4..03d269bed941 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h @@ -275,10 +275,10 @@ struct compat_shmid64_ds { #ifdef CONFIG_X86_X32_ABI typedef struct user_regs_struct compat_elf_gregset_t; -#define PR_REG_SIZE(S) (test_thread_flag(TIF_IA32) ? 68 : 216) -#define PRSTATUS_SIZE(S) (test_thread_flag(TIF_IA32) ? 144 : 296) -#define SET_PR_FPVALID(S,V) \ - do { *(int *) (((void *) &((S)->pr_reg)) + PR_REG_SIZE(0)) = (V); } \ +/* Full regset -- prstatus on x32, otherwise on ia32 */ +#define PRSTATUS_SIZE(S, R) (R != sizeof(S.pr_reg) ? 144 : 296) +#define SET_PR_FPVALID(S, V, R) \ + do { *(int *) (((void *) &((S)->pr_reg)) + R) = (V); } \ while (0) #define COMPAT_USE_64BIT_TIME \ diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 7f6aff3f72eb..8533aaaba2d2 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1624,20 +1624,12 @@ static void do_thread_regset_writeback(struct task_struct *task, regset->writeback(task, regset, 1); } -#ifndef PR_REG_SIZE -#define PR_REG_SIZE(S) sizeof(S) -#endif - #ifndef PRSTATUS_SIZE -#define PRSTATUS_SIZE(S) sizeof(S) -#endif - -#ifndef PR_REG_PTR -#define PR_REG_PTR(S) (&((S)->pr_reg)) +#define PRSTATUS_SIZE(S, R) sizeof(S) #endif #ifndef SET_PR_FPVALID -#define SET_PR_FPVALID(S, V) ((S)->pr_fpvalid = (V)) +#define SET_PR_FPVALID(S, V, R) ((S)->pr_fpvalid = (V)) #endif static int fill_thread_core_info(struct elf_thread_core_info *t, @@ -1645,6 +1637,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t, long signr, size_t *total) { unsigned int i; + unsigned int regset_size = view->regsets[0].n * view->regsets[0].size; /* * NT_PRSTATUS is the one special case, because the regset data @@ -1653,12 +1646,11 @@ static int fill_thread_core_info(struct elf_thread_core_info *t, * We assume that regset 0 is NT_PRSTATUS. */ fill_prstatus(&t->prstatus, t->task, signr); - (void) view->regsets[0].get(t->task, &view->regsets[0], - 0, PR_REG_SIZE(t->prstatus.pr_reg), - PR_REG_PTR(&t->prstatus), NULL); + (void) view->regsets[0].get(t->task, &view->regsets[0], 0, regset_size, + &t->prstatus.pr_reg, NULL); fill_note(&t->notes[0], "CORE", NT_PRSTATUS, - PRSTATUS_SIZE(t->prstatus), &t->prstatus); + PRSTATUS_SIZE(t->prstatus, regset_size), &t->prstatus); *total += notesize(&t->notes[0]); do_thread_regset_writeback(t->task, &view->regsets[0]); @@ -1688,7 +1680,8 @@ static int fill_thread_core_info(struct elf_thread_core_info *t, regset->core_note_type, size, data); else { - SET_PR_FPVALID(&t->prstatus, 1); + SET_PR_FPVALID(&t->prstatus, + 1, regset_size); fill_note(&t->notes[i], "CORE", NT_PRFPREG, size, data); } -- 2.9.0