From patchwork Mon Jul 24 10:39:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 21740 Received: (qmail 28485 invoked by alias); 24 Jul 2017 10:40:28 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 28127 invoked by uid 89); 24 Jul 2017 10:40:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=pause, nth X-HELO: sesbmg22.ericsson.net Received: from sesbmg22.ericsson.net (HELO sesbmg22.ericsson.net) (193.180.251.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 24 Jul 2017 10:40:22 +0000 Received: from ESESSHC022.ericsson.se (Unknown_Domain [153.88.183.84]) by sesbmg22.ericsson.net (Symantec Mail Security) with SMTP id 48.98.05732.59EC5795; Mon, 24 Jul 2017 12:40:21 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.84) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 24 Jul 2017 12:40:15 +0200 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from elxacz23q12.ki.sw.ericsson.se (192.176.1.81) by DBXPR07MB317.eurprd07.prod.outlook.com (2a01:111:e400:941d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1304.10; Mon, 24 Jul 2017 10:40:13 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 3/3] Create arch_lwp_info class hierarchy Date: Mon, 24 Jul 2017 12:39:57 +0200 Message-ID: <1500892797-7523-4-git-send-email-simon.marchi@ericsson.com> In-Reply-To: <1500892797-7523-1-git-send-email-simon.marchi@ericsson.com> References: <1500892797-7523-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: DB6P190CA0007.EURP190.PROD.OUTLOOK.COM (2603:10a6:6:2f::20) To DBXPR07MB317.eurprd07.prod.outlook.com (2a01:111:e400:941d::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bb8f403e-0e74-4ba9-ed4c-08d4d2805ddd X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DBXPR07MB317; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 3:07HusNBBoZt/12skyfxDwa5Z5I+2m0Qycsdy/mr5e4luFJW9TeVLFU5/fMqtVr1tWs2Eqxan27f78vY5Cyb1MIOF7jIHkGtHI3Hk3KQQ1nLbyLjTyJSysL9ElVqHXAuhIHeI/wde4ufgEXT097lHIHsU92axBSBOUFyFofzdVgqeeHASza2cNdZfO9fn1R5BR4QVzGGh0XHuFgMK6Z7tkM2YAOice5NU6pHj7NSlo1Mb9rvObmqyr64dREJOnSSixvQfWVRqrNyh8W1fwPCiqdFPzSbDnp013ycnx+eLMXnyWseUFIzcEga1KhJ5ydg3xqkGpMV15C0RKQckqwK0+LJWiUXxLS2EzyiF1yZttYl6hMWkJBG7TNIgPTq8KLu38Bb3DOdsqmpMSRIdmx+zkBylPrVKVWebCVVbh47OY0IpVYEq+7oLGGdokepbGKX7QfbyryqTYhyHWGYBbw6Li7JkVtc67JstEQpI4ujSel2D9bg1wCM3uk7lmTIGZm+aNWylUAS54rAr0XieGRDjt2Pj42G2vD1+TAy2maI2iOebGsFD2FwqV/3LYHZn69XJo49HSyhC6YfuGaLsrogEyzlAESC79cMh61XWSw5MYb5OXXn5Dz03wRUiT1kyIJq8HhAPJWYMBvKfGQVk5n8bvhFq3VnzhzcwyS+F34SHPS9qkHNIHLjccpe6F6nq4wj8rnHiR38meE4XlSnj+8QNlxtJsi7wHdyPw5HQfLOpKTo= X-MS-TrafficTypeDiagnostic: DBXPR07MB317: X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 25:1D51H3kUr4jaUSlw1jfn07qZ6NCGeR6/ba+pbW61IS8YAKr6t2cMuAEF3g77xmKdjoNDM2LrLzogI0jpwT4fzO+cOIFOv0QyBdl+JEUfWchwJonS9oePDWCgg/BqyL5TzI+r+XUE2SCu86jQw4xZccKqGKJYEgekVJwyPxVLokCzsxNJRRxLQZIgwXgM+1z2xTf3GMsFoIVb6KPtw1V6VxhAZnV2MyoJ6fZqKrclM3bhrLJ+07CW4wt14ieq2aisI98NzWg+XwpRfWlz82JuDhe4MglAoFLoOkWyUhMtLFdYxWl8HKqQJ0ah8G1ro0EIptG+6+7Sqigb0URKIg0vH48GUPGqiYgyMWrcRe84fHn6OtVOFIz8k7NFxeG42Zdqh0wz1UoOttQ0Uv10DyzFFj5NWGgGYkuM0wdCsFr6D2iZNO1jK48iqEfcR9+mQCSZRHkC9Z6x+KyZTj87lTMcqq37pRjFirl7D/6olqCWYSnBalMekS7mgtI9BzNZINXR/Vo4s7CkfiSv3QEVFxl79q9loLrhz/imJZfeHt8qa3+qj02gF1Hp3xNfwf/+HHScFc5t23Qov9dE0x7YGRrmB09qkhGphMznC5G9I3xGqMWxiY5SCPpvjTGl6fcYvirD0tidOKnwN1wOM0mLr/sXRRuUMJKSMm3LFgafBB8qX49/LHSkZjTtjaN/ZS2pcuHHk02CX27tmFb85uXQU42Vdy3s+B9A22invn1D2XtJCJJEpNvOaYX8IFi0+cm2buDlSV0E8EaDvFMb4gBpOvnbUhVXFUiVLeSeVW6RnsUZAWfb/jCi4WyRGRgBcDc0bIGvMVoTJ5q4p8iAKqr3raWu7WjguEE/9vNUW06elQgqzgrPaVxK2Wdnn6ueZQHvQ8slycjKHTANpnYNtRi+HQ0DtNqdS3COg8SsWQZKBcMpW8E= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 31:OfXSqyTUKAtecdh3LFhVhyTovdxXDqi/EPF5SADx+yCdxW116I6COM0AYuPesKB303LOBb0tJziZdXazBYAGe+tbo3j4mexzjSO/pBXZPx0tIKrBwBATP5fSX3Qij9kvzuZAhphwU8WAtNBfm2G6Mv20/uOllZLLVTMcgFuxQ/NfvYku0nDGfjOUrTRdKveSULUzxRUfjMT6Lrr3lN7i5fYfhU1kPCzaT1K20xHPsEi6vIPpAvIlEek61OY9tKNFgpHa/itVLV4bgzSR1QxlTBlYIQfUl6gAhR0mgUn8WuMuW7g7iHx/SNSIiAw9X2SzTMUvTmlsw5XySePu3tLdqyYuXKY/ZA2OscDPDEmZXJ0LjPFoWsmwTSWMdjFLRIunFHVq4LxoA7dVXxpsc4hGuuM5jl4RWyNXNoUTrD+zLNxjcSkAW+3ypezONRAvq3KFasPttljCF5npkBsQ7dDfZ+OAUz5+dnuNY7mzr+o3NUbmn7p1CaxvXSHGyrloPpZLbi9iCuAbzM9xbH1pLoaQr3fNeAUa4hCaAQ2b/NwDy9KapLmRKYawj72I1u1/0rB6xlzpe5jDcPIacv7lYnqeMflzfnsMlComJ5jQAaPhvrNO1Zf0sXr3Nv3aAY/Kzzyv+yVnpp18QbuMtZZ6svlTTp4wZilMgZO2DHPUEMoFCYaFGldnxHY+7ItsfM8nINMW X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 20:DBeJOc6O+V/+ZeSZ5wHCJJWJW91XV2lJcNNEVbULsVhPy+RYIC/bDJXPs26yffChMMN+Pi/3KWe/9qXqvpzzgL8HqfYT3QlLDimJNJ6F0cHRkZXwJvHugF5xh/RZhJBovZnXE1qRRS4/ZVEo6PqoClVUNzO3b4JM6OSouKqpg9soczSnWHL5917J/F94tZxEZPd6O+z2mHoeSC+asCUIITNlJE3Ldv6GQMjBReY7JT6uMD7nj2OF7c01GrBnIiTQukyhXnKgoVqUQFb+/H0UfTMGF2xu5GuFY/GYIGZl+G4iB4+uQSyZQ5WN3VsM3IaDJqjqAy2+zwV+vDUDSJS9rbCI7vOf1KxG+2hyW/WJIeRE6ObuMT/qVSwQ0LTkRiIuEto/4WPcduI3xeY5TlpVTubfy06umozqvUa1WHnyoszyzjulRuzavW9ol727MRXQ8Ax74ehfwHL4Xx9A5n4cMLSN/jFe7otPiK79pD01sszXG6EhSP0v2Eh2QUFpYFaX X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(6041248)(20161123555025)(20161123564025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DBXPR07MB317; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DBXPR07MB317; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQlhQUjA3TUIzMTc7NDpMYzhBcU5kNlZwZnNqbVdnT1ZyVXU3VUtCdlBi?= =?utf-8?B?R1NZWmNiWTBLWkhTUDVMWnZ0eHRYWk5oaW5NTWJ1Y0tlL3RXUHRXQ25SUEFq?= =?utf-8?B?a2FkNVljSm9jODhpOWFIOHJ4WnJrWGd5ZFV0NE5KTUdZS0FDRTlXQVBHeG8y?= =?utf-8?B?R05pWHhNdmxBaTZiZTBpYzNTanNBT2tkaEZwZWRmZXc3QjZHcytRbVJQWTRI?= =?utf-8?B?U3VSejZUelVIdTVSNUllUDVVcGpZNUs1S2FPUk9ram1zZklINmZueFNMRGg2?= =?utf-8?B?Sk1QTng0QzNXNndEbVlHMTNDSmNCamVxc3JnK3VMQTJyWnZHRnYyQ0VENnY4?= =?utf-8?B?MDhQTjdSdGtjTTJab1huT0k4MFU4bVNjYUNXYVhqMnIzYnAveTlCV1pROEhw?= =?utf-8?B?cGQrZUVjemxRTXRuLzN1dXdwK25xZnhNeDJ0UlR0SkdKSlNwOWViRFdjVm5R?= =?utf-8?B?dW0yMEdSVy9MQWhSekRjSVkyaTlLaG05UWRvS2ZFa2JvbHg1QWpLa0xTN2Vj?= =?utf-8?B?WEkzSXYyeFFycXR1dVNvK0VCbzF4dVRPYUdlUVBRQVByMkhWUTZpZGRBK2ZI?= =?utf-8?B?V3Z3RFc3ZlZ5VzlobGRCK3Q1VTN2WnlkQWxGbGgzVTBxOUVnZWFpbkdscXNx?= =?utf-8?B?T3FSTk5jdElLMVVQekhoZzZpdTdkY3Q0OWFYUGwzL3lTQ1d3VnRHc3hyeEQ5?= =?utf-8?B?VFdhNG5nSWVCRjM3RjB3S2kvVDBydXl3clhBSkNSUnhKdm1GWm5QS2h6dURw?= =?utf-8?B?T0t6T0pSd1hjWEJibEVFbFZ3aFhzTDlLUitaMFJITnIwRkZxTDVQNnRDZFQ2?= =?utf-8?B?dHVqQmIzWE1iTW1vVkZlMDNRMnZUK3FSMS8rYmgvOGU0Y3VLUC83ZkkyaVhu?= =?utf-8?B?MStUZ29DTlE3cFVjSFNwN1ZRakJLa25BR3VYYlV2VVorTi82RExFZ1JlMkEx?= =?utf-8?B?T09oZUYxTlB5WlZGZDJHdEZvYnViVnAyMm51SmxsbWltdWVwWms4S3J0Y2hQ?= =?utf-8?B?SGkzaDgxVkdXV0ZMenZ6eFhqYURJcjg1ZVFMOGJyVWdSdEVTVjkycGJmQ1NT?= =?utf-8?B?cGVWaDVESDQ0RkN1YUlDc2JKTUF6M1ZXdXJsd0ZoLzA4L0ltTEtpbC9XWTNY?= =?utf-8?B?SU1NVGJPQll6S0ZWR1pGK3ZvdEMwcldTYml3ZDB3aEc3T1RlRmZUb0RnVytZ?= =?utf-8?B?cEY1NC81UkM4dFA2NE5SbkpqZDIzT29URFFSNkJEWTNSdlZwMVJyVXBtcUFD?= =?utf-8?B?UmVSTUwyeFpmbGV5OFZQaXdFTmdLZmphbWkyQzNROVh1TXFVT21ZcE9aZ3R4?= =?utf-8?B?dEVodmRvSUV6REdqVnVwWkk5Sy9aU3ZJV0Nta1JuTFhoWjFXRjZUcmhJV3Y5?= =?utf-8?B?M3pqY1VkMnpHTTN2UUhGcXdpeEhmM05TR0EwQVl1eTJiZEsyWk1mVVZSdUlo?= =?utf-8?B?TFI3eG1vS2t4dnBMRVNmeUc2aGMxVlBVQ3NES09CQk04cE9jaXZOVjVHKzRM?= =?utf-8?Q?hH29EcT5NkoZr+avj2lcdcyHqgJL09uahNiUtZoDLsl/?= X-Forefront-PRVS: 0378F1E47A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(7370300001)(6009001)(39850400002)(39450400003)(39400400002)(39410400002)(39860400002)(39840400002)(54534003)(189002)(199003)(23676002)(110136004)(53936002)(6512007)(66066001)(97736004)(189998001)(6666003)(68736007)(38730400002)(5890100001)(7350300001)(575784001)(101416001)(50986999)(76176999)(86362001)(5660300001)(6116002)(3846002)(2870700001)(42186005)(36756003)(6916009)(2950100002)(33646002)(81166006)(81156014)(7736002)(305945005)(25786009)(4326008)(2361001)(2351001)(2906002)(478600001)(105586002)(8676002)(6486002)(50466002)(50226002)(106356001)(47776003)(6506006); DIR:OUT; SFP:1101; SCL:1; SRVR:DBXPR07MB317; H:elxacz23q12.ki.sw.ericsson.se; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQlhQUjA3TUIzMTc7MjM6Z0o4QlEzTEJadUZwMStuWDdMRzhubmhSd3pX?= =?utf-8?B?QmtNK0tRSXdMZ3gzeEZNMFpac2Jxb1J4Qlhjd2YvQk9INnVTRXBVdmlJSUVw?= =?utf-8?B?SFdsTGlZTGYrSnBzM0pQZGFrdVRrTEZuY0tNdlBtam8rSWxuZ3lvM1RzdTZK?= =?utf-8?B?bjIrYUtUTTVYV0ZhTEVFVXdHZjNxWHJXaHROUDZ0Tm1iSmorelJucTVEbVF2?= =?utf-8?B?Zm8xaW9aZVoyS1ZQTlBCU2YyUSs3Qm5QTm82T2JNTFAyTHlGbG5FQlFMWmVW?= =?utf-8?B?NHdWaXdWQ1V2a2NhcUMzNW9TYnE4ZjNJeE1JMGpTTFZJakI3N3ZmRGtjZkgr?= =?utf-8?B?L2x1SzBtZjJxMGxtc3dHeWlxTjZpZmQ5SkZUNVdlR29hOUR3MDY0Z0hpZzBl?= =?utf-8?B?NE83aXlCQXUvWGJhT0s5ZDBxbjcwY21WZlNpVFlGK1NWbCtENVYvdEE3MUdE?= =?utf-8?B?eUJzb0lIVEY4SzJwbHpmQ3F5WFVLUUF0SEdlc2FmbjZrYXRJcU1RMjBScS9R?= =?utf-8?B?aEJ6N2lYVVJWNm9NTmI4Zlp3akZrdmxpdkZuUTBxOU9oY0VKODJFWkRPQlRO?= =?utf-8?B?M0FoT2NXNWUwRzB2dGNvWVlxYXFmbHpUMXpCU0J5ZWZvYUkwUFNseW5IdERX?= =?utf-8?B?VXB6d3JscEkxYmdJbFRlVWxjMUFPQlFRRXNjeW16cWY5Z0g4dmNVUzRkY2VE?= =?utf-8?B?U0pkVWlhbzNBcFFDRWZ2UytLeGM5VldPMUJlR1NLOWtIWjNBNTV1NE4rRzRu?= =?utf-8?B?OStleUFUNEY2SzNJdXFHMGZkOHZ3VXIzaDR3UldhQkR3QVZ5cEJCeWR5WW5F?= =?utf-8?B?MXpxVytYSnJFZlRBbVlXamZkQUlBOGVnSHlMbDI4eW1xRCs1azgrbDdVRHlC?= =?utf-8?B?SnZxL2lIc3FraFJKOC81WTYvY2JJTnRzcGxSMFc1ZFU1cW02b091UjVoMVlx?= =?utf-8?B?MEpML0VmYkJwZjVvL2ZLamoxbVQ0dHFwZHBkUkdjcVJFZUJacHI4Rm9COFZt?= =?utf-8?B?cDIyNndLZDVSZVpTRnVENVN6Q1B6amY5MGpRTVdEOVFERFdMUVMxbU9jOGZv?= =?utf-8?B?VnRWekIrMlBtS0ZqZ1pRQlAzdGNZbnNySE5YVG83LzRNU2Jud0xJSkpuTXha?= =?utf-8?B?RnRxTGs4N1ZNT3J6anlvcHlDaW1BSUhrNWJhekpDNUkxYzE4ZHdrK1MvQjlZ?= =?utf-8?B?T2ovQU1maTE5U20zSDFEVzkzamUvdzJiTWZyRytTK0RKSXhKSzdxM2dwVjhs?= =?utf-8?B?cWl3ajhOTTZZTUJ4cmI4VTd2eXdNY2hzdXVOZFg0MmN6M05uYmZaYVZoQVFv?= =?utf-8?B?UmN5OGhuZjl0cGxpSGUvZjRGR1Q3Nnc2b2hUL0dQcDVWTlRJV1BYKzdxRVYr?= =?utf-8?B?K0xRaGZ3VzhRUG9EY3BqZ3B2cFhVaWxLMmd3STBqYWV2cm1ldUYrSFlhQTY0?= =?utf-8?B?VWJ2WklOWjR3dXR1LzN6ZldNZmtFeXMzQlZKMTdtSzYrVklDMVRoQXpRcUZH?= =?utf-8?B?NTRlRjFrVzFsRGFBQWc2ZjFzektGRnBrNUtNRkdxU3R4MEhmaWN3UGJBVk5Q?= =?utf-8?B?T3EzOFY0dXNrbEVWdzdVTFlmUEdubnVod0NGbUI3QmlrWmd4NlI4bGZycWJ0?= =?utf-8?B?VHl5UFEvUFR2L2p1bWVmNmJrR2l6dkNrenArdEcxMFo4L1NwOFVmWnZ3UXRC?= =?utf-8?B?aXJLN003eng5NnRFbElNRThYRUxJOHpKT0xsT0ZiejVLUVFudUpDMzhGM2VY?= =?utf-8?B?dHlrVUlORExVb01hbGNJeGV1TURaQk1JMnhjSlhZRHFmS1A4NjRTazNPSDZj?= =?utf-8?B?WER0TnFqK05UTzlhc1JCUjdiS2U0NjBnVzFaRjJTWUxvd1czVVI1STBscUFt?= =?utf-8?Q?RWHzt6JD4U=3D?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQlhQUjA3TUIzMTc7NjpSRmEzNUZYaGJCVVBNN1IvVG5kRG54VFVjWFAx?= =?utf-8?B?WDExcjJWRmRMMWtiNTd6WWl3dVNleDVpdUh6dVNjWVZBZGlvTlo3bDU1QXU4?= =?utf-8?B?eGhjOWFGTmpoeHozMGdTSU1YTzk0cThWQlpCV2piVVZoOVBLbFFSenErdHlp?= =?utf-8?B?ZlpnZFhVZEtyQ2Nhc0pMMExySElGeU9pRyttd250dFhQb1VEU2xLdFJsVENx?= =?utf-8?B?S1J2T3ZlVUJoMUU2RjJmTXh4RWRBdGxaK2g3VWowVERQbXcvWVJ2WXA2VXF6?= =?utf-8?B?RTIyeWp2ekR5QzM0YVExR25WME5ZTTBoMkdBMGFMWTVXcWlPYzBXVnkza1ls?= =?utf-8?B?emlVNEgyVnoxbDAvMHZGRGZMM25JVTluR0JlN0VnZ0xUazl5YkZ2MzRvUWVT?= =?utf-8?B?UlY1VU9ITGJibmNnUmRQZ0hwSTJsTDJYNFBvS0VEVDBIdWxwQWhXYTA2MjRv?= =?utf-8?B?TkY2K2JkbUdVMndyNElvN1VoaTI0aVlDK2ZFbEF4TkMrcWZTcVlJcmlLU1FQ?= =?utf-8?B?ZmVUeHl0NDZOU1dKQzZpZVA5UmVSOVlGV2tWVHlublZka1JzUVR3U2FuQTd5?= =?utf-8?B?Um5HdTlIOGFTMUF3VWYzRUQ3NzhVWTNRVTA2MURETGtNUm16TmE3SnBCQkJZ?= =?utf-8?B?cElPS2xFaDk5ZWZwOGtVWFVaVU51dVlweUxMK0JlVkhMRkxuUE5SdlUxNlFs?= =?utf-8?B?M3VTSXR5VFZJTDNSTUZIZ1UvcDBqTEc1LzNkOHpUNER1akV5TDFuQzhIUG5t?= =?utf-8?B?alJveUlhU2NVai9pa2pxaGtscE9LcjIzell3TENSQXlpa251QUZVRWlOVUtq?= =?utf-8?B?QlZaU3ArdzNqVVREQXFlTEtiL2dHWG5KdE1DcklzYU5xMU8wMDBuV0tZWTZL?= =?utf-8?B?TTVER3poc29OSDFVZUpSNTk5Y3pVYUZiYW8vM1NqckN0a1pjQ0NPUXl5R25G?= =?utf-8?B?ZmxndStzK2ZtRDF2M1VuOWVaVThSeVBVeDNPNFRpbms0U2Z4TmpKcHFQeDZE?= =?utf-8?B?ZXZmZ1VqR0U5bUw5T2xlOFhQbVhXdUhHQ2ViMFU2S0NUdFRRZWNXZHdRK203?= =?utf-8?B?cFpCaXFER2FoOE9rMFdzeksrejVHR1JvMjgxUTVYZlIrTUFWVDBTUkE2eUcv?= =?utf-8?B?M0oyZWhKSUZMdTBEWUJZcjVsby9qeWhRY3BnbmZhd3V6WmN5ZkFsQ0FjQVZs?= =?utf-8?B?ZlAvZjRWVHV5N2dNcnZ5VGlhSWxxZzZEYkxsQ2phNy9jTjhVQ1lVano2aGVz?= =?utf-8?B?ZHpBUkx1dzNMdzd6TDBDSzBVcm9xWk1BN1B3SC9lVGJybDJ0b0Y2VXlLM2I2?= =?utf-8?Q?d965jjD2MXezSPQ/zanJo+ihE4ZGGs=3D?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 5:pdA39gvwpmdpCekl3wqpPWrgy7kanZRUgTsK1bMTvE6EFVK88HKrrlmxr0IrDK1qdqNLu847YseDpvTdZM4/TWDpNesAY2azJSYpRgqFPcLl7tQda/dfA2uYxO5YHe/Yn4DFvHtIeiTmFD2yjp1upN4xTjsDV2ZsUHds7iGSvEQeVLtliP95zP84f9pS1i0GKDcsYBX74r4vcccQHG+GqWUvFyni7balnO7MjkYL9lcRIrR+1cJDV6kM3N2dimEUVg25P3+JH/q7QswoxHGPkXpF3wQYjKEJBmoAkdSwi8C+awgIsz/6s7Co7nbVz75B08NTNVOkPB1uqJvekrunq3OefxwwF54zzTc6zXfUSGhLFGOy14JmL2Vw8xJ3veBx2M28E+g6e0RwEa5HRP3bB781gFtNkyfTjNlw8xJ10/RMB54x7CInVT0Y7/N5bQrFb0VbQY5R0kJpSeRhKxtRNzFnSkMzt3KQkIapzM60WKng+ai8UEseT+l7cMiQYWOi; 24:NyMiCl4q66IZghLDNXp2ipjnlBbHdCj3hfWT/sMVf9gyfsW3UA5hG8fm84hDAopNhFjTsf8IBpBG6k6gCBEEDzn8WXiYx9azoY8IUrrSweo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB317; 7:CDNfCtA3EBS3DdF8/Gs9LBlp232W4jmRLvBUi/LZywYw4PF+eUrYOmRvSWwjR77t+08pysgLQ7BcK7Fb358dfHInKVghmaqSh4EpZ/4E4SL1ajSWsOFVZA6xnPRSEMTbi25jknm3PpLx8Nn/41Ju6kwyafOYEMqMoGshNEM3ogy2JIrfXNu6eb8+MKQccsksvG1KuVDBMoIv8GyP78RdKgAuUmy5UCR3XiqOitDGBbzswkRCdtpkxIXKMine2TgoxI1dXZ2s2MO2TPYtuN73tHH4XMN8UVV/8fkk7ggitXYOR+zkvwLVQZfBi5pSFOzAjxo/3j67/Qx2kpzr5nVQznN55ZttRfo3kOlnYJIj2AH0XnTVOyVrF+B8L02KiHo/z2MumYU69AO2qxbr4Yzvp98E8UT48vxpcQsvfeYZtjudHXiafIEL6D7q9UFjEiNbNt4qQvwCH14UoAQmL+GZ6cuF/3Xeg4LMKQBDDrUK/t1EUgYO46oJ8mBnTV7+cnKu5p0kVLPxvfhVwrTJzYlBsrZlwtYWES4QVZLJzWa8w0yBTQcruIX8T/pZitqzbQHjiqvTLzw4w9OctyXElQxncodoULO+2KqZIio90SU2ohgJLltMdQ1UuC+/kuVww8lN5dNKw9qJ9VSKICTEJ/h5XocjnmQps2oZFJiEZMj+RQi7YhCRXsT8DnF3cHn0E2I3ro8kuG947MMfRbdll41BPqNZUd2iFwWOgLvMJUKp7aVNqbJdwYFamWf27SfczF9tJGFBUN75YOVuXQRJo1eG6izPqVvzOk3ycBpRs+GNQKM= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2017 10:40:13.6679 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR07MB317 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes From: Simon Marchi I am trying to "poison" the XNEW family of functions as well as xfree to help catch their uses on non-POD types. It trips on this: /usr/include/c++/5/type_traits: In instantiation of ‘struct std::is_pod’: /home/emaisin/src/binutils-gdb/gdb/common/traits.h:66:8: required from ‘struct gdb::Or, std::is_void >’ /home/emaisin/src/binutils-gdb/gdb/common/common-utils.h:59:15: required from ‘void xfree(T*) [with T = arch_lwp_info]’ /home/emaisin/src/binutils-gdb/gdb/linux-nat.c:840:26: required from here /usr/include/c++/5/type_traits:656:12: error: invalid use of incomplete type ‘struct arch_lwp_info’ struct is_pod ^ The problem is that the arch_lwp_info type is defined internally by the various arch-specific linux-nat implementations in GDB and GDBserver, but opaque to linux-nat.c. When linux-nat.c tries to xfree an object of incomplete type arch_lwp_info, it can't validate whether it is POD or not. This patch converts this to a proper class hierarchy, with arch_lwp_info being an abstract class, and various arches defining their own type extending it. This will allow using C++ features in these objects, if we ever need to. gdb/ChangeLog: * nat/linux-nat.h (arch_lwp_info): Define type, add virtual pure destructor. * linux-nat.h (struct arch_lwp_info): Remove forward declaration. (lwp_info) : Change type to use unique_ptr. * linux-nat.c (arch_lwp_info::~arch_lwp_info): Provide default implementation. (lwp_set_arch_private_info, lwp_arch_private_info): Adapt to use unique_ptr. (lwp_free): Don't free lp->arch_private manually. * arm-linux-nat.c (struct arch_lwp_info): Rename to ... (struct arm_lwp_info): ... this, inherit arch_lwp_info, initialize fields. (update_registers_callback): Allocate arm_lwp_info with new, adjust to unique_ptr usage. (arm_linux_new_thread): Likewise. (arm_linux_prepare_to_resume): Adjust to unique_ptr usage. * s390-linux-nat.c (struct arch_lwp_info): Rename to ... (s390_lwp_info): ... this, inherit arch_lwp_info, initialize fields. (s390_prepare_to_resume): Add cast. (s390_mark_per_info_changed): Allocate s390_lwp_info with new, add cast. * nat/aarch64-linux-hw-point.h (struct arch_lwp_info): Rename to ... (struct aarch64_lwp_info): ... this, inherit arch_lwp_info, initialize fields. * nat/aarch64-linux-hw-point.c (debug_reg_change_callback): Add cast, allocate aarch64_lwp_info with new. * nat/aarch64-linux.c (aarch64_linux_prepare_to_resume): Add cast. (aarch64_linux_new_thread): Allocate aarch64_lwp_info with new. * x86-linux.c (struct arch_lwp_info): Rename to ... (struct x86_lwp_info): ... this, inherit arch_lwp_info, initialize fields. (lwp_set_debug_registers_changed): Allocate x86_lwp_info with new, add cast. (lwp_debug_registers_changed): Add cast. gdb/gdbserver/ChangeLog: * linux-low.h (struct lwp_info) Change type to unique_ptr. * linux-arm-low.c (struct arch_lwp_info): Rename to ... (struct arm_lwp_info): ... this, inherit arch_lwp_info, initialize fields. (update_registers_callback, arm_stopped_by_watchpoint, arm_stopped_data_address): Use lwp_arch_private_info and add cast. (arm_new_thread): Allocate arm_lwp_info with new, use lwp_set_arch_private_info. (arm_new_fork, arm_prepare_to_resume): Use lwp_arch_private_info and add cast. * linux-low.c (delete_lwp): Don't manually free arch_private. (lwp_set_arch_private_info, lwp_arch_private_info): Adapt to use unique_ptr. (arch_lwp_info::~arch_lwp_info): Provide default implementation. * linux-mips-low.c (struct arch_lwp_info): Rename to ... (struct mips_lwp_info): ... this, inherit arch_lwp_info, initialize fields. (update_watch_registers_callback): Use lwp_arch_private_info and add cast. (mips_linux_new_thread): Allocate mips_lwp_info with new, use lwp_arch_private_info. (mips_linux_prepare_to_resume): Use lwp_arch_private_info and add cast. --- gdb/arm-linux-nat.c | 21 ++++++++++++--------- gdb/gdbserver/linux-arm-low.c | 31 +++++++++++++++++-------------- gdb/gdbserver/linux-low.c | 7 ++++--- gdb/gdbserver/linux-low.h | 2 +- gdb/gdbserver/linux-mips-low.c | 16 +++++++++------- gdb/linux-nat.c | 7 ++++--- gdb/linux-nat.h | 4 +--- gdb/nat/aarch64-linux-hw-point.c | 4 ++-- gdb/nat/aarch64-linux-hw-point.h | 6 +++--- gdb/nat/aarch64-linux.c | 4 ++-- gdb/nat/linux-nat.h | 7 ++++++- gdb/nat/x86-linux.c | 12 +++++++----- gdb/s390-linux-nat.c | 11 ++++++----- 13 files changed, 74 insertions(+), 58 deletions(-) diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c index ad3085a..19f9926 100644 --- a/gdb/arm-linux-nat.c +++ b/gdb/arm-linux-nat.c @@ -726,11 +726,11 @@ struct arm_linux_process_info }; /* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info +struct arm_lwp_info : public arch_lwp_info { /* Non-zero if our copy differs from what's recorded in the thread. */ - char bpts_changed[MAX_BPTS]; - char wpts_changed[MAX_WPTS]; + char bpts_changed[MAX_BPTS] = {0}; + char wpts_changed[MAX_WPTS] = {0}; }; static struct arm_linux_process_info *arm_linux_process_list = NULL; @@ -928,14 +928,16 @@ update_registers_callback (struct lwp_info *lwp, void *arg) struct update_registers_data *data = (struct update_registers_data *) arg; if (lwp->arch_private == NULL) - lwp->arch_private = XCNEW (struct arch_lwp_info); + lwp->arch_private.reset (new arm_lwp_info); + + struct arm_lwp_info *info = (arm_lwp_info *) lwp->arch_private.get (); /* The actual update is done later just before resuming the lwp, we just mark that the registers need updating. */ if (data->watch) - lwp->arch_private->wpts_changed[data->index] = 1; + info->wpts_changed[data->index] = 1; else - lwp->arch_private->bpts_changed[data->index] = 1; + info->bpts_changed[data->index] = 1; /* If the lwp isn't stopped, force it to momentarily pause, so we can update its breakpoint registers. */ @@ -1186,7 +1188,7 @@ static void arm_linux_new_thread (struct lwp_info *lp) { int i; - struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); + struct arm_lwp_info *info = new arm_lwp_info; /* Mark that all the hardware breakpoint/watchpoint register pairs for this thread need to be initialized. */ @@ -1197,7 +1199,7 @@ arm_linux_new_thread (struct lwp_info *lp) info->wpts_changed[i] = 1; } - lp->arch_private = info; + lp->arch_private.reset (info); } /* Called when resuming a thread. @@ -1208,7 +1210,8 @@ arm_linux_prepare_to_resume (struct lwp_info *lwp) { int pid, i; struct arm_linux_hw_breakpoint *bpts, *wpts; - struct arch_lwp_info *arm_lwp_info = lwp->arch_private; + struct arm_lwp_info *arm_lwp_info + = (struct arm_lwp_info *) lwp->arch_private.get (); pid = ptid_get_lwp (lwp->ptid); bpts = arm_linux_get_debug_reg_state (ptid_get_pid (lwp->ptid))->bpts; diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c index 5a3f465..9e28388 100644 --- a/gdb/gdbserver/linux-arm-low.c +++ b/gdb/gdbserver/linux-arm-low.c @@ -110,13 +110,14 @@ struct arch_process_info }; /* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info +struct arm_lwp_info : public arch_lwp_info { /* Non-zero if our copy differs from what's recorded in the thread. */ - char bpts_changed[MAX_BPTS]; - char wpts_changed[MAX_WPTS]; + char bpts_changed[MAX_BPTS] = {0}; + char wpts_changed[MAX_WPTS] = {0}; + /* Cached stopped data address. */ - CORE_ADDR stopped_data_address; + CORE_ADDR stopped_data_address = 0; }; /* These are in in current kernels. */ @@ -471,6 +472,7 @@ update_registers_callback (struct inferior_list_entry *entry, void *arg) { struct thread_info *thread = (struct thread_info *) entry; struct lwp_info *lwp = get_thread_lwp (thread); + arm_lwp_info *arm_lwp = (arm_lwp_info *) lwp_arch_private_info (lwp); struct update_registers_data *data = (struct update_registers_data *) arg; /* Only update the threads of the current process. */ @@ -479,9 +481,9 @@ update_registers_callback (struct inferior_list_entry *entry, void *arg) /* The actual update is done later just before resuming the lwp, we just mark that the registers need updating. */ if (data->watch) - lwp->arch_private->wpts_changed[data->i] = 1; + arm_lwp->wpts_changed[data->i] = 1; else - lwp->arch_private->bpts_changed[data->i] = 1; + arm_lwp->bpts_changed[data->i] = 1; /* If the lwp isn't stopped, force it to momentarily pause, so we can update its breakpoint registers. */ @@ -594,6 +596,7 @@ static int arm_stopped_by_watchpoint (void) { struct lwp_info *lwp = get_thread_lwp (current_thread); + arm_lwp_info *arm_lwp = (arm_lwp_info *) lwp_arch_private_info (lwp); siginfo_t siginfo; /* We must be able to set hardware watchpoints. */ @@ -617,8 +620,7 @@ arm_stopped_by_watchpoint (void) return 0; /* Cache stopped data address for use by arm_stopped_data_address. */ - lwp->arch_private->stopped_data_address - = (CORE_ADDR) (uintptr_t) siginfo.si_addr; + arm_lwp->stopped_data_address = (CORE_ADDR) (uintptr_t) siginfo.si_addr; return 1; } @@ -629,7 +631,8 @@ static CORE_ADDR arm_stopped_data_address (void) { struct lwp_info *lwp = get_thread_lwp (current_thread); - return lwp->arch_private->stopped_data_address; + arm_lwp_info *arm_lwp = (arm_lwp_info *) lwp_arch_private_info (lwp); + return arm_lwp->stopped_data_address; } /* Called when a new process is created. */ @@ -644,7 +647,7 @@ arm_new_process (void) static void arm_new_thread (struct lwp_info *lwp) { - struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); + arm_lwp_info *info = new arm_lwp_info; int i; for (i = 0; i < MAX_BPTS; i++) @@ -652,7 +655,7 @@ arm_new_thread (struct lwp_info *lwp) for (i = 0; i < MAX_WPTS; i++) info->wpts_changed[i] = 1; - lwp->arch_private = info; + lwp_set_arch_private_info (lwp, info); } static void @@ -661,7 +664,6 @@ arm_new_fork (struct process_info *parent, struct process_info *child) struct arch_process_info *parent_proc_info; struct arch_process_info *child_proc_info; struct lwp_info *child_lwp; - struct arch_lwp_info *child_lwp_info; int i; /* These are allocated by linux_add_process. */ @@ -692,7 +694,8 @@ arm_new_fork (struct process_info *parent, struct process_info *child) /* Mark all the hardware breakpoints and watchpoints as changed to make sure that the registers will be updated. */ child_lwp = find_lwp_pid (ptid_of (child)); - child_lwp_info = child_lwp->arch_private; + arm_lwp_info *child_lwp_info + = (arm_lwp_info *) lwp_arch_private_info (child_lwp); for (i = 0; i < MAX_BPTS; i++) child_lwp_info->bpts_changed[i] = 1; for (i = 0; i < MAX_WPTS; i++) @@ -708,7 +711,7 @@ arm_prepare_to_resume (struct lwp_info *lwp) int pid = lwpid_of (thread); struct process_info *proc = find_process_pid (pid_of (thread)); struct arch_process_info *proc_info = proc->priv->arch_private; - struct arch_lwp_info *lwp_info = lwp->arch_private; + arm_lwp_info *lwp_info = (arm_lwp_info *) lwp_arch_private_info (lwp); int i; for (i = 0; i < arm_linux_get_hw_breakpoint_count (); i++) diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index e650b0d..5decca7 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -152,7 +152,7 @@ void lwp_set_arch_private_info (struct lwp_info *lwp, struct arch_lwp_info *info) { - lwp->arch_private = info; + lwp->arch_private.reset (info); } /* See nat/linux-nat.h. */ @@ -160,7 +160,7 @@ lwp_set_arch_private_info (struct lwp_info *lwp, struct arch_lwp_info * lwp_arch_private_info (struct lwp_info *lwp) { - return lwp->arch_private; + return lwp->arch_private.get () ; } /* See nat/linux-nat.h. */ @@ -414,7 +414,6 @@ delete_lwp (struct lwp_info *lwp) debug_printf ("deleting %ld\n", lwpid_of (thr)); remove_thread (thr); - free (lwp->arch_private); delete lwp; } @@ -7588,6 +7587,8 @@ linux_get_pc_64bit (struct regcache *regcache) return pc; } +arch_lwp_info::~arch_lwp_info () = default; + static struct target_ops linux_target_ops = { linux_create_inferior, diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index dcc9315..43c1735 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -377,7 +377,7 @@ struct lwp_info #endif /* Arch-specific additions. */ - struct arch_lwp_info *arch_private = NULL; + std::unique_ptr arch_private; }; int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine); diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c index b4a83b0..b09a099 100644 --- a/gdb/gdbserver/linux-mips-low.c +++ b/gdb/gdbserver/linux-mips-low.c @@ -188,10 +188,10 @@ struct arch_process_info /* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info +struct mips_lwp_info : public arch_lwp_info { /* Non-zero if our copy differs from what's recorded in the thread. */ - int watch_registers_changed; + int watch_registers_changed = 0; }; /* From mips-linux-nat.c. */ @@ -298,6 +298,7 @@ update_watch_registers_callback (struct inferior_list_entry *entry, { struct thread_info *thread = (struct thread_info *) entry; struct lwp_info *lwp = get_thread_lwp (thread); + mips_lwp_info *mips_lwp = (mips_lwp_info *) lwp_arch_private_info (lwp); int pid = *(int *) pid_p; /* Only update the threads of this process. */ @@ -305,7 +306,7 @@ update_watch_registers_callback (struct inferior_list_entry *entry, { /* The actual update is done later just before resuming the lwp, we just mark that the registers need updating. */ - lwp->arch_private->watch_registers_changed = 1; + mips_lwp->watch_registers_changed = 1; /* If the lwp isn't stopped, force it to momentarily pause, so we can update its watch registers. */ @@ -334,11 +335,11 @@ mips_linux_new_process (void) static void mips_linux_new_thread (struct lwp_info *lwp) { - struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); + mips_lwp_info *info = new mips_lwp_info; info->watch_registers_changed = 1; - lwp->arch_private = info; + lwp_set_arch_private_info (lwp, info); } /* Create a new mips_watchpoint and add it to the list. */ @@ -413,8 +414,9 @@ mips_linux_prepare_to_resume (struct lwp_info *lwp) ptid_t ptid = ptid_of (get_lwp_thread (lwp)); struct process_info *proc = find_process_pid (ptid_get_pid (ptid)); struct arch_process_info *priv = proc->priv->arch_private; + mips_lwp_info *mips_lwp = (mips_lwp_info *) lwp_arch_private_info (lwp); - if (lwp->arch_private->watch_registers_changed) + if (mips_lwp->watch_registers_changed) { /* Only update the watch registers if we have set or unset a watchpoint already. */ @@ -428,7 +430,7 @@ mips_linux_prepare_to_resume (struct lwp_info *lwp) perror_with_name ("Couldn't write watch register"); } - lwp->arch_private->watch_registers_changed = 0; + mips_lwp->watch_registers_changed = 0; } } diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 9378276..130a4d4 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -322,13 +322,15 @@ ptid_of_lwp (struct lwp_info *lwp) return lwp->ptid; } +arch_lwp_info::~arch_lwp_info () = default; + /* See nat/linux-nat.h. */ void lwp_set_arch_private_info (struct lwp_info *lwp, struct arch_lwp_info *info) { - lwp->arch_private = info; + lwp->arch_private.reset (info); } /* See nat/linux-nat.h. */ @@ -336,7 +338,7 @@ lwp_set_arch_private_info (struct lwp_info *lwp, struct arch_lwp_info * lwp_arch_private_info (struct lwp_info *lwp) { - return lwp->arch_private; + return lwp->arch_private.get (); } /* See nat/linux-nat.h. */ @@ -837,7 +839,6 @@ static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp); static void lwp_free (struct lwp_info *lp) { - xfree (lp->arch_private); delete lp; } diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h index a783674..57fab42 100644 --- a/gdb/linux-nat.h +++ b/gdb/linux-nat.h @@ -21,8 +21,6 @@ #include "target.h" #include -struct arch_lwp_info; - /* Structure describing an LWP. This is public only for the purposes of ALL_LWPS; target-specific code should generally not access it directly. */ @@ -103,7 +101,7 @@ struct lwp_info int core = -1; /* Arch-specific additions. */ - arch_lwp_info *arch_private = NULL; + std::unique_ptr arch_private; /* Previous and next pointers in doubly-linked list of known LWPs, sorted by reverse creation order. */ diff --git a/gdb/nat/aarch64-linux-hw-point.c b/gdb/nat/aarch64-linux-hw-point.c index 9800d9a..bba2200 100644 --- a/gdb/nat/aarch64-linux-hw-point.c +++ b/gdb/nat/aarch64-linux-hw-point.c @@ -258,13 +258,13 @@ debug_reg_change_callback (struct lwp_info *lwp, void *ptr) int tid = ptid_get_lwp (ptid_of_lwp (lwp)); int idx = param_p->idx; int is_watchpoint = param_p->is_watchpoint; - struct arch_lwp_info *info = lwp_arch_private_info (lwp); + aarch64_lwp_info *info = (aarch64_lwp_info *) lwp_arch_private_info (lwp); dr_changed_t *dr_changed_ptr; dr_changed_t dr_changed; if (info == NULL) { - info = XCNEW (struct arch_lwp_info); + info = new aarch64_lwp_info; lwp_set_arch_private_info (lwp, info); } diff --git a/gdb/nat/aarch64-linux-hw-point.h b/gdb/nat/aarch64-linux-hw-point.h index 610a5f1..6547594 100644 --- a/gdb/nat/aarch64-linux-hw-point.h +++ b/gdb/nat/aarch64-linux-hw-point.h @@ -154,13 +154,13 @@ struct aarch64_debug_reg_state /* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info +struct aarch64_lwp_info : public arch_lwp_info { /* When bit N is 1, it indicates the Nth hardware breakpoint or watchpoint register pair needs to be updated when the thread is resumed; see aarch64_linux_prepare_to_resume. */ - dr_changed_t dr_changed_bp; - dr_changed_t dr_changed_wp; + dr_changed_t dr_changed_bp = 0; + dr_changed_t dr_changed_wp = 0; }; extern int aarch64_num_bp_regs; diff --git a/gdb/nat/aarch64-linux.c b/gdb/nat/aarch64-linux.c index 388eee8..12999da 100644 --- a/gdb/nat/aarch64-linux.c +++ b/gdb/nat/aarch64-linux.c @@ -33,7 +33,7 @@ void aarch64_linux_prepare_to_resume (struct lwp_info *lwp) { - struct arch_lwp_info *info = lwp_arch_private_info (lwp); + aarch64_lwp_info *info = (aarch64_lwp_info *) lwp_arch_private_info (lwp); /* NULL means this is the main thread still going through the shell, or, no watchpoint has been set yet. In that case, there's @@ -73,7 +73,7 @@ aarch64_linux_prepare_to_resume (struct lwp_info *lwp) void aarch64_linux_new_thread (struct lwp_info *lwp) { - struct arch_lwp_info *info = XNEW (struct arch_lwp_info); + aarch64_lwp_info *info = new aarch64_lwp_info; /* Mark that all the hardware breakpoint/watchpoint register pairs for this thread need to be initialized (with data from diff --git a/gdb/nat/linux-nat.h b/gdb/nat/linux-nat.h index 7dd18fe..751f32c 100644 --- a/gdb/nat/linux-nat.h +++ b/gdb/nat/linux-nat.h @@ -23,7 +23,12 @@ #include "target/waitstatus.h" struct lwp_info; -struct arch_lwp_info; + +/* Base class for arch-specific lwp data. */ +struct arch_lwp_info +{ + virtual ~arch_lwp_info () = 0; +}; /* This is the kernel's hard limit. Not to be confused with SIGRTMIN. */ #ifndef __SIGRTMIN diff --git a/gdb/nat/x86-linux.c b/gdb/nat/x86-linux.c index b499e74..b35ed19 100644 --- a/gdb/nat/x86-linux.c +++ b/gdb/nat/x86-linux.c @@ -23,11 +23,11 @@ /* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info +struct x86_lwp_info : public arch_lwp_info { /* Non-zero if our copy differs from what's recorded in the thread. */ - int debug_registers_changed; + int debug_registers_changed = 0; }; /* See nat/x86-linux.h. */ @@ -36,9 +36,11 @@ void lwp_set_debug_registers_changed (struct lwp_info *lwp, int value) { if (lwp_arch_private_info (lwp) == NULL) - lwp_set_arch_private_info (lwp, XCNEW (struct arch_lwp_info)); + lwp_set_arch_private_info (lwp, new x86_lwp_info ()); - lwp_arch_private_info (lwp)->debug_registers_changed = value; + x86_lwp_info *info = (x86_lwp_info *) lwp_arch_private_info (lwp); + + info->debug_registers_changed = value; } /* See nat/x86-linux.h. */ @@ -46,7 +48,7 @@ lwp_set_debug_registers_changed (struct lwp_info *lwp, int value) int lwp_debug_registers_changed (struct lwp_info *lwp) { - struct arch_lwp_info *info = lwp_arch_private_info (lwp); + x86_lwp_info *info = (x86_lwp_info *) lwp_arch_private_info (lwp); /* NULL means either that this is the main thread still going through the shell, or that no watchpoint has been set yet. diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c index 90c73c4..4e38f16 100644 --- a/gdb/s390-linux-nat.c +++ b/gdb/s390-linux-nat.c @@ -44,10 +44,10 @@ /* Per-thread arch-specific data. */ -struct arch_lwp_info +struct s390_lwp_info : public arch_lwp_info { /* Non-zero if the thread's PER info must be re-written. */ - int per_info_changed; + int per_info_changed = 0; }; static int have_regset_last_break = 0; @@ -665,7 +665,7 @@ s390_prepare_to_resume (struct lwp_info *lp) CORE_ADDR watch_lo_addr = (CORE_ADDR)-1, watch_hi_addr = 0; unsigned ix; s390_watch_area *area; - struct arch_lwp_info *lp_priv = lwp_arch_private_info (lp); + s390_lwp_info *lp_priv = (s390_lwp_info *) lwp_arch_private_info (lp); struct s390_debug_reg_state *state = s390_get_debug_reg_state (pid); int step = lwp_is_stepping (lp); @@ -763,9 +763,10 @@ static void s390_mark_per_info_changed (struct lwp_info *lp) { if (lwp_arch_private_info (lp) == NULL) - lwp_set_arch_private_info (lp, XCNEW (struct arch_lwp_info)); + lwp_set_arch_private_info (lp, new s390_lwp_info); - lwp_arch_private_info (lp)->per_info_changed = 1; + s390_lwp_info *lp_private = (s390_lwp_info *) lwp_arch_private_info (lp); + lp_private->per_info_changed = 1; } /* When attaching to a new thread, mark its PER info as changed. */