From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aQUMImDRGGpQmyUAWB0awg (envelope-from ) for ; Thu, 28 May 2026 19:36:00 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=fpG1C5A/; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=fL3BSDBI; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 782091E024; Thu, 28 May 2026 19:36:00 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 296411E024 for ; Thu, 28 May 2026 19:35:59 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9C0944BA23F5 for ; Thu, 28 May 2026 23:35:58 +0000 (GMT) Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by sourceware.org (Postfix) with ESMTPS id BD33F4BA2E1B for ; Thu, 28 May 2026 23:35:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BD33F4BA2E1B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=oss.qualcomm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oss.qualcomm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BD33F4BA2E1B Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=205.220.168.131 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1780011345; cv=pass; b=M8o7o9XKspNJ8NXxeaCPBbMclq20P01OiSQ/n/M7nsQ4NF8MiSpXEOqk4nPGew+++aRV8+BIE+OiYPvd5G8xCti/XEb+pgiFtZ8Ohavzqa3+esWIPWHYQe2OLJL12NVl3vLsLSMFXtvfOrJaIi1DnKOjb7BV9ebYPteya+YXJts= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1780011345; c=relaxed/simple; bh=Z7eTasFmugEV9HW4l/5aA6co9bsWRmcYB6+Kj/F9/qI=; h=DKIM-Signature:DKIM-Signature:MIME-Version:From:Date:Message-ID: Subject:To; b=EISYHOFv3J0ht4BTQ301ySuxQ/I9dFZ/eIVaSZKao7QV34o6yxtbIEWvZ24wrfYJqznGxDgHQEZiidI81LTORn/sPeRuWC4hCO9QgRCY/DAqTVNjkykjs/dG8piC8FE/Y8LB6OCE1sn20HXcIkzmrH72ZnQ6b9M+prjhithLgio= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=fpG1C5A/; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=fL3BSDBI DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BD33F4BA2E1B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=fpG1C5A/; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=fL3BSDBI Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64SKkqDH3253257 for ; Thu, 28 May 2026 23:35:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= yZAuI2wRh16KMSrOYV3/Wd3eVkh3Igmg+DFS39V4P9k=; b=fpG1C5A/jJ4bD2UG 5hxFKfi8LKmlEI5vQvEfvjV/ph9yBke0e5MCPOqja0s7QsY0MV/nJWqNsWMQZBMm BUKiJcA5KSq2ziNXR6P5yWwlBsXNW0mXvbyKgyDGdQywdARCob49Sjfb9j9PIBFa 1ZEzal14EwHqF4aktBKm+H8keLb1bMHQmcye2EapjzMgUkJk7Chg6kzYOyCHxpee FxlG8BP6tlNpb8CZU6CRHWs4k71oXMONQnTV5DeDUw8KjKCHt1h3O+a6nxoDCfo4 dsIBIF/y3CdLXe6BUEYc+zVf68FOUQbvO+YrSggoouF1ihCV9EPqfkGRqCKh8IFj 2VMRqw== Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eespn1nys-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 28 May 2026 23:35:43 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-304ea1eea05so615567eec.0 for ; Thu, 28 May 2026 16:35:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780011343; cv=none; d=google.com; s=arc-20240605; b=MCgWs4blnxv/xpjKw5DXuSfYuqpbB3TPnqBVzMStpflH7Hmwk9gWC2YzBTCVbVPBAB Jnl8DA80PC7XI5VaRHqvhcnnLT1MJIExPCXElrMA7KAKrV3b0NOaQ1Xww8EHxGNlJnm9 AERPNRjzOkMmfBRmV4vH0owTDe4sG+bafyLDlq+D21AVC1dPFMsgv9JAPewcGztwblmm eWtx5SfVx9X7HOGL54HKfeDwfFEOTJe6/UwNWF0NGAD1/t1IEjl0qJJMVjUFNoFA5r5d iwV1rO/dPNItEFPJKBSOIr3VUqAXIS4ZrucNpt4My1BjPNqDMp4y3RueHBpto9hBjS0t pFaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=yZAuI2wRh16KMSrOYV3/Wd3eVkh3Igmg+DFS39V4P9k=; fh=ZxVcLieXnjJ/m0zjOiYhXtXkw6OUJpn+FuHhE+6SiKQ=; b=IZ5eErVLLsZrqE0mCILt/+LIhjGYbQ4YiYyZUBMjgCwyyyop2vwCfvliXDQf9bbP9C WomhuKXeYAtD4EAfQ/Gjrk58tf2C26axeii0nngTUY+WbZrRYMLa7UFa1WRKrAoZC3W1 YlfDLcrCM+5RUHZ5nnLj+3lvyQbkCS9xD8M7Fg/NwCwR4QC10siNRIe25HIz2PuJqx8Z jPy3M/TVxzdk2R6quGP39eWTzVJ6S9C2bJVF2A74EHv77GOKY8L4eJtswFRSaT1Y9Min aIeeKaAgAB3gdV/RlrtcZ1q0Cci25hj6gBPYGfCzWmcqBAZ/KTEOxc9Aujk6TkrZXMjQ ATcw==; darn=sourceware.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780011343; x=1780616143; darn=sourceware.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=yZAuI2wRh16KMSrOYV3/Wd3eVkh3Igmg+DFS39V4P9k=; b=fL3BSDBI7FJqrl1wfEBfMy8pIk4JUXnxNZoD17HFKHFDZKsY2llcdmhqjq9cdYNxwh jXeCC5lTVE5AXEP1QRPzn4MwIu/rBZYM8/FosXeREWyIe00qfzHBsuwhNkt7O87WDYv0 K25heBwgwu8sSvOCpBLTdfzUms1UgYI9vLujcoaTBxwRpyxrZsDCWVwr5oTszskdyDtj Prz1ExwxsupqYRqmJ1+rmXCMrcBSLJSn8k8k8wjBaldIvJt4jsdWffqTqZmZFcJUA8eO LGqEQ24zwAddBcs01I1fs/H8ApYGRtpAexvUYvziq3kTM98xF+0R9xnRK1YsytSmuZJw JL2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780011343; x=1780616143; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yZAuI2wRh16KMSrOYV3/Wd3eVkh3Igmg+DFS39V4P9k=; b=tUsHDg0LzDMAHsENQWOVgJ6+VCSzWpuCr5zcxinaVxR+2EE1hbBXHQ9XnxSQq6UTtk JvqdKW3xPnX6cEV1CWy2bV04v2SPdFI/2sDJPFgR1N+FcZJQVKbD8unilZnR/dVt0J95 SwipbUmX9tJU5bvSCFSzye5UljWB1ivnP1S9nRWzuZCeSc98Bo2Nb9zqyuVsB6nWp01y 9+NxUa3qans6J0p9SoutvXO6uwOVM4pX8/dXjtSXqkWcrzo/xcgokzABn+rWXs1IA+tV QrxyXEaOv8GE2ScC7ZPY6c9lY0dxEYCK0VtOJvUvDzxUKR0sCWJMhAo9enexpvR241eO /8WA== X-Forwarded-Encrypted: i=1; AFNElJ+NZXApBd8NuCBrfwL7sRzWcp20dIoyYBYjrB4Xn4ywSxKp05tm9T6S/4t2043zmM1Y4gD/t6TbOGZ/XA==@sourceware.org X-Gm-Message-State: AOJu0YzkiQ0HAZ7tZgtp3XpV+8Az1DALYwdLqB6bfEuUVTrc6FC7zfuw z4lj810+0KHbj8EkOitzaIpNaXyndpvRTj1t1/2UtkepfFhDjl33lOY8VbxF/Rj+4LsOli0NKSc KktDaBy5BX0S3YupYIJwEVQwUvYSiLzpizOEmbRCijmrxmIDBa+aNWBF3kwPDaggUsHW9LK9ygT MZXRS7sHvF0Fo7hF2KHFU6Y3jXRjIYccmn41VXuKk= X-Gm-Gg: Acq92OGFdtSeSYyduOTxeW5lzhf65mgfXM8E52Q84PYUzR2kyCW5w2HDMiHwvqxMOIs QkVH0W79r+EK/KjOGL/bVHV52OgGG9QkhQ2zyYgNQy0cGD/Wkl2XzfDJer+Ary2eeEM59hHxlV4 oCXtPcRTfz3PMK0Cp1MI5OR+BPI9Y1gChLvSth44EfsXKNMfuxc60dGt+KxQ6WNAfb8sJRfdT4C ja6E0KPiQEpE5c= X-Received: by 2002:a05:7300:72c4:b0:304:d75b:f5f4 with SMTP id 5a478bee46e88-304eb1f9d6emr350939eec.16.1780011342743; Thu, 28 May 2026 16:35:42 -0700 (PDT) X-Received: by 2002:a05:7300:72c4:b0:304:d75b:f5f4 with SMTP id 5a478bee46e88-304eb1f9d6emr350912eec.16.1780011342189; Thu, 28 May 2026 16:35:42 -0700 (PDT) MIME-Version: 1.0 References: <20260514181502.2841511-2-kevinb@redhat.com> In-Reply-To: <20260514181502.2841511-2-kevinb@redhat.com> From: Andrew Pinski Date: Thu, 28 May 2026 16:35:31 -0700 X-Gm-Features: AVHnY4KQFvF2THj1XKrpmF7HcffBd75qF8z7DCpJmfqcnfjYwlz59QQZKnPly3A Message-ID: Subject: Re: [PATCH] contrib: Make dg-extract-results.py tolerant of unparseable files To: Kevin Buettner Cc: gcc-patches@gcc.gnu.org, gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: xrqML5eeJIyzg5uT2oECtqveXHsDLBOG X-Proofpoint-ORIG-GUID: xrqML5eeJIyzg5uT2oECtqveXHsDLBOG X-Authority-Analysis: v=2.4 cv=auOCzyZV c=1 sm=1 tr=0 ts=6a18d14f cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=CCpqsmhAAAAA:8 a=20KFwNOVAAAA:8 a=iUuUpLnCuquhMQmb-SUA:9 a=QEXdDO2ut3YA:10 a=scEy_gLbYbu1JhEsrz4S:22 a=ul9cdbp4aOFLsgKbc677:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI4MDIzNyBTYWx0ZWRfXxkErx2z4B+Y7 gpL7M50HOFiPBDA1ulKC4WMElNxSR8G4TCmOFKSpX9lyGKcOOOowu/HhUib3LA8x8T7vSUlqdJr 87Yk7CSfMheufIN88ZGnkpWNwGshBSAuJkKpqzZcMJB9m4q96HS3u8nJfanJ5xUt6esL81R19Ag IUCPju7np9A4tVyDjbZhG0W8pZjt75sdGZwDFqug3O9tU444ocX5+twXvzScG5AUG25L87+gIBe FGBj0cpikSuyEUKEEcl8wXuYIOmuZpaDPyigD2oSCxOHmtaO22dUzrykqxNrLEK/VHfKdtolDII svMAN5WzbvCH/GYphPvfVCs7moQ36Sb0+1o+O2ZThqp7wEZW57SeKNZbZx9S9qCm7/UzCgxOnLe zkx5XOwZLja9NFCPyW3iSJdXbeU3FfzPnTGFckbj8OflF4uXv7Lwi/TIhecTaFcGI4YdeAc+Y4S 8Z6znKfTJGk4bszJDzw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-28_06,2026-05-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 impostorscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2605280237 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org On Thu, May 14, 2026 at 11:18=E2=80=AFAM Kevin Buettner = wrote: > > This commit is for the benefit of GDB, but as the binutils-gdb > repository shares the contrib/ directory with GCC, this commit > must first be applied to GCC and then copied back to binutils-gdb. > > When running GDB tests in parallel (make check -j$(nproc)), the > consolidated gdb.sum and gdb.log files are produced by > contrib/dg-extract-results.py, which merges per-test output files. > > If any single per-test output file is malformed (e.g., due to a > DejaGnu EILSEQ crash, which is how I encountered this problem), the > script aborts via self.fatal(). Because this script is invoked via a > Makefile command using shell redirection, this causes the top-level > output files to be left as empty, zero-byte files, discarding valid > results from all other tests. > > Fix by making the script tolerant of unparseable input files. Wrap > each file's parsing in a try/except block. When a file cannot be > parsed, emit a warning to stderr and continue processing remaining > files. This ensures that crashing tests do not destroy the > consolidated output for the entire parallel build. > > Tested on Fedora 44 using the GCC testsuite (make check-gcc > -j$(nproc)). The consolidated results are produced correctly with > no regressions. > > This commit fixes this GDB bug: > > https://sourceware.org/bugzilla/show_bug.cgi?id=3D34147 > > contrib/ChangeLog: > > * dg-extract-results.py: Show warnings instead of erroring out > when encountering an unparseable file. Ok. > --- > contrib/dg-extract-results.py | 44 +++++++++++++++++++++++++---------- > 1 file changed, 32 insertions(+), 12 deletions(-) > > diff --git a/contrib/dg-extract-results.py b/contrib/dg-extract-results.p= y > index c7060753500..98b0f4989c9 100644 > --- a/contrib/dg-extract-results.py > +++ b/contrib/dg-extract-results.py > @@ -34,6 +34,16 @@ if sys.version_info >=3D (3, 0): > sys.stdout =3D io.TextIOWrapper (sys.stdout.buffer, > errors =3D 'surrogateescape') > > +# Exception raised to skip a file that cannot be parsed. Used when > +# a summary or log file is malformed (e.g. due to a DejaGnu EILSEQ > +# crash). We will warn about the file and continue processing the > +# rest. > +class ParseError (Exception): > + def __init__ (self, filename, message): > + Exception.__init__ (self, filename + ': ' + message) > + self.filename =3D filename > + self.message =3D message > + > class Named: > def __init__ (self, name): > self.name =3D name > @@ -205,7 +215,7 @@ class Prog: > try: > return int (value) > except ValueError: > - self.fatal (filename, 'expected an integer, got: ' + value) > + raise ParseError (filename, 'expected an integer, got: ' + v= alue) > > # Return a list that represents no test results. > def zero_counts (self): > @@ -229,7 +239,7 @@ class Prog: > while True: > line =3D file.readline() > if line =3D=3D '': > - self.fatal (filename, 'could not parse variation list') > + raise ParseError (filename, 'could not parse variation l= ist') > if line =3D=3D '\n': > break > self.known_variations.add (line.strip()) > @@ -264,7 +274,7 @@ class Prog: > while True: > line =3D file.readline() > if line =3D=3D '': > - self.fatal (filename, 'no recognised summary line') > + raise ParseError (filename, 'no recognised summary line'= ) > if line =3D=3D end: > break > > @@ -292,7 +302,7 @@ class Prog: > match =3D self.result_re.match (line) > if match and (harness or not line.startswith ('WARNING:')): > if not harness: > - self.fatal (filename, 'saw test result before harnes= s name') > + raise ParseError (filename, 'saw test result before = harness name') > name =3D match.group (2) > # Ugly hack to get the right order for gfortran. > if name.startswith ('gfortran.dg/g77/'): > @@ -354,7 +364,7 @@ class Prog: > found =3D True > break > if not found: > - self.fatal (filename, 'unknown test result: ' + line[:-1= ]) > + raise ParseError (filename, 'unknown test result: ' + li= ne[:-1]) > > # Parse an acats run, which uses a different format from dejagnu. > # We have just skipped over '=3D=3D=3D acats configuration =3D=3D=3D= '. > @@ -367,7 +377,7 @@ class Prog: > while True: > line =3D file.readline() > if line =3D=3D '': > - self.fatal (filename, 'could not parse acats preamble') > + raise ParseError (filename, 'could not parse acats pream= ble') > if line =3D=3D '\t\t=3D=3D=3D acats tests =3D=3D=3D\n': > break > if record: > @@ -423,9 +433,9 @@ class Prog: > if line.startswith ('Running target '): > name =3D line[len ('Running target '):-1] > if not tool: > - self.fatal (filename, 'could not parse tool name') > + raise ParseError (filename, 'could not parse tool na= me') > if name not in self.known_variations: > - self.fatal (filename, 'unknown target: ' + name) > + raise ParseError (filename, 'unknown target: ' + nam= e) > self.parse_run (filename, file, tool, > tool.get_variation (name), > num_variations) > @@ -474,7 +484,7 @@ class Prog: > # individual runs) and parse the version output. > if tool and line =3D=3D '\t\t=3D=3D=3D ' + tool.name + ' Sum= mary =3D=3D=3D\n': > if file.readline() !=3D '\n': > - self.fatal (filename, 'expected blank line after sum= mary') > + raise ParseError (filename, 'expected blank line aft= er summary') > self.parse_final_summary (filename, file) > continue > > @@ -490,7 +500,7 @@ class Prog: > # Sanity check to make sure that important text doesn't get > # dropped accidentally. > if strict and line.strip() !=3D '': > - self.fatal (filename, 'unrecognised line: ' + line[:-1]) > + raise ParseError (filename, 'unrecognised line: ' + line= [:-1]) > > # Output a segment of text. > def output_segment (self, segment): > @@ -569,8 +579,18 @@ class Prog: > try: > # Parse the input files. > for filename in self.files: > - with safe_open (filename) as file: > - self.parse_file (filename, file) > + try: > + with safe_open (filename) as file: > + self.parse_file (filename, file) > + except ParseError as e: > + # Partial state from this file is intentionally reta= ined. > + # This preserves any valid results and diagnostic ER= ROR > + # lines that were parsed before the error, which is > + # important for diagnosing problems like DejaGnu cra= shes. > + # The unprocessed remainder of the file is lost. > + sys.stderr.write ('warning: skipping ' + e.filename = + ': ' > + + e.message > + + '; results may be incomplete\n') > > # Decide what to output. > if len (self.variations) =3D=3D 0: > -- > 2.54.0 >