From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id CX1BL+sps2kcgiYAWB0awg (envelope-from ) for ; Thu, 12 Mar 2026 17:02:35 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=windriver.com header.i=@windriver.com header.a=rsa-sha256 header.s=PPS06212021 header.b=q7KYQv0t; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B9CA71E0DD; Thu, 12 Mar 2026 17:02:35 -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 8C4511E089 for ; Thu, 12 Mar 2026 17:02:34 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 3D7164B1A2F8 for ; Thu, 12 Mar 2026 21:02:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3D7164B1A2F8 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=windriver.com header.i=@windriver.com header.a=rsa-sha256 header.s=PPS06212021 header.b=q7KYQv0t Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by sourceware.org (Postfix) with ESMTPS id 5C6284BC8969; Thu, 12 Mar 2026 21:01:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5C6284BC8969 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=windriver.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5C6284BC8969 Authentication-Results: server2.sourceware.org; arc=fail smtp.remote-ip=205.220.178.238 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773349306; cv=fail; b=gpc/8ODZrEHIX1dxZOEaltscEbve2SL65EUv/qcvVOv+DIqKs/ljTX39sKaGCchSqBacEOO76Hzk0mI9su5lvs+lxlJ/KVch2apW450IFo1mwDP7re0KIz/Y++zZMj1aENvS9itoxm97T7nEHTFtpemXK1bV79F+D1Z/MUmhj4A= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1773349306; c=relaxed/simple; bh=xjd4MMazUHlz9MQrU6WT5ShlYCrICl9x9u9PG6gToic=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=QOf/7vJk9LEe3cmqhs91QM7Wsdl36PtbWSAqZkCX+HKkoabWsyFgGUDvdOoNHNyMCLIle3v+c5Xny2X4yRLYpXO8D3LP1z1FUJEGytKaPhkGvYSefoYWvEIu6Cf48A1JISQUCTgOvKJgfkqEY0xxhP87Q6hL+5dCvd5g5tr2He4= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5C6284BC8969 Received: from pps.filterd (m0250812.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62C6esEO3162649; Thu, 12 Mar 2026 21:01:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :message-id:mime-version:subject:to; s=PPS06212021; bh=nsSLSvl62 gt4aQnCM/bqp6bd5FfUH/1vAcKj+d4hNaw=; b=q7KYQv0t5w7QhSv60cO5ScWhT Ab6behVpX1/ducq9bld6IQ7lXCdmUamgick9/Fdoxp8P3slkeDaHp3ixzxRqqbzR QGvvTwjpLXjzKtBIn7o0VCS0c4+PbbVJc6ToMEdoQSJ+acEaai4x+OxE0Dl4lEn4 008mOiOuJNop0r98qi+z6by90AjOSLo0h8H+xPVvDkt80IcYdMG4Fdd7FfoZoRBE FyamVyDCywLZ1srDoVIOFyVGMk3RGxuGDvQjdjVBIndDT7FOgxPL9gGQiyTsYEv1 NHDBdaLfK5bBI+nlSvnjG1NpXshbU0+7V+s7JO1nU/IkDGoreOhwpbZH8KbWg== Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010021.outbound.protection.outlook.com [52.101.46.21]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4cuh78haxb-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Mar 2026 21:01:27 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QNs+ljEIbfATqoQyJM4XSv+M/2DStH79iPAxxEYYxRRNqYG2b6ujkdqYkoXtCiS0qBOfJZM02LF+kPUwsVYT+vVUORvKUGr1BaJFhaK4Xk6KZ4urM0l4YRjqzDFitICcsU3PjJ6mwjemG4ZZAK5caIw80y0BKpQbswTsCGe0B0NdxUbWFsqzWnZwPEuqY0ZuTJPyIdXx9ZdZQg49szoDkbhZGpC+yVm185uxxBLuWDLKeGHhn2jmUUvjyKlNUCJCmqjAmF9SJLM3RQ41ACsmjPCCyyR1liLD2bAQsx7y5TptF7tnDqkb/JOyF3JLqydS3oLdhr+RhOUNz+10PmBq+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nsSLSvl62gt4aQnCM/bqp6bd5FfUH/1vAcKj+d4hNaw=; b=UP+d8H2x1UHP8fASYUxwh5th8ecRcuKxZQvbokVBA0njTMm7koJ9x2y+5k5nbASuPprCOFULkgz8p9gNj0PVphcYPDveS9R1Zfw/NIQCvjKBTkfeVzIFZoH7STu2o5fJPYvMp1WVEnMln0anW4uDxp8Qm4CR1z3F39x9hpJQMvmSDgbQ7pJ3rPMyuERfzx/XdvBibMUnW0a3uYMPpdigWm/YAJPh8mj9SdlIaxM0fRMLmoyo3SpIO4ta2MMzmN/YGcKUObTpyhhzyaGWnDYRqpsSR0sg+V2upEsboIJFBDYrtGyrdEWNY8UBm6Dkg0H5HSaCHWfyf8rwSsVH3H57JQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS0PR11MB7901.namprd11.prod.outlook.com (2603:10b6:8:f4::20) by CYYPR11MB8385.namprd11.prod.outlook.com (2603:10b6:930:c1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Thu, 12 Mar 2026 21:01:24 +0000 Received: from DS0PR11MB7901.namprd11.prod.outlook.com ([fe80::4293:7c4b:a0b5:eb5f]) by DS0PR11MB7901.namprd11.prod.outlook.com ([fe80::4293:7c4b:a0b5:eb5f%3]) with mapi id 15.20.9723.000; Thu, 12 Mar 2026 21:01:24 +0000 From: sunilkumar.dora@windriver.com To: gdb-patches@sourceware.org Cc: kevinb@redhat.com, macro@orcam.me.uk, Randy.MacLeod@windriver.com, Sundeep.Kokkonda@windriver.com, schwab@linux-m68k.org, tromey@sourceware.org, simark@simark.ca, sunilkumar.dora@windriver.com Subject: [PATCH V3] PR gdb/33747: gdb/ser-unix: modernize Linux custom baud rate support Date: Thu, 12 Mar 2026 14:01:06 -0700 Message-ID: <20260312210106.880833-1-sunilkumar.dora@windriver.com> X-Mailer: git-send-email 2.49.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SJ0PR13CA0204.namprd13.prod.outlook.com (2603:10b6:a03:2c3::29) To DS0PR11MB7901.namprd11.prod.outlook.com (2603:10b6:8:f4::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB7901:EE_|CYYPR11MB8385:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b2b35df-2db0-47ca-f03c-08de807a8527 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|52116014|366016|56012099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: N9OYrElzwD0/l/O/3pSVxV/0ToW2vW9JaoOR5VJQg55kZmHYMZ+5wOO8hyyZJ6ilBJSReZqVPWnx4ZBLOsz11L7ji35bCYbeDLTJ9bTB5hfTkH/2Sqvfx96MGLAx6H1suekvRgIDuQnbeUwu9Ahgr0O5V8ID3HX2OYzUug9Bvv+X/iaZ4/JQhPaRkHjJir6k9TmxIlhViJejAK1Qn/fJOo7elHwF6gCRkmQKHfP10Y7rDlWFGzI54b4UmNIJHIiXRRcQuh5u4/XwFsuEEYgCBVQdrapXFO0sqQJ58aJx8tox7P19i9zSfsDpRFnTmozJWp289UXOM13X+stq0mbzJQU2pfG/PMQsrIFYbUGIyjfPD2TNnPyw2kkzUD+IrYbXUFARCo9wmxL6dUpgGZDjFlO2EAs2DQ9In046MmmWE0vuyHJ1weaWKz8pA92urDWLW5paMSYDyYMUKx3+qvTuj1p1bGm/oPv9v2dYip/OD1S/6l4F89sSLSQ8zGeQevkzBB6BBd0IuBMqhpovNrV9ZDJybjbUzR1eub44ga6rfajLZUpvPsq043VkWOb1klMKqBDOBuRQ612Nj1qfoAz0pRFlyf5zjRLvcu8CA2OLnQk69TRcg3tTvpcTIT32nPeRCaKrDBxBP/mlk7s9fjjWxzn/MOBFGdfcIJwTownVjWjRjtybem71E+5tsu5Z8VnAgpWCZQmc9abF8OGt+IUqfC9zoVP1k7ugrWeOnIlKxyqtVBXlKD4BD0lTltTr/qA0dx4E+KlNidz6xJcA9ckBhn5I2gDvKX8rDAMLrom02MU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR11MB7901.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(52116014)(366016)(56012099003)(18002099003)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cShHIicqU3Q0B9qx07S3FMKYEAoSBe3LTNS1Ls6DuaZXI+pbS4B1AneYxb2F?= =?us-ascii?Q?KGTnghZd0tuHp1yYYr83nD0iFDaprbjSw+DXlWrKdiQMwoORprhQzgV8wQqK?= =?us-ascii?Q?nYikucVwCwwr37JnLViY1h3ajbNMXK5FQfSSXc3tnJhGRiv7szbiGP2nME+9?= =?us-ascii?Q?SggVC7VGGKPREXGY6ng5doIKN/3TUC4VWPeg3U4C8zc4eBPu0Wcgq697MATW?= =?us-ascii?Q?BPgHjh2v7zUJkWQ2+exJyoW8mCigOX75n+kjsOtqmGnLGeGiRSxScLTatVQU?= =?us-ascii?Q?Q0j3ckLTtWBCBw2lrimdRZAbgcFByj6zfRK86W8ZqsuyKEHHRIoVhSysXG5z?= =?us-ascii?Q?WXZuyhYGD7tUxIgie5bRAhW0bpoWP23/c/xOsphJkUgjGOzhUQVZdx1HvRmC?= =?us-ascii?Q?9TrLMBB+Yr5wILcMUNyQjZ/Cv3M/r0ELDAzM0D7T3h/EQOf56bFOpev1Gz4k?= =?us-ascii?Q?ktIjtIw5+tGoAeLCbmDevMtwTFgvOTu6kOIj76p7bGs68Mj3LVfQKuApzTdG?= =?us-ascii?Q?mxnwA7Rrgv4e5yUXrLGpbH73wrT89H0Wn9RmW2n+7dxsQRtSY1wmQcXzQD07?= =?us-ascii?Q?hZ0pAdFQ1bTLDkH0KJw2ERjn4ILn96xmRtyHlh42aUEjSMb9Wt7XXCJ8B2iN?= =?us-ascii?Q?DvFvGOm/IiLLzjpGdsf+1pz8uKubYHF0FhBesa1CYE35SlnODEzePHxTDXuZ?= =?us-ascii?Q?OYujaQbsTXcmtllmgardFYgraPjwRL4dd1wPbPKWqiCPVtGBU88p69bIn8CY?= =?us-ascii?Q?Jh04eGpRMmVEsTMiTr8M/bnNbA5Y5gAx0DGyDH2VXNgUmToFpKtXYgd+qkRQ?= =?us-ascii?Q?G6D3mXNxxUpYTx65PQ1VzTsVG7SUrwGiBzj/W8XawhgKgLbMLVpBkNnnkEUk?= =?us-ascii?Q?hQmmce5FUHhjx5594ZjTH35LGB7P64R8M4J0L7hsjaKmgxUqECwR6Zh37m3d?= =?us-ascii?Q?yAS8pti9qyd6ecd2LB2zbim67Bt5x4hgxIzhqIyDKUXfGmWP9Xqtzt1bsKIf?= =?us-ascii?Q?soKAV2Vk9suSwzDTvUvBqZHcaap22lZm7E1bzFoACAhZg+Rs2rYNY0yFQuO3?= =?us-ascii?Q?eFMSq31maw7hpsKuuwvMn+6e0sHyjIrLWn3CpZr/Jm8vfUtrUHyv52rExVEz?= =?us-ascii?Q?Z5VH+pL5Xb6oo5I+/hTLmxDczIVnQmeoAg/E2zyUFrw1N7c+FR8pFbfhcTnJ?= =?us-ascii?Q?ZpKzhY/DxGmMVf4i2rhGvnlEu8yLBsJDou+8nywcDPZ972XwoAxeQh4O5SM+?= =?us-ascii?Q?pRsVpdkMU6jpJ5jFW8EwfMzhgwY7aAfJjsB8p1sE7LKzaECJRBNdrIl1AFR9?= =?us-ascii?Q?uHQELm3zvkTbXAss9ZI/TcgQcmS4KkB633aqMr74jrvf1ahdOpSwduY8plWO?= =?us-ascii?Q?flds/pRxTmF9+/SiUJpdjELWlQ+uewuJxiP9OKyO2w9lXiL+QfVW5AbF00Wg?= =?us-ascii?Q?evQiRXffUfbXnCywr+D0DWBZNQpktj166GM+TpqnUuCXJM6egOnauZMcO1Mb?= =?us-ascii?Q?DTcmBWMMWjADWT9WYzOAA3ZHcnwyr9Fdfk4XDsR4tblL0UolUzUzz2F7Khmi?= =?us-ascii?Q?5c2ZPevyjfDfEw+LjvWuzqTPnWP7C7OweyvOatcAnW3pkTjSo6h+OwOk7Tsr?= =?us-ascii?Q?bOVjKKVhzNlQ7p49yWOSiug46tD6EELErhknAB0RHZ72pg1gm20I7AxqTNI7?= =?us-ascii?Q?JcsSYHPBp5+axCrh0pCq6isKslpYAN56G0mxIRu14Q9sxRfOjCMY3D468A/3?= =?us-ascii?Q?jVTzvmEv95FGMmktjRHXVqMKIrCjNLw=3D?= X-Exchange-RoutingPolicyChecked: H3qy+k4cPrVPnCO2vuM6kvL4tx+T/YXQaX79MGGj9bZ9PeZ4nk2WvA4YH/dhjJOvwCKRKgooCHXIOCOeAZq3iRPXxMXTtABMP5E25o7Zu0Lsg3KLr7ImLQcftrJcNzVqWrzRqeTa61YrQfBtWCvtQy4guQvjreGiqreGez5eE1mB8f6TeRjk0fItw9iDWmQp78kdTm7pmUWCAQ+xAPQClMkZ3h0enyyq7dOGx58iDzM2Za+rQ9diBdWzqKbOW8HsUUjQjyvOhJnp6zA9xq1/u5TFwzanyEfUeV/OGpu9FzSd7ZsEHyP3HIhK9ZzAVT0GQm5U3uL7N38luRoHwCnJdQ== X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b2b35df-2db0-47ca-f03c-08de807a8527 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB7901.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 21:01:24.3049 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SXR7gbdT/bN8nIshcs5ufGp7yqqmQRt2xHgI8mdLXhOBl33WIzTVYszcskUR/R80covui1gRdsk8zV5JQzddivCh2nbBzF6L7DChviH05+E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR11MB8385 X-Authority-Analysis: v=2.4 cv=ALvEU0hV c=1 sm=1 tr=0 ts=69b329a7 cx=c_pps a=ReLZl+GdXdFt35wSL8r9Ug==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=fTW__CHxibyLmBMfj2wP:22 a=t7CeM3EgAAAA:8 a=20KFwNOVAAAA:8 a=BcPKCTjPAAAA:8 a=S90YTXOMtgKqrAXvtLMA:9 a=FdTzh2GWekK77mhwV6Dw:22 a=MNXww67FyIVnWKX2fotq:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEyMDE2OSBTYWx0ZWRfX7Ym8IGmQl2ML AIWDuVZXEWepap5BDEnFqnJ2xDqJeT4xV6ZagNWYz38C0blf3YBrN5H5UBYDO3fa0yHDQyKGh5e lcQJOFiG2dP8Ok3tM4eqZpBkV19MUi/hmCZIKSONWnSPfAeA1qso8H5NDcmEp097xOg1tGAJK95 Y1sqMi+f7mzUgjiw8dp5psF3WTRnCVzMoW9TiJsK+y832O5uIUyupjTe6dRNIu2wTGBUpo5NCKo m52OSIqW+fZinkWBNTsMsmZHbdiVKx1mY+YbnErIHaS/1+c95JuiQV5ONKnAX4jV58lCO/rwCH/ 9/CH//wJcAhB2NtgiKn7h6TY7P/zCgbMgH20+y6vJ3dQvoNm5eL08qixRy0/jWK+T6mK/6x8vaF 7nJe25W7eNx9+w1XF6rbz5GHSvma/FCxgd3VccTMA/ps0Nm4EU1f9hJYLOL42iQ2xFpUSSxnjtw mFRI+LUbPUqCxCZco7g== X-Proofpoint-ORIG-GUID: LSsdwI-07uQ8lNirMp0U5jiNjh6VG4Sc X-Proofpoint-GUID: LSsdwI-07uQ8lNirMp0U5jiNjh6VG4Sc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-12_02,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 clxscore=1015 adultscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603120169 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 From: Sunil Dora The Linux custom baud rate implementation previously accessed the struct termios members c_ispeed and c_ospeed directly. These fields exist in glibc but are not exposed by musl, causing builds to fail on musl-based systems. Update set_custom_baudrate_linux to use a capability-based approach, with three distinct code paths: 1) If POSIX cfsetispeed/cfsetospeed accept arbitrary baud rates (HAVE_CFSETSPEED_ARBITRARY), use them to set input and output speeds. 2) Else if Linux termios2 interface is available (TCGETS2/BOTHER), use it to support arbitrary baud rates. 3) Else if legacy struct termios supports c_ispeed/c_ospeed, use the TCGETS/TCSETS fallback (primarily for glibc on older architectures). 4) Otherwise, emit an error indicating that custom baud rates are unsupported on this platform. This preserves existing behavior on glibc systems while restoring build compatibility with musl and other libc implementations. Suggested-by: Kevin Buettner Suggested-by: Maciej W. Rozycki Signed-off-by: Sunil Dora --- **Changes since V2** - Renamed Autoconf check to HAVE_CFSETSPEED_ARBITRARY - Prefer POSIX cfsetispeed/cfsetospeed when arbitrary baud rates are supported - Fall back to Linux termios2 (TCGETS2/BOTHER) interface if needed - Retain legacy TCGETS fallback for glibc systems with c_ispeed/c_ospeed - Simplified capability/fallback logic - Replaced incorrect perror_with_name() with error() gdb/NEWS | 4 ++++ gdb/config.in | 6 ++++++ gdb/configure | 52 +++++++++++++++++++++++++++++++++++++++++++++ gdb/configure.ac | 22 +++++++++++++++++++ gdb/ser-unix.c | 55 ++++++++++++++++++++++++++++++++++-------------- 5 files changed, 123 insertions(+), 16 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index e46a5108272..0c69da084de 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -36,6 +36,10 @@ subsequent runs of the inferior will use the same arguments as the first run. +* GDB detects whether the host cfsetispeed/cfsetospeed functions accept + arbitrary baud rates. If not, GDB falls back to Linux-specific termios + interfaces to support custom baud rates. + * Support for stabs debug information has been removed. * Support for mdebug debug information has been removed. diff --git a/gdb/config.in b/gdb/config.in index b11fcf18372..b7aacab898a 100644 --- a/gdb/config.in +++ b/gdb/config.in @@ -110,6 +110,9 @@ the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE +/* Define if cfsetispeed/cfsetospeed accept arbitrary baud rates */ +#undef HAVE_CFSETSPEED_ARBITRARY + /* Define to 1 if you have the `clearenv' function. */ #undef HAVE_CLEARENV @@ -517,6 +520,9 @@ /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLOCKS +/* Define to 1 if `c_ospeed' is a member of `struct termios'. */ +#undef HAVE_STRUCT_TERMIOS_C_OSPEED + /* Define to 1 if `td_pcb' is a member of `struct thread'. */ #undef HAVE_STRUCT_THREAD_TD_PCB diff --git a/gdb/configure b/gdb/configure index 12c54521682..ef2ee9f72ec 100755 --- a/gdb/configure +++ b/gdb/configure @@ -27728,6 +27728,58 @@ if test "$ac_res" != no; then : fi +# Check whether cfsetispeed/cfsetospeed accept arbitrary baud rates. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cfsetispeed/cfsetospeed accept arbitrary baud rates" >&5 +$as_echo_n "checking whether cfsetispeed/cfsetospeed accept arbitrary baud rates... " >&6; } +if ${gdb_cv_cfsetspeed_arbitrary+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #if B9600 != 9600 + #error B-constants are not numeric symbols + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_cfsetspeed_arbitrary=yes +else + gdb_cv_cfsetspeed_arbitrary=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cfsetspeed_arbitrary" >&5 +$as_echo "$gdb_cv_cfsetspeed_arbitrary" >&6; } + +if test "$gdb_cv_cfsetspeed_arbitrary" = yes; then + +$as_echo "#define HAVE_CFSETSPEED_ARBITRARY 1" >>confdefs.h + +fi + +# Check for members required by the legacy Linux custom baud rate path. +ac_fn_c_check_member "$LINENO" "struct termios" "c_ospeed" "ac_cv_member_struct_termios_c_ospeed" "#include +" +if test "x$ac_cv_member_struct_termios_c_ospeed" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TERMIOS_C_OSPEED 1 +_ACEOF + + +fi + + # Check whether --with-jit-reader-dir was given. diff --git a/gdb/configure.ac b/gdb/configure.ac index cf8078e1d89..e558cf44703 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -725,6 +725,28 @@ AC_CONFIG_FILES([jit-reader.h:jit-reader.in]) AC_SEARCH_LIBS(dlopen, dl) +# Check whether cfsetispeed/cfsetospeed accept arbitrary baud rates. +AC_CACHE_CHECK([whether cfsetispeed/cfsetospeed accept arbitrary baud rates], + [gdb_cv_cfsetspeed_arbitrary], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ + #if B9600 != 9600 + #error B-constants are not numeric symbols + #endif + ]])], + [gdb_cv_cfsetspeed_arbitrary=yes], + [gdb_cv_cfsetspeed_arbitrary=no]) +]) + +if test "$gdb_cv_cfsetspeed_arbitrary" = yes; then + AC_DEFINE([HAVE_CFSETSPEED_ARBITRARY], [1], + [Define if cfsetispeed/cfsetospeed accept arbitrary baud rates]) +fi + +# Check for members required by the legacy Linux custom baud rate path. +AC_CHECK_MEMBERS([struct termios.c_ospeed], [], [], [[#include ]]) + GDB_AC_WITH_DIR([JIT_READER_DIR], [jit-reader-dir], [directory to load the JIT readers from], [${libdir}/gdb]) diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index c295a9c5ba1..a15f4cc2162 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -510,36 +510,59 @@ set_baudcode_baudrate (struct serial *scb, int baud_code) #if HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(BOTHER) -/* Set a custom baud rate using the termios BOTHER. */ +/* Set a custom baud rate. + + Prefer the POSIX cfsetispeed/cfsetospeed interface when it accepts + arbitrary baud rates. Otherwise fall back to Linux-specific termios2 + (BOTHER) or legacy termios interfaces. */ static void set_custom_baudrate_linux (int fd, int rate) { -#ifdef TCGETS2 - struct termios2 tio; - const unsigned long req_get = TCGETS2; - const unsigned long req_set = TCSETS2; -#else +#if defined(HAVE_CFSETSPEED_ARBITRARY) struct termios tio; - const unsigned long req_get = TCGETS; - const unsigned long req_set = TCSETS; -#endif + if (tcgetattr (fd, &tio) < 0) + perror_with_name (_("Cannot get current baud rate")); + + cfsetispeed (&tio, rate); + cfsetospeed (&tio, rate); + + if (tcsetattr (fd, TCSANOW, &tio) < 0) + perror_with_name (_("Cannot set custom baud rate")); + +#elif defined(TCGETS2) + struct termios2 tio2; + if (ioctl (fd, TCGETS2, &tio2) < 0) + perror_with_name (_("Cannot get current baud rate")); + + tio2.c_cflag &= ~CBAUD; + tio2.c_cflag |= BOTHER; + tio2.c_ospeed = rate; + tio2.c_cflag &= ~(CBAUD << IBSHIFT); + tio2.c_cflag |= BOTHER << IBSHIFT; + tio2.c_ispeed = rate; - if (ioctl (fd, req_get, &tio) < 0) - perror_with_name (_("Can not get current baud rate")); + if (ioctl (fd, TCSETS2, &tio2) < 0) + perror_with_name (_("Cannot set custom baud rate")); + +#elif defined(HAVE_STRUCT_TERMIOS_C_OSPEED) + struct termios tio; + if (ioctl (fd, TCGETS, &tio) < 0) + perror_with_name (_("Cannot get current baud rate")); - /* Clear the current output baud rate and fill a new value. */ tio.c_cflag &= ~CBAUD; tio.c_cflag |= BOTHER; tio.c_ospeed = rate; - - /* Clear the current input baud rate and fill a new value. */ tio.c_cflag &= ~(CBAUD << IBSHIFT); tio.c_cflag |= BOTHER << IBSHIFT; tio.c_ispeed = rate; - if (ioctl (fd, req_set, &tio) < 0) - perror_with_name (_("Can not set custom baud rate")); + if (ioctl (fd, TCSETS, &tio) < 0) + perror_with_name (_("Cannot set custom baud rate")); + +#else + error (_("Custom baud rate not supported on this platform")); +#endif } #elif HAVE_CUSTOM_BAUDRATE_SUPPORT && defined(IOSSIOSPEED) -- 2.49.0