From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91383 invoked by alias); 23 Oct 2017 19:37:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 91368 invoked by uid 89); 23 Oct 2017 19:37:56 -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=Hmm, xfree X-HELO: sessmg22.ericsson.net Received: from sessmg22.ericsson.net (HELO sessmg22.ericsson.net) (193.180.251.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 23 Oct 2017 19:37:54 +0000 Received: from ESESSHC011.ericsson.se (Unknown_Domain [153.88.183.51]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id 5C.7C.26775.0154EE95; Mon, 23 Oct 2017 21:37:52 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.51) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 23 Oct 2017 21:37:51 +0200 Received: from [142.133.48.78] (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; Mon, 23 Oct 2017 19:37:49 +0000 Subject: Re: [PATCH] Fix faulty use of obstack_free() to *shrink* dont_print_statmem_obstack. Instead use obstack_blank_fast() with a "negative" size. A real stack data structured would be appropriate here. Added unit test gdb/testsuite/gdb.cp/printstaticrecursion.exp. From: Simon Marchi To: Patrick Frants , References: <1508405381-16638-1-git-send-email-osscontribute@gmail.com> <0d612f89-a3a9-afea-965b-7c364b660235@ericsson.com> Message-ID: <6cc773d7-ee68-5f5c-46f4-cc4a044c9d3e@ericsson.com> Date: Mon, 23 Oct 2017 19:37:00 -0000 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: <0d612f89-a3a9-afea-965b-7c364b660235@ericsson.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: BN6PR21CA0021.namprd21.prod.outlook.com (2603:10b6:404:8e::31) To AM3PR07MB305.eurprd07.prod.outlook.com (2a01:111:e400:881b::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e24ff11b-a08c-4ea1-37eb-08d51a4d8bf1 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:VI9hKJ/huINeoAtYUlsCmVE0iHG2yLze7ssFunaDwvl+lTcaSskiEg4eOXQGu8niSfzOan0VrFI3rFBgZe7x1HYfBF0klWJNuRyxwuLrU0xNI5kNsmUU2wFHJV2m/35++xXFVAcG3GThaI2PR82OGzGWPtwknNHSPJftPl4aENoqBmtwZY5ksENjw8l1CZ/c2VDgoCk99dF+ChitllqWJOR9+CT66iLlNxQ/zsEaxRePA510uzhX+YvMsfXj27pr;25:bfo1KgiTo9MjJ0vOTV3T/qnxU3nZ24KEIRpDYcozemNBn8Lqf64xH2iX8Vr2ly3/imfHsGbFHzZEVnWbjK7ZMgg3n5FbvY7ikDLlRQrfZ8RM+NoqTcKgNls/oTZBN81zkRYhktsBGbZbZGd0B1tpXc4n1r5UFUYiFArzMcPr4gE0lT/U4/YwU3hKce+gYghKs6uiS2HcYikEEeGDYbzulwbFhZttSuI02H0hH1nvoYwnFHBK4EwQMfzQpR/E7u95El9DZmmLbkevdVhbRincJlt9AozrxEpt3InIAe+50SbOcGZuWd+9reGaNRNcn+8Wyy5R7Rkz4g5jLAyrvkbT0w==;31:NRlzN83Le3pXSadL16uDliYBTjqMUhHeaALpAE7234Aq9yllCCbP7oZOvs8dymEGH7E4nNwsXzKBGXPYpe8Vd8wYWpekzzMGGu9Qkl2Vx4GMnX+MbvAqAHuQOgc51ZcefP5Fpl7wFGs0wO9GWzaNVZXjuHLxrDb5/ov0/oeArB2409eWIkoLsYePXqGaC4rO5WJ1O9ayimT6JrLxQUzxvyVtqgxcXWcuxo3CVTFBHpY= X-MS-TrafficTypeDiagnostic: AM3PR07MB305: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1;AM3PR07MB305;20:TjxjkfiWq0nH89NFtyw+S32bzra5BxVCH+hyhu+rfKqWn9ZF5WlEHWm5c3569iS5FceKX2r7MNQqfdB+8DtulHR9XVc0uFxw4nG9kDtem0Xi8UXT6jxEKRG8h00SoxhOaz3e/XGmSzdutL8RH2AnJUYhVy3xjTVpBRkjTbzym+DOjUu1iHAccNwjeL/tU+LGukY3Ei5ShACkk3fUhSLqwhF4nVdQjNShGLSnY58KTVDr1ZjsNpJfHvDjfOQCgPMfRtLhYGocoWTbfGxUctZbwu70A8iJClflagEtCadTPjM8kwwpJH3vfs3DZsDP1DRo1vlCrDmdcbgn3jAzUx1JbfLUcHYMrqTZapDhVtqEVvEBv9duQdx2zc6kFGNTJF3PFWV3lvmCHL/h6yfewrgAnqUk+24jIPjOOrW7nZr6o+mczjNmHwoFDsBmdNEtl+TFtKmLXo+XM7bLFYByOPboa3CuFIwFOOwa9+8TQB/o5RJbj5Bmsx3rt9WYgTqqQ5mI;4:tQIESuqNHfXXp/0hI3B63anK7SEQsgCB+RPZELIPMiRkJLwYDjVUAyDUrWq/c9b+PggbgkNx3wRhEcinZx0/I2cOeRg805r6uN1XnVxKbrv5/OUeNQJnf9QRkP2HEOcFeWeNREUJ71/4b+BDcpd8m4v73xTPi7l/i4imstWyTvnuTaJ9gdNA0pJyyST1HqJQPbRKbK4CSXoX6g/43tjaFNDI+SPod7KyV29G0hzOB1JZMfCVU1Cky5Y8xtprlVXt 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)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(3231020)(93006095)(93001095)(10201501046)(6041248)(20161123558100)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(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: 046985391D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(6009001)(346002)(39860400002)(376002)(24454002)(199003)(189002)(377424004)(189998001)(305945005)(16526018)(7736002)(2906002)(64126003)(6666003)(65806001)(66066001)(65956001)(8676002)(2950100002)(101416001)(31686004)(81156014)(50466002)(5660300001)(25786009)(229853002)(65826007)(54356999)(50986999)(76176999)(6116002)(53546010)(3846002)(68736007)(23676002)(47776003)(81166006)(230700001)(8936002)(105586002)(58126008)(106356001)(16576012)(316002)(6486002)(36756003)(33646002)(83506002)(97736004)(4001150100001)(53936002)(39060400002)(31696002)(478600001)(6246003)(49976008)(86362001)(78286006)(219693003);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR07MB305;H:[142.133.48.78];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTNQUjA3TUIzMDU7MjM6NEY4Qk05UDA1LzNFMTJMemZuVWo2SlN0dlZr?= =?utf-8?B?MFByTmNCeXdlcmVRcFVja2NJeTYrUE1hcExjWmtxRitQYk5VK09ySkRISFpy?= =?utf-8?B?RnJSdHlTaEthT1RiVzhlN2pWMzNtcElyaWNjM2FKb2lQMmNVNlJLWVhQUUox?= =?utf-8?B?bXFyTFQ3cjZ3MUhjTlFvdXJESy9FL1I5eDNTcXZLcE9aYTNRNXF0MjFoaXR4?= =?utf-8?B?V0M4VlhJNGVYTXBCbUFjaC93cXlLUWY3eGZBdWtDMk4xdnFKeVN6ajlHUjYx?= =?utf-8?B?cVNUTEJRS21LR3J0TDNPQVpSUHppSnBLZGxwRnpzN2xnR2hZaDFIZ1YyZ1h4?= =?utf-8?B?QTRCam1oZzV5Qk9wYms4Q1p3YnpscWx4NHU4QzViZjN5UGpzQXFBSGg4clc2?= =?utf-8?B?T3hMam5aOHVPYTBqaWhFN1dxME1KWUpjNkJpMDVCTGdXZVN6TlErblFuNS9v?= =?utf-8?B?ZExYWDZ2c3JJZ3BXSVN2aVI0VWRqOWFFd0hBdXU4VDV4dnlXMlFONGNjTW9R?= =?utf-8?B?MFVBaWY0eURnVjB5UkhOZTJwb0l4V0JPNXZ2bXFmSi9KRHIwZ3Z5Z20vVDly?= =?utf-8?B?T1BLUWN5RExaTFBQOW1VVFJMMlJEWDdhb2h3U3N5VzgvMC8xTHhLbjVqRjFp?= =?utf-8?B?eTYzVGl5S3Jwemo0SHBOQjQxTmxGeG5HTUg4YUZDaGl5VHkwaHNZOXRMOWh4?= =?utf-8?B?ck5jY09mbnNjOWNOZzcrQllVWkRKSW9kd1Fsd0NKdVpWQWZYbzVBejI4WE16?= =?utf-8?B?WmtyN2pJSTdIdk4yRDdyZzVkemRabVhtN1poWENrZ29CUXVIRTg4QU5WSFNi?= =?utf-8?B?UDVxemtkelZZVzZFN3Z0SHh0ZEZqUGFadktxN2wyVDBwRGY3dFZ2ZHVPVFVw?= =?utf-8?B?UzBpUUI0WjU3QXlKTGpUWGtHcmZpc3UxaDIzc3FDNXVDbTJxTFFDTzU0NXN0?= =?utf-8?B?YlJvZVhld2RXcHIwbjVTWGtvU0pTMjdjTUMyd1gzck9SUFJDOXUvWEVKSnov?= =?utf-8?B?SW1SSi9GaEJHbjNjd1Z5bHVaZytZN2RkbG4vYWF5bXlaUmdYVk4xenpibnBR?= =?utf-8?B?NmxuenQ3M2JUV2dEWGVRWDNDTTZ5RytWRlNFQlQ1L2M1dWJzQ2pwWFdCVkpv?= =?utf-8?B?SXY3REIwUDVWS0F4M1ZVVFFkdjk3Rm9WVUdQUlVCeGxheU54R1VURHFSeXhu?= =?utf-8?B?ZWJSdUdJdFh4RGkvanJUN2FZYmR4RVRqUGRoYXBKMHcyaUN3a1l5NkNBaVR6?= =?utf-8?B?aUthVUdJNzF6VldMZUF6K0hxRjdNVHNhNVQ5RHY0UVQ1TGdlVXkwZzlEMkY5?= =?utf-8?B?NzhEU0hHbU9vNmtodmk1Zm9JVGRIbnpUSlZPWmorUU9sMWNOTzB0UEtmTWdr?= =?utf-8?B?VEpnVWhYdVBoQ0tvY3lOQUNCeHc3ZHNtVGd6VzByNW9VNGZlSVNFSkVQa2Jl?= =?utf-8?B?N3dlWU1EcU1jbWlkL1RjSXJMNXhtU1NYOEpUVk1EN0VHNW9TajE5QTJqT1A2?= =?utf-8?B?czRBYmpuVFJqRzdXVHZSejVYUC9MUGR6dzRxVkdBYlNmVjc5ZzcwWWt0Z3pJ?= =?utf-8?B?QnJ1QmFYck5GRG9XdUZac1RkSUpERE1MRllBYmhjWEpYdVNnUkZTeTVXSE5B?= =?utf-8?B?YlZwZE5JMGYzcENkeHJEaTd0cHZpektIMWdIdUsveW9mRERxRUwzQWRxVFQ1?= =?utf-8?B?VE81NEV1eDA4ZWVPUUM4YU50MW1OVjc0NTEraU1XL1NraFZIVFhoWmUxY1U1?= =?utf-8?B?MDdkNklzQW11OE1FcnVNN21ZZU5wejV0ckMwblEwU09xTnF5ZVdVNTN0WlVm?= =?utf-8?B?ZHlGc0NXOU1OUkVPeTZsU1ZhOXJZaVhXejFWbTIveWlRdnlSSStSRWNySlhV?= =?utf-8?B?bkQ4YjdOa2Q4Y01wMzRyVXdjT0FTY1NUbG1ZZHR3ZW9CNW1NdGlHY3AzZm9I?= =?utf-8?B?bXJ2emVvV3c9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR07MB305;6:eey4UqBehnS9+TB40N+8Ep/uq8vz0dKvfJxmGC/8C0pOs0yXS3fBpySBDnC9hJJP3kYbaH3uGipeXXf8mQ8AHilDSZdCafhZogRxEVVZ9jc/fDWg+BQV5H4b2GXI8wGKhns/Hx4/m0AyKGVPLnCO06wGTPMV0iCPFurD3QSTN4EWfj29NlcxLah0mASS7Q2ZjwE22H0RODutgR+Xz1ax53gJWlA1tyTPo80XNqyuXeSc5NYadYg9BMxGamvuJo9mHwGPfWDsk+UCjK3/vtA1xRi8NlhjPXfEDbuXQSAfw9PtcL8O4rolJmI41BM6kk8UAQb/uTkUZb0XfNsl6uCJmQ==;5:LNhubqAksAFsbbX01daW2TE0gWB9bjTWMJfrpGBmCd7UW9Tak+RkDQScdAL4dEZtLTK/qg9kQW0mJOsuigJPlwm16ADPQHUJb7ovZb6F5QWAl8hJJvKbocjg0Jl509+Pnujxv7rwcJD3DSIn6S24nw==;24:Lx6qm0jQw8TxkZuxdANT5o8G7n5fmf3NMDmzOk0OztXRwGsYwbR88mFP9ljVTva+P+j+8ODNr2mBIe4f2A+lHwmfOxHcRbXObd70toloiC8=;7:MELwRgN9n9gTo/6GioEpMaa7N8shKAV2BWehhsZWM+7slMmwoaIlCqEs0it3adSEY6Orvf2VOKp9VYY0v+hB99xy4RgOCM7K/BO2oDl+ZzmeOWn2r6eTJYQwbZYUsLKiRzs75e2CIFbczT4lKDsGB6bVrSM1pa2L/EInaOE347QlW/mvTKdOXdr7Va9rH7lGio2DxbGFubAib/EYMR7W1HIJ78durOxc2SsEg45aHWc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2017 19:37:49.9657 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e24ff11b-a08c-4ea1-37eb-08d51a4d8bf1 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 X-SW-Source: 2017-10/txt/msg00729.txt.bz2 On 2017-10-23 01:17 PM, Simon Marchi wrote: > On 2017-10-23 12:09 PM, Simon Marchi wrote: >>> diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c >>> index fb9bfd9..8f9658d 100644 >>> --- a/gdb/cp-valprint.c >>> +++ b/gdb/cp-valprint.c >>> @@ -370,14 +370,9 @@ cp_print_value_fields (struct type *type, struct type *real_type, >>> >>> if (obstack_final_size > statmem_obstack_initial_size) >>> { >>> - /* In effect, a pop of the printed-statics stack. */ >>> - >>> - void *free_to_ptr = >>> - (char *) obstack_next_free (&dont_print_statmem_obstack) - >>> - (obstack_final_size - statmem_obstack_initial_size); >>> - >>> - obstack_free (&dont_print_statmem_obstack, >>> - free_to_ptr); >>> + /* In effect, a pop of the printed-statics stack. */ >>> + size_t shrink_bytes = statmem_obstack_initial_size - obstack_final_size; > > Hmm, size_t is unsigned, maybe it would be better to use ssize_t? > >>> + obstack_blank_fast(&dont_print_statmem_obstack, shrink_bytes); >> >> The indentation should be 1 tab + 6 spaces. >> >>> } >>> >>> if (last_set_recurse != recurse) >> >> The code below that (which seems to be handling a similar situation, but for arrays) uses >> obstack_next_free as well. Is there the same problem there? > > Never mind about this, I saw your other message after reading this one. > > Simon > I've stepped over the obstack_free call and noticed something strange, it changes the value of obstack::object_base... (top-gdb) p dont_print_statmem_obstack $6 = {chunk_size = 256, chunk = 0x3b8b5a0, object_base = 0x3b8b5b0 "2\020`", next_free = 0x3b8sb5c0 "0\270\270\003", chunk_limit = 0x3b8b6a0 "p\265\270\003", temp = {i = 0, p = 0x0}, alignment_mask = 15, chunkfun = {plain = 0x798604 , extra = 0x798604 }, freefun = {plain = 0x798732 , extra = 0x798732 }, extra_arg = 0x0, use_extra_arg = 0, maybe_empty_object = 0, alloc_failed = 0} (top-gdb) p free_to_ptr $7 = (void *) 0x3b8b5b8 (top-gdb) n 383 if (last_set_recurse != recurse) (top-gdb) p dont_print_statmem_obstack $8 = {chunk_size = 256, chunk = 0x3b8b5a0, object_base = 0x3b8b5b8 "1\020`", next_free = 0x3b8b5b8 "1\020`", chunk_limit = 0x3b8b6a0 "p\265\270\003", temp = {i = 0, p = 0x0}, alignment_mask = 15, chunkfun = {plain = 0x798604 , extra = 0x798604 }, freefun = {plain = 0x798732 , extra = 0x798732 }, extra_arg = 0x0, use_extra_arg = 0, maybe_empty_object = 0, alloc_failed = 0} As you can see, object_base goes from 0x3b8b5b0 to 0x3b8b5b8. And indeed, looking at obstack_free, I see: if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \ __o->next_free = __o->object_base = (char *) __obj; \ So when you free, it resets object_base to that point... why does it do that? It doesn't make sense to me. At least, that seems to explain why the obstack is empty after having called obstack_free, even though we didn't ask it to free the whole obstack. Simon