From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760652AbcHaOCF (ORCPT ); Wed, 31 Aug 2016 10:02:05 -0400 Received: from mail-he1eur01on0137.outbound.protection.outlook.com ([104.47.0.137]:54192 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934870AbcHaOCA (ORCPT ); Wed, 31 Aug 2016 10:02:00 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, , , , , , , , , , Dmitry Safonov Subject: [PATCHv4 4/6] x86/coredump: use pr_reg size, rather that TIF_IA32 flag Date: Wed, 31 Aug 2016 16:59:34 +0300 Message-ID: <20160831135936.2281-5-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160831135936.2281-1-dsafonov@virtuozzo.com> References: <20160831135936.2281-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AMSPR04CA0049.eurprd04.prod.outlook.com (10.242.87.167) To HE1PR0801MB1737.eurprd08.prod.outlook.com (10.168.149.149) X-MS-Office365-Filtering-Correlation-Id: f4a41511-364b-4677-c992-08d3d1a75d72 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;2:drlylyGxAZlDxElI+LhXsT2Jxxyy0r5aW9LD8Y+f5AXQiRt5GpEUbEJfESeHElCgCDhfgi6pmzgdVDC4LooDBnXEvdyxz4mmhwiEudcspnB17DoUdRUJWXRQYN7pUwsBe4Gfaugy1RT623Urv944qnQYmqdQKovnZLC4FtUj0kj5vxblCTPl6vOrSBLgjr64;3:xTQNb6f4GWZ3V7xq/DbRRS9bQXeEkvPoGOsvDCbXRJ7ua1Mpx+brj0W0qQFZVZMIPscfUmm4pg9Co6gbQZsbYyxWVInAkIKUNyXFtL2aMFVKvLCdWIVqAvQ3rA+IC/Lr;25:C7jnsve/EZ26DRu4pBwU85y21RjXJyj1TZBQPZyScaeAUJ7rGWPuRpW8eFHCBJTpP5NDjV3J4ak0X1dCi0Yzi3cbMz1wJQSLqQ736LqbinCOLPuXoc/pTeZPDYjcG0UdrIb+8keLXMS3hGS21bcdl/Fdgy0H0UxPkV3HjqeREPhVf7fO69HY0P3EtHr8bE4vBoHAcAm8kKtJqGKwDSFTTGsWhA5OhChyFus/2DEZKAHgnKF3e5Hlj0/LDPTYzyJJwpjeXZDCWpjzsS0M2oVlayTZFIwUC59IjLvuP5mihjYlruUgZbxrLUEL5or+6Sl5ZuespmAIX0ETFD9OvtGd0eAdNceHOkJzMc81OFHS9nnj3JjLLyKOpXj3CX8s5m4m3qw+aFkiR1arHrCPZXs4VQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;31:YbvPD1t7fsUrXO94gfLg0EKBq3LGQW9qIfb7Ed44sLO6/AmzbHyAytG1Zc+QRFv8a9yoZlxM3OTNFsnEEUwKbQBmfrAiSiYw0GjO0y5Mh2RCfdlP0+/9ml7pNY7oxj4jZqpqE5uLYECuX5um30+JRd6QJpNCbTd8AM8AF0M2UXmZNTMM90AcJLv+/7QtZ7A7LyLX3Nst7hAyfgACL1gnwvJ0JMGf9nk1YPdwJ6V5SFc=;4:kgKtGZcvSkVFbSQ8Mos0FrFzbtz8yP1ayTEtC5hGjxV/OPCYT4la6GRm1MG1g+PuhkmNPZuhqHbebE7+lij4cVXrZPmqx8Oi9sgZK+XcH0TuVpzDfDT67ESPv1R1Tf2OdDib2Mzkb6JgnSPn0d15ose78HTkc3zp+MG+pPVdlb44QDtQRDwIUYq3Kux05TkC/3EyANIstz/U+jF0MiakLhKU0RGwCFHgfvMviZgHGAV+51WqqnDVBlOI3bZm5onOse9viVil/Sfh8KBzRUXIdE3J80hOWWLqgQW7w8vuijqM5ZznHpoWYBl00epKHoqZw9YDwh13FxEej2+SY3HV7OpNL9+QEbWP1ok7+O8gGbLSpNPs+jCJWSMjBFbqnuLerxV55nOmlOuKgz99gF0rW/BaxyPZhpsebXqwh+yOVOA= 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:HE1PR0801MB1737;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Forefront-PRVS: 00514A2FE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(5003940100001)(92566002)(3846002)(1076002)(6116002)(36756003)(101416001)(105586002)(106356001)(2950100001)(586003)(97736004)(50226002)(50986999)(68736007)(76176999)(2906002)(4326007)(42186005)(19580395003)(4001430100002)(66066001)(53416004)(47776003)(7736002)(69596002)(7846002)(81166006)(81156014)(305945005)(86362001)(8676002)(107886002)(2351001)(110136002)(189998001)(19580405001)(50466002)(229853001)(33646002)(5660300001)(48376002)(77096005);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1737;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB1737;23:0/UByzZT40XNufeibNmqqxI81vcl5kdTxuaKNPm?= =?us-ascii?Q?ZktcQkrp4s9z1OlqmsJVwEzp+BzRIZsGWMYxyK2ybR2l/vopyK1nSS4pQpyM?= =?us-ascii?Q?t+tdVyEN2PxwMnoqlM/Z3Y9ViXmi98W9V4sJNvUKUssb11PF51nbZ2tbhJwF?= =?us-ascii?Q?ZXQtnk7a1r7Q3zYaUR1x8NcnUm/ase2DxRQe2r+emg+wq6W7aQBESYemUEMb?= =?us-ascii?Q?Fxn/0YQqa3OHZtgFMoM073Q7x9r9GkM9qobo6ok1RRBvvRoGBDIM+CRRrEy3?= =?us-ascii?Q?BzlsKGbrvnih/17DudPuvkS5ItRrZfQDQgUkSa4sTnvj0iEbC6VkWExdUkkq?= =?us-ascii?Q?/IZBEmb+jUeYQDoiaWWPANyRsjF1I/Dn3pMq0xPyaVZEKNigC8HHjMIBXY+d?= =?us-ascii?Q?1+1YFCeKyRHv2XS2/hBoDk0r0CzJn9/JLULG8pn1UE9+eJulW5Q2NIu+AuC0?= =?us-ascii?Q?AP02XomvEUVFSEDfSTJzii55BsvVaZ0UBMYEsM7cjIjPIgL2poW2rxQ2mEGW?= =?us-ascii?Q?79fLG/lV9voDfb49a6Rr4jDyZtv+Fq8MiUpP3aGcuwboB2r4E4mMuuZi3jyR?= =?us-ascii?Q?wGhQJR43RFNL/kRSjNR6hYQPJo/12BPtqW2XguBQxe7I/8C3APOhgDi4tfgy?= =?us-ascii?Q?arf92WshAuacRTH/QB/gfDuB/kk0Hu2VQYkf8HeJ9DyDVUoBDHus+zNaDTiv?= =?us-ascii?Q?ItnYl6Cso4Lw4Nn+YogW80v7RThfr75qOoO/re850jkI4KNtBAe8Xn4rhzj3?= =?us-ascii?Q?8jzoHcHicHlNVT4/EIxHSGtpACG/ZjpT/2VtI772N0tuc/Z9/oSLb+Jl9QTf?= =?us-ascii?Q?3k1wMZ9Y4DSFKOstZhh7HoUW1+wvTFYtevuDxI2wEFmBsIJijRGczjZOssUG?= =?us-ascii?Q?AJlREHyv7x9AHU2pKYzOb4OlLVrWHk5pRvewhaDw9Hl6qg03gZGhvTuaoOHd?= =?us-ascii?Q?B+wJrFFi4NEB6e803miTe9DJ+7GRvlyJgV6qYiviAtLaY8obIe3ShjstPdz7?= =?us-ascii?Q?gkeE+XnmqoSXXZRUsYq1gnA7bZRJ636i/epvRmkoK5uBAKCDUOMssBqm5aUI?= =?us-ascii?Q?wasuBKJZYEYONkhcpRncVlXcCuAZ4Yht0OozEjDiAn80ZH/eIOXEE9iaonhR?= =?us-ascii?Q?7IXt3a3YyZBe7fTLLwvlmsg+GRKJSShHIAYiVH2VYGcH3wfnEG75XNS5gBAj?= =?us-ascii?Q?btECIt5d4XqvjuaOkWBzID/7yIEV0TFxm9KZU?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;6:Nta8z+UBElGRMyYzgmbJgJ8Y4+TE9TJrnOXob6RY9o/R2QDfu1KswvicDlqyEJKXqeS49BaF+PREd3TELLoEnCM3INNOglJMSiACyME/nIJUIC7tnGStITe9N32RUV16VIKgsHfW6Kkzv2VPzq8xhblECDde60fdYm2eFLWdBjfJi11d1ginOCZtPWTk3atDWFaHzg2Nizg/8t/MsxH8i1xliFKZQVTPJAcyIKpFL051KL8bfZHPd10AcvO/MOSS/L1VGUmrpuqLoeSvP1AhZ/4qgBoJsAg+U+7yjH1gNWH1NjL4sYuve3L3WYhzUm7P;5:f7LB81pENs21k9HfV3ixWZpFY8h0JH4NYl2iFZrh53CtPc6zNqQjquiNhrHh0AID8IYl/mTkXU7U0uNSLXZbeUrd/D5Upy4aMl5LnRCUvZ2SeA2DCffYrj1Hr9KjJg81SSnC0P3nTCd7zIFx7pF0yQ==;24:EVnkBBJfQ9l3EDVahIijQSNAfnUBbvTOSamDM4EfxcIOp+f0V9hChU0SPIka90F9jSmeNrv+86+9TuLogyaf0/qg5keMHUjTA/APjAHk1AE=;7:CSudd1oLeNxfL7kBKxc/8hyFLaH6R/f1OFTRLuIV3fgWanixYXwpaCJZ0ONLsOftwozEFz1pI7bQnQG6JsOMOMss+blYKnOR/cfs6TpR1lwwX7Pgeof1NnCd0iF2qhEEFif7t6XjdPv5oolL8eois0D8kg+ZGdJNhSrwqXmoVzblUZEGfyiH7YPwQjFxKZGvPx2vb91H6MC29p2s2RJB97UO/e7DB3OX59eXbY0g2xyIKc6v0OXGuF7wwmk3I7Dh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;20:52NOME741/6c5GHxyEtdy7nCwKKY1IO/UKgtyR7r20qcRxN1189BOHqInFJ6gBjrIEfUtHQoYUy+8tBNLhr8LxcVddFD5qWoKIV/7yCf+LJpQrekOaC0tRvKYlJPyS5WEq1QDvMKQDFc6isB1bar85Bom2n1Qyt0Hqpwc5TKJYY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2016 14:01:53.6470 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1737 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