From patchwork Fri Oct 20 20:26:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23740 Received: (qmail 3190 invoked by alias); 20 Oct 2017 20:26:34 -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 3179 invoked by uid 89); 20 Oct 2017 20:26:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.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=HX-ClientProxiedBy:sk:AM3PR07 X-HELO: sesbmg23.ericsson.net Received: from sesbmg23.ericsson.net (HELO sesbmg23.ericsson.net) (193.180.251.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 20 Oct 2017 20:26:31 +0000 Received: from ESESSHC009.ericsson.se (Unknown_Domain [153.88.183.45]) by sesbmg23.ericsson.net (Symantec Mail Security) with SMTP id 2F.D9.03220.5FB5AE95; Fri, 20 Oct 2017 22:26:29 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.45) with Microsoft SMTP Server (TLS) id 14.3.352.0; Fri, 20 Oct 2017 22:26:28 +0200 Received: from [142.133.61.79] (192.75.88.130) by AM3PR07MB305.eurprd07.prod.outlook.com (2a01:111:e400:881b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.156.4; Fri, 20 Oct 2017 20:26:26 +0000 Subject: Re: [RFA 3/3] Remove cleanups from break-catch-syscall.c To: Tom Tromey , References: <20171018040645.7212-1-tom@tromey.com> <20171018040645.7212-3-tom@tromey.com> From: Simon Marchi Message-ID: <280a7994-38a6-2138-b199-8902ee2651b0@ericsson.com> Date: Fri, 20 Oct 2017 16:26:15 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171018040645.7212-3-tom@tromey.com> X-ClientProxiedBy: CY4PR04CA0075.namprd04.prod.outlook.com (2603:10b6:910:4f::40) To AM3PR07MB305.eurprd07.prod.outlook.com (2a01:111:e400:881b::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 59fb38b5-3b77-4e9c-5113-08d517f8d702 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603229); SRVR:AM3PR07MB305; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 3:7EnS0T+7CeA8Kb2sPI14DvtrAF61oQYldxOvP9CjEB9JQ4KtSwcEgbjPrHlnM419t6ft0u7stSDJxKG/ENuBztbISQET6uwaIaEmtIB/TxHTJ3I6LkfKUjZutuGsA+EGf655oJC+APtuyvdwytrfzSsv88VSSsWZlpLJ8Q5cSYUVU5ZLZpoj1jJJS3VgpsfRHcUFc0HzNZ1d6KBJke9E2z7lG9RKYwuh2qeC0oBX3bep4JzrkhxnsHHomfkE+SwG; 25:ROQaqThRyftBf+jXOXy++EgU7lnmeORuh5Koz+kPthcP70sykD5tUzupQ8RV84zMEIAncuywBsuh9/NatAPudOjdf9buCx+mC0dY7nqpfjWG4sIzrcR5dUqexq6ROqw3k3qDwRdu6ziejKuz2LBVZgqfu0HLZpqvbV06hA/HSp4YBMrcfK6Q0PdYc65D2lvVVhlCi8oJcNRAdFCwkOY5Lxd8QYfyZcOXSVvDvY3omxt86XljgvVyu+76NoDOSdtaneiN0vLFKseBjJBUXf/OLJCfl+eLW1sJ2E3BeUNhnSkg5PeUPlQKgo9NqNo4FpzUo2edktpO549kq5mCI8tIrfyFsIfKEALI96121EV0F2o=; 31:P/Tut2QGL4ZeYSplTtAAW0JP+/I05AzgmRkkA1M8Ewd00wnRAeaOQ0NVJXQjpOJPoVitU9S8BTacqamZjCl0FqMz56OXNOY9xoNvCi4bho2UPeFVfJaoHv7S8gIx8oNiVEZVeamIPNHhAUDInZhmGyWBS3pdntE3jiLttMdCWDLOR+xG+7KDHC0jllUDblD/pIZEOb9hZ8EubrUbaSd5JKlnSJ5kkeyXLjlQ46HsREI= X-MS-TrafficTypeDiagnostic: AM3PR07MB305: X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 20:1oJbhZHsk6EoqNj8TWH2hmbIYfJkzrg5rTE6pFcscqyV4/DumL1HJ9PVoiURSPI6suO1Vt0SbdTZzufm/mdPp/9b8eP82Dx026tVYhmZfeY41Qk2Nvg0jA9czcl6H0i4Ny2N2enSkNq003bprXXEs8QuOXR3qgyWQfqn65bhi/bFv9GhxcgIaOqdU0jGJj0KAqUqdzGXUhIy8rIrWQJuXvYj47lU143cHBEN1wsIEkIiSuFansYzmsaDbg+nNMKMUCbVbz0nkdxeK+jvB9F591W1eonR7YE3jKbfiRb0gow0v37VhZ6XX41iYqdpiZzwTX9Z5lnzmMswDVnMHYw6+j5xfykLhbxzpen3+RDzF5VMFZuL3rwSRNlxFSTDlJXANWEbkQR6KnhUbRI8yRXMneaNGq2BmJcXmg/xiK2tvueZvMnn3WAUjt0CDGZ8aUaIh1DztX4q33JoxgaQ/mWHZv9Vpl9NWGnmq+op8akw01o5pwXoauTq7UXiYiAtPLO+; 4:xadot9yUrKj4jydiNpcbj2P0ZOb8sjVXGhcBU01aJ1ieeOYlvpX0sDXLAXvao7NnXehXtGdawU4D5qS75Maeq01EaKtsdnwPB87Cpdtf5XtdVFIa2GnbFxKt0bCA+29tW8sPWtH8ccTF+Rwdx+SfiBFWMkIj//DnRLzjC9jM87ClZOmUBvJ2TT95ezBP5+4NPsNltdmSLhoR673HoAPHDw7nC/t3JajnSLoq4XJtF5aDocpK79ft803xke+rXPq2KMOqw4u28FcnwrRv/jNAE6LPDh71bHurOYFDSYYa/ge2+Q59KVGXOraMZSRemVX1yPenNQBJAw9G2exlusr4Gw== X-Exchange-Antispam-Report-Test: UriScan:(37575265505322)(17755550239193); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3231020)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM3PR07MB305; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM3PR07MB305; X-Forefront-PRVS: 0466CA5A45 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6049001)(346002)(39860400002)(376002)(24454002)(189002)(377424004)(199003)(54534003)(106356001)(230783001)(86362001)(65806001)(575784001)(64126003)(53936002)(6486002)(50986999)(65826007)(316002)(16576012)(16526018)(2906002)(58126008)(65956001)(66066001)(31696002)(478600001)(105586002)(49976008)(47776003)(97736004)(53546010)(101416001)(68736007)(229853002)(7736002)(76176999)(81156014)(8936002)(3846002)(6246003)(6116002)(8676002)(230700001)(31686004)(81166006)(23676002)(5660300001)(54356999)(50466002)(25786009)(33646002)(4001150100001)(189998001)(36756003)(6666003)(2950100002)(83506002)(305945005)(78286006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR07MB305; H:[142.133.61.79]; 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) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTNQUjA3TUIzMDU7MjM6RVNNODFqTk90WHFyOFJxRDF4SU9IT1huZTBR?= =?utf-8?B?Wkh4a05lbEhCUmxuN0RBTUZyRWlURUZDWkJwdW50ejdCNmlDczBUbm1HMUZL?= =?utf-8?B?bEJFOWlFcXZpbWxLZkJVK2xvVW4ra2FtWlBQYnZ6Z05BT1dxenp4a29RbzJW?= =?utf-8?B?UklwWVB2Nit1bm11eDU0N090S3VMUUwvRHNRa2ljcTRBc1lDaG5Xa0t2U2o1?= =?utf-8?B?MmdzOHl1UmxURnFPQ3RBdTE1bTZXN0M4cHIxVjA0anAzSTYrekFmRGJiUUJo?= =?utf-8?B?M3ZxYlhwclVhdE1GWHU4YWpvT1N1RzV1ZkJtZ2dRQWdKc21WTXdUZ3NrVEhL?= =?utf-8?B?Q2pNZ1BWNTlnMGUzWUNLUFd5cEpIQXlEN1RmeVlvalgzNnpvdUJHcTMxM01j?= =?utf-8?B?MWZ1RXVjVTBGQ2YwZjA0Rno5b01OOS84OExEajVZbU84M0hrSHVkZThpYXRM?= =?utf-8?B?cXExOW9WeVdXRWFvL3A1eUd3dk1aZEZOV3IwUE5ZSWg3ODVxVUdjQ0JjT1Zv?= =?utf-8?B?ak5QaHBHa3Q3aTdna2VzTS84OHZNUXZrNWpCTjhMNWFlQVJpTnJ3Z3pQR0Jt?= =?utf-8?B?L0RycXRHYmhoeHVpVEV0dUtzK2VUck5VY0FlM280Y0hYbUp3RVdiV09wSXRU?= =?utf-8?B?SW5qNzllVHpjdnJ6Sm13a2cvRzNmWWFvd2g4NkRtZmluUi8vY3RTaTdkd0Vt?= =?utf-8?B?OThSVGFQNERTbnUwSFlvYTY2cHB3TWNDWmh4TUh5L1ZlRXdDNk10QjRhNUpL?= =?utf-8?B?MXRrblE5bFNiUWtEYVFQb2tFbHFldWhnOXIvclIxdWtORDFielllUVEvUmYy?= =?utf-8?B?Sy82QVJVaDBpcUhCWmlnUGVmTmYyQmVyMkVGZ01mOGNsZ1hkd1hhQ1NESzU2?= =?utf-8?B?d2EwTXhINEh6K2U2T3JidHdOS2k3RHdVdmZaNU5rWW9qS0MzVnpTR1M5MlBl?= =?utf-8?B?RW9TRDJScE5KYnVpck93bXlnNmtzdjRPV0x2QXRSNmxHeGxjc1M3aDFrR3JQ?= =?utf-8?B?enUrdzc1RWpNeHRCb3pidHZKNVZwRmJHN0RHUThzY0VTQmtOdmVQTDY2WjFp?= =?utf-8?B?TzA4YnBsSHNaRGpWUUpUSjByZUtoYkJjN1d2bzNySTM1aDBKQWNSWFNnc2lO?= =?utf-8?B?U2VoRkVQTlp2RGlReSs4czZDb0FNNXlLTGZDdlhmbjJwdzVvdEdzeTNBRzQ4?= =?utf-8?B?S05MWTdUVUhVRjNFeHRMSEQwY0oxSG8rcWFzdFk3bFVpNGxqVmtqQk1jSjZI?= =?utf-8?B?SXdzalR0NXYrOTRHRXNBSU50bTNkeHZiUUs5cmNCeC9DdTBKYTJ0VGxDWk90?= =?utf-8?B?ZUlLS1Q0MHM3V2kzWHEyS1IzN3N5ZGt3dGprY0Y3N0h1ZTJtNGtFcURCR0dE?= =?utf-8?B?NU9rM29LalQ1RHZtdGtham9lRW4vNGM1OWNYRjZ2MGY2SlhJT0ZHaU5lekNy?= =?utf-8?B?T1l4ZTV1NnRxbVVkRXR1M2VJQ3lVUkUzc1lSZVNhZjdWYW5wNlN6SCt6RVZF?= =?utf-8?B?YkhTT2F2M1lIOGczVUg4a2RacFF0UEJoOEFEU0VsMHlKTnhRajB1Mzc1bFQ5?= =?utf-8?B?eCtXWiswR1hNU2RBZDBaYWJwcHNoVUJDUjVxNnAxSXcxTVNGTmFhYXpzK1Yx?= =?utf-8?B?VFNnWHE3WDQ5YVE5akFlbEJJdVltV3pOMkU2cWRwWGxFZExsbE5Rei8vRkVh?= =?utf-8?B?WW9VNlBVdkYzdkVRR0ZyZEUrZGNKeVV4bXptQjFtV2g4RGR5RWFCa0E1d2dq?= =?utf-8?B?NWJLVjhXY0JDSnEyblJ5QW92dTh4SnJpemE5WjZlMnNFSGY4QjVHa1BYQXhj?= =?utf-8?B?UjBGWU5WNXVuQzRqS1NrUmhuSHVPa0MxZFd6NkVHMEVUbW9SdDJiYURVbXA1?= =?utf-8?B?Y1huYk9ORDdGVE9zMkJ2MXAxdkgxSDhaWXFST012cmFGZDBmTjBmd3oyNjYy?= =?utf-8?Q?9R+fPnGLBn9em5CgoCnP2JMc7Eaik=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 6:iZeXJnNr7rFeBb8wNUeegCHB2r3LzSlLWGMLUxd8IKHSAJT7jTlAWcATtpm9YucSjUgQ+r98DwBHrHZSBfQu83E4usb4DWZxqJT7o82dSusuzpqKjElYhw2oxohhlHD25FNmwsUJpGJ/BlESKrPnOIi44AKc/FwFZhKDwmodXoCkcKUtLPSxc6DtYcQQIRUqp+LBwnMPlprD0dLNem7IqwMQFulFueJF3kuu0lzvYR9NnOOp6xCkiMMOutzs6zyMiVlxtBX9VJUZ/g8rIYyhEaacx5ya+2RDhbofDtK+ZzHZeQ+noygg7d9ubl9r1gZkq8vcm5xAR7EJgQMYDy2HYQ==; 5:GVVk9Gjvd/LwNcm0b0ztdvCLV3F15BvTWunfAhYPF02671oMPOveC8Hx5c2Yc1nq5J+QbTvHLtstfg4ywj9e+JtTVxl4UN1HsWR/sw6eXiySsxHe5dtPbrvwNvXlOoSRTs+CnpAqc7mI5mRQoIH4TA==; 24:kpsatcvffsYg6poFKSu7hDpnIAFgVbdAoQ514lUJq9ZtMC9flDP9uekz3/VebAw7KUX0HZSg+18IyxfiMa+hN9/pPl9qwVZ1ThiZX+scUwI=; 7:dllRDUCLE4NAsFWiPy3wQ01hCub+iMHetVnX1sEF8T/D7F7a7QFZwTncowSKFuFrBHaff6YNsYjsPwkEt14qT+TybSXqZFB7KKMzw846xMa08IsFqDs/Kj/X98cSIhMr1+6fmmjV5Fn8W0N+CwddaRNosU6f4X7whRxp0Paav3TUIt1R85Z/AJqHqecmZYGFwJwEjVVOcm0zhkqVE0rwEvVlYHgSk6R6IZ/7GRgL7vY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2017 20:26:26.1718 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 59fb38b5-3b77-4e9c-5113-08d517f8d702 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR07MB305 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes On 2017-10-18 12:06 AM, Tom Tromey wrote: > This removes the remaining cleanups from break-catch-syscall.c by > storing temporary strings in a vector. > > ChangeLog > 2017-10-17 Tom Tromey > > * break-catch-syscall.c (catch_syscall_completer): Use > std::string, gdb::unique_xmalloc_ptr. > --- > gdb/ChangeLog | 5 +++++ > gdb/break-catch-syscall.c | 35 ++++++++++++++++++----------------- > 2 files changed, 23 insertions(+), 17 deletions(-) > > diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c > index 01e761ce37..2bbfee0ac4 100644 > --- a/gdb/break-catch-syscall.c > +++ b/gdb/break-catch-syscall.c > @@ -560,9 +560,7 @@ catch_syscall_completer (struct cmd_list_element *cmd, > const char *text, const char *word) > { > struct gdbarch *gdbarch = get_current_arch (); > - struct cleanup *cleanups = make_cleanup (null_cleanup, NULL); > - const char **group_list = NULL; > - const char **syscall_list = NULL; > + gdb::unique_xmalloc_ptr group_list; > const char *prefix; > int i; > > @@ -575,34 +573,37 @@ catch_syscall_completer (struct cmd_list_element *cmd, > if (startswith (prefix, "g:") || startswith (prefix, "group:")) > { > /* Perform completion inside 'group:' namespace only. */ > - group_list = get_syscall_group_names (gdbarch); > + group_list.reset (get_syscall_group_names (gdbarch)); > if (group_list != NULL) > - complete_on_enum (tracker, group_list, word, word); > + complete_on_enum (tracker, group_list.get (), word, word); > } > else > { > /* Complete with both, syscall names and groups. */ > - syscall_list = get_syscall_names (gdbarch); > - group_list = get_syscall_group_names (gdbarch); > + gdb::unique_xmalloc_ptr syscall_list > + (get_syscall_names (gdbarch)); > + group_list.reset (get_syscall_group_names (gdbarch)); > + > + const char **group_ptr = group_list.get (); > + > + /* Hold on to strings while we're using them. */ > + std::vector holders; > > /* Append "group:" prefix to syscall groups. */ > - for (i = 0; group_list[i] != NULL; i++) > + for (i = 0; group_ptr[i] != NULL; i++) > { > - char *prefixed_group = xstrprintf ("group:%s", group_list[i]); > + std::string prefixed_group = string_printf ("group:%s", > + group_ptr[i]); > > - group_list[i] = prefixed_group; > - make_cleanup (xfree, prefixed_group); > + group_ptr[i] = prefixed_group.c_str (); > + holders.push_back (prefixed_group); > } Err, I think there's something that doesn't make sense here actually. We record in group_ptr[i] a pointer to the buffer of the temporary std::string, that gets deleted when we go out of scope (end of the iteration). That causes this fail: Running /home/emaisin/src/binutils-gdb/gdb/testsuite/gdb.base/catch-syscall.exp ... FAIL: gdb.base/catch-syscall.exp: complete catch syscall group suggests 'group:' prefix (pattern 2) By hand, you can do (gdb) catch syscall g There should be many entries starting with group:, in the failing case there's only one. Presumably because in group_ptr all the pointers point to the same location, that contains the last group added. The completion mechanism then removes duplicates. It is not enough to assign holders.back ().c_str () (after having pushed the string in the vector), because when the vector gets reallocated it can now point to stale memory. I think we have to do it in two pass, prepare the vector of std::string, and then get pointers to the strings. Something like this: commit f9cab673480425a130b73394c3a63d256eadf314 Author: Simon Marchi Date: Fri Oct 20 16:22:40 2017 -0400 Fix syscall group completion diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c index 82d3e36..095284c 100644 --- a/gdb/break-catch-syscall.c +++ b/gdb/break-catch-syscall.c @@ -562,7 +562,6 @@ catch_syscall_completer (struct cmd_list_element *cmd, struct gdbarch *gdbarch = get_current_arch (); gdb::unique_xmalloc_ptr group_list; const char *prefix; - int i; /* Completion considers ':' to be a word separator, so we use this to verify whether the previous word was a group prefix. If so, we @@ -590,14 +589,11 @@ catch_syscall_completer (struct cmd_list_element *cmd, std::vector holders; /* Append "group:" prefix to syscall groups. */ - for (i = 0; group_ptr[i] != NULL; i++) - { - std::string prefixed_group = string_printf ("group:%s", - group_ptr[i]); + for (int i = 0; group_ptr[i] != NULL; i++) + holders.push_back (string_printf ("group:%s", group_ptr[i])); - group_ptr[i] = prefixed_group.c_str (); - holders.push_back (std::move (prefixed_group)); - } + for (int i = 0; group_ptr[i] != NULL; i++) + group_ptr[i] = holders[i].c_str (); if (syscall_list != NULL) complete_on_enum (tracker, syscall_list.get (), word, word);