From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam08on2082.outbound.protection.outlook.com [40.107.100.82]) by sourceware.org (Postfix) with ESMTPS id 6FF963858D1E for ; Fri, 25 Feb 2022 19:32:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6FF963858D1E ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RRIFUGm5NCvfjKE7qlWpg0xuTVvo+0C36LtaEjYF6rk7YhzTp2OhkBoHNMXtJgighx3tVRnjYNF3Dy/VxOnN/TNUEnvgtR/hxF5D5cTuxSmPY/sTkgSzeHRRaraZm3CP9UOn1rqrOPd+jt/5gWWDklgCKvSCeE/QBs9VALjIr1T7Ss48i3tcQBU9bXa3jBMYWuoHd87A4bmiBiTFrwaEb/0Ck1HHRO0BfjDKog5SgZhlWYpz8h3sWDJSVlopC9zXG4lcxfUxzek6EuNuhnQKfCZDhYkV3VGiWg5u/mhuX7yZpfR79VEuuinu60LeWYmQmyQQhW1J2j14+Ju9JqmSDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=b5dYh+9td5794U4gbFPv5PE3F1v9sO+oW6kHvXMxA7M=; b=S/08VTYy/zH/27WnVFjl+YK6RUe7h81OcgpdPNy+k9/K2g9Z8Llw95t/EKuDT3sSbRwCDMSGDDzV79bWy6eCRjAdtUwtPPUM+zJCOmPDLKDD1khTLlBmle0KQcQ+zZwIo84FtiQmGW0b/2mZgtXEXwiCuu6b3jmOCvaWHwSVQG8jljUwbHXVaxuezCdfn387EN0gOupu6hkMFuBSBvmg7xmMEMDtwVlHhsrYY4QBYxE0lGxlqoyBd/6pmThcfmBbdRZkUhPsI7IlaJ6kihgxJhswXvu+Ob9/N2B8NkAatKP4IubwxRyYmrrVfIgX0pMX6L13XJDgHQDNvd8d6HnXaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=labware.com; dmarc=pass action=none header.from=labware.com; dkim=pass header.d=labware.com; arc=none Received: from DM6PR17MB3113.namprd17.prod.outlook.com (2603:10b6:5:6::10) by CY4PR17MB1447.namprd17.prod.outlook.com (2603:10b6:903:147::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.25; Fri, 25 Feb 2022 19:32:01 +0000 Received: from DM6PR17MB3113.namprd17.prod.outlook.com ([fe80::78f9:3a56:7d30:e2c9]) by DM6PR17MB3113.namprd17.prod.outlook.com ([fe80::78f9:3a56:7d30:e2c9%6]) with mapi id 15.20.5017.026; Fri, 25 Feb 2022 19:32:01 +0000 Message-ID: Subject: Re: [PATCHv4] gdb/python/mi: create MI commands using python From: Jan Vrany To: Tom Tromey , Andrew Burgess via Gdb-patches Cc: Andrew Burgess Date: Fri, 25 Feb 2022 19:31:54 +0000 In-Reply-To: <87r17qn43c.fsf@tromey.com> References: <20220209122531.GA2768@redhat.com> <20220224103749.1719761-1-aburgess@redhat.com> <87r17qn43c.fsf@tromey.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.43.2-2 X-ClientProxiedBy: LO4P123CA0132.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:193::11) To DM6PR17MB3113.namprd17.prod.outlook.com (2603:10b6:5:6::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6d93da2e-ce15-424f-cf12-08d9f8957e95 X-MS-TrafficTypeDiagnostic: CY4PR17MB1447:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5FD4YMsrL/WuicclyFiV4Te7+mRm60VZKVRiPWd1b57P0Em84lbt9BB93E8jSolJP0+hqM9D0tsgex5IN2RX2eOHMg5hzLiY+blm1POJLVi7k0nlGxFo/ORVxW9l7V/W8no+RJOnboHGibOZdAms7Nlnag4Mcwrk/SX6eDtTn6Nkwtcg9MF9Fe09VWYrC6DhWVSLAnswsdTRDVvdAT/crUYFrnRbC9VeA9hw8IccUHTRmM+iyxOA3O68nIikhtmuYYnnFZq6K3GaWGIbxxJZAS70fYu2qEdKoAs+ZJU/4qwFozHXyUGgQnEYLfpejFvWFcg/Ktxw/iKH9XggTMDa2LXaFcbZt0WEe+Pr9gceAqrRZXrGVnr03achOJEe54fk2o9OYcVrnt/u7OGbBSmRHZPaFbF/ER1pVoRUdSPRWMZ5EFeF2OA2+lHAncdjjlZB6JqvuJwin/suPbEKRYKEltgVYnPWxw7HPOFYDDmy/RgS4UYuvMcPnUmeIHk5jZB4303YC4zO8metqP2mdK9jT14sRn08m+z4zgikRbyoW1ANLm3uTlP+jvLbwaQR5Q8lVgJOwoGjUwpa1CGasP1Gi0XRCKWgTF1GT7CI4P79iEU21ZA3psRYD1n4xm+G8HDbza+jGirNUd9GFBObNPlZJtVgx+9BULy551GDgb2hDNmNI22qRnga/QuIbAJYxT76h+ICRH8FL5/rfijqZ9d0qQhJ7QbVGa26qnGQI88FAJc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR17MB3113.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(186003)(508600001)(6486002)(966005)(52116002)(6666004)(6512007)(2616005)(6506007)(38100700002)(86362001)(8676002)(66946007)(4326008)(316002)(83380400001)(44832011)(66556008)(66476007)(110136005)(5660300002)(2906002)(36756003)(8936002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ejJWR2ljYlc4ZjloekhHVkNRamxYQVRJQUd4VDNqclFGMWNQZjJlTUU4ay9T?= =?utf-8?B?cHo0YjIyNXdaTXNJYUVOTFdiRHVGcmtYSHYxK3RIRWYwMEtidjJtWmtmQ0VK?= =?utf-8?B?RVpYWXY0T05rdUltMjl0L0NNQWtqaFZXVmtGVFNBNGZULzhBSXRVSXR0NUZH?= =?utf-8?B?ODBmQTE2dzJBMk81VnF2Rmx3S3dPemhCYk5kZGdad2RPRmtnR3p0TFRQR0p1?= =?utf-8?B?VmZHVXM3ckx6aGtPSWU1OHpTSzNmTmt4TUtuQnhpZWd4NTlFTlhIQlkzSk5T?= =?utf-8?B?NC9KUHFBUTMzNk1DNyt6SVhJcHVWdmJDRHUycHR4T3BQd0EyU05wbTAzVHFj?= =?utf-8?B?ZzRKeW9uVzNZZHJ1WUhSS2dpaVBneTQza0d3eStRRU1uNEpCWThId1FIb2Yr?= =?utf-8?B?Y1JJeUZjWW1QVndIdXBPOWhKZWs1Y1pEY0pBSnZONHBrYVNkMFZNbzNzUmxy?= =?utf-8?B?anlGcFVsVTNBT1hPcjJMT3V3MVRpb0RlSlBTSWM2bWlHNnRCQnRkTCthVjFH?= =?utf-8?B?WlEyRzZEelIxcVB0VGdRTkFiaFp1dVZMV1c5YkxacE41THg1YmJ0VFRIVXlV?= =?utf-8?B?MFYrbWJ6eXJPeDdqQ1hZRHJLekRvWUZKTmgzc3duNGJ5bUd6Mm92TmZXamt0?= =?utf-8?B?M2gxY0NuUXJpMDJjVEZlQUttZlJDbnhmeE5GNGIvZjFCV3VrYW55REltK3lC?= =?utf-8?B?eDB2Sno0M2V6LzRHMjJUYTE4dEFiOEV2SWhGMnhBc1VCSG1IM0FqZEF0ejRW?= =?utf-8?B?c1JodmRuYmNPRks1Z0hvNlc0aUlsdWRXUHNOM21paGVHWSsyVDQwU1ZNdXJv?= =?utf-8?B?MlJ6RlI2TDVyNFdvZ3lwT3NVT0xNTHNOeFZwMGs0ZTFWMlJKd2NRbldWdHlS?= =?utf-8?B?akxRZmJKN1IyRnhNVWVBK3Y1RWVQRjZ3RUUvVzZwWlFxMFB6ZWdsdEluTDdS?= =?utf-8?B?cERIbFkzZkd6WDZpVmlLZGdkVmRzOXFtOSt1M1pGLzI2b3JYRFJoNnFQOS94?= =?utf-8?B?eTFQMnFFaDUwNVFPQWZhdm5BUnNXQzZTYjhrOGFVWDA1S1g3bFlwY2ZrN3dh?= =?utf-8?B?dXJTakJMNXR5RERKWHAzRXl0eVlCbEpOYTVEUCsyeGpLNDdmMVhZdElJQlpm?= =?utf-8?B?Z3V4RnBrSkd0ZnVhK2tkclQyZ0JNN0VnSm5nS1FPS3RjWlBEei9WSzJWaUkr?= =?utf-8?B?TzljS2V5V3BnZDhXOTN6aWd4eUNKa2Y3Q0ZzNk9BVnduNEtITGF1RDBickdm?= =?utf-8?B?R2IzaTBwcWw2K2lNM0hnVjRMSms3NjFwelIzMTVNbFZ6c1I5eUt2N0pFM3Y1?= =?utf-8?B?VnU3Q0RxOC91ZkZrQmM1LzhPK2ZPYmplbHkwMFFlYkM2TVQzb2x5R0tSRU1y?= =?utf-8?B?TWNWMjFHTWpjelFqWitXWEFYWlpLTlp3aCtjOHVxL1REc2dSU0FRVitGQkJp?= =?utf-8?B?cEVpSjg2YjRpMmdpOHlLZEdGdDFzNkkvSHRaZitpSnl3ak5qb2VvVWJVcW9u?= =?utf-8?B?N1JRNUdJcXU5YjlQbEFUTFNKMEtQSTRSME1tUU41Z1VXUHVKL1Y2b2lSV1BC?= =?utf-8?B?cllSeFNqOVcrSi9HYTNaeVlQNTROUCtHVDlOalFYQmtsQ2liMFhkMVpKdmlW?= =?utf-8?B?SDVtMTNsQmhrNC9XTGhzT3JweHFvbGgyWHNrZHY5ZTNXL0JXc2ExcTdOQjdX?= =?utf-8?B?TWFIUnFyRCtETWpZVE4vZXRubkFsUStiK0JRamZpaUZ1NGdaelM1NEx0cXE4?= =?utf-8?B?aW5SaUVybFdxZlBWZEhtMHo0Qnd1N1FRWDF5Z1BBMjFjV1RVY295clZoWGs1?= =?utf-8?B?ZC9CR25kVjBmeHAxNG9tZkYrc2gwME1TNGx1SnhmN1lTNlpoZGZNczZra3lG?= =?utf-8?B?aGpaSkE5ZU9GVFltUzc2eFM0Tk9GVzRuaGI4MXQ0U1NwKytmazdKRm5seDZZ?= =?utf-8?B?TlFZS1plbzArdVJKbHpZYWRJdHVoaGJ3V2NGR3E4SjZSMkxvWXlzWE4xTEZI?= =?utf-8?B?blFLbWkrakdYQlE5UG5pYmlYU1RUOXJyRFhrTWwvK21tUGkwOENYU3U2b3ha?= =?utf-8?B?RmRaSWdseG5KaUFaUXNXRjNCWG1ra0VxU2x5TlZSYVQ5YmtkaCtsV2pUam1x?= =?utf-8?B?NlhHckhZOXFoMVNUdmlPcDRwVEFhc1RWNnJpM2FDcTlVdk5vaDh0b2VuK1Vt?= =?utf-8?B?MU51em1GTU56RXRmRUJaam5wWFluaU5ZY2ZOcmJiSHVCS0dkdkl6Tk02dTlD?= =?utf-8?Q?xKyjaw3S4OMeDqd6McLV5F7WofiPEiIw4nmOmHxelw=3D?= X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d93da2e-ce15-424f-cf12-08d9f8957e95 X-MS-Exchange-CrossTenant-AuthSource: DM6PR17MB3113.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2022 19:32:00.8760 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b5db0322-1aa0-4c0a-859c-ad0f96966f4c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Fhg71hMVC0cTH9oZLiLS10Te69Djqgc01I12UkPzr6xXMdEzfLl7g5m7WRLHe4FYws5oBZGMNaAUo3SKUDy0KQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR17MB1447 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Feb 2022 19:32:05 -0000 On Fri, 2022-02-25 at 12:22 -0700, Tom Tromey wrote: > > > > > > "Andrew" =3D=3D Andrew Burgess via Gdb-patches writes: >=20 > Andrew> This v4 patch is identical to the version I posted here: > Andrew> =20 > https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__sourceware.org_pip= ermail_gdb-2Dpatches_2022-2DFebruary_185821.html&d=3DDwIBAg&c=3DsPZ6DeHLieh= UHQWKIrsNwWp3t7snrE-az24ztT0w7Jc&r=3DWpFFGgYa98Yp-c29WHTCwU1wAGFBvszA6a4Rzg= pMSqc&m=3DWKDSYr2J171tvbvDjhBen4GJ7U_Ub6ZV_q_Nyl7TQb8&s=3DYz53CWD-zdMB2I_L-= G0Xai7hGsPlRXGOkvDDoaMoy3c&e=3D >=20 > Andrew> except I've rebased onto current master. I just wanted to make s= ure > Andrew> it was clear what the latest version of this patch was. >=20 > Thank you both for working on this. >=20 > Andrew> When used within gdb the above command produced output like this: > Andrew> (gdb) > Andrew> -echo-args a b c > Andrew> ^done,args=3D["a","b","c"] > Andrew> (gdb) >=20 > Not necessary for this patch but I wonder if there should also be a way > to emit an async event from Python. This is on my list already but I decided leave this for later patch.=20 I have not even started working on this as to not having too many balls in the air.=20 >=20 > Andrew> I have required that the fields names used in mi result output mu= st > Andrew> follow C identifier restrictions (i.e. must match the regexp > Andrew> "[a-zA-Z][a-zA-Z0-9_]*"). >=20 > I think '-' is also supported, e.g.: >=20 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0uiout->field_string ("thread-id", pri= nt_thread_id (thr)); >=20 > Andrew> +@defun MICommand.invoke (arguments) > Andrew> +This method is called by @value{GDBN} when the new MI command is > Andrew> +invoked. > Andrew> + > Andrew> +@var{arguments} is a list of strings. Note, that @code{--thread= } > Andrew> +and @code{--frame} arguments are handled by @value{GDBN} itself = therefore > Andrew> +they do not show up in @code{arguments}. >=20 > I guess this is done because an option may or may not take a value? > That kind of too bad since it would be nice if this could just be a > dictionary. >=20 > I suppose we could always also add an MI parsing helper, though Python > also has tons of things for this as well. >=20 > Andrew> +The strings used for @emph{VARIABLE} names in the @sc{GDB/MI} ou= tput > Andrew> +must follow the following rules; the string must be at least one > Andrew> +character long, the first character must be in the set > Andrew> +@code{[a-zA-Z]}, while every subsequent character must be in the= set > Andrew> +@code{[a-zA-Z0-9_]}. >=20 > This should be updated to include '-'. >=20 > Andrew> +@smallexample > Andrew> +class MIEcho(gdb.MICommand): > Andrew> + """Echo arguments passed to the command.""" > Andrew> + > Andrew> + def __init__(self, name, mode, toplevel =3D None): > Andrew> + self._mode =3D mode > Andrew> + super(MIEcho, self).__init__(name, toplevel) >=20 > What is 'toplevel' here? It isn't documented for gdb.MICommand. >=20 > Andrew> + /* Called when the MI command is invoked. */ > Andrew> + virtual void do_invoke(struct mi_parse *parse) const override; >=20 > Andrew> + if (key_repr !=3D nullptr) > Andrew> + key_repr_string =3D python_string_to_target_string (key_repr.ge= t ()); > Andrew> + if (key_repr_string =3D=3D nullptr) > Andrew> + gdbpy_handle_exception (); > Andrew> + > Andrew> + gdbpy_error (_("non-string object used as key: %s"), > Andrew> + key_repr_string.get ()); >=20 > Someday I'd like gdb to solve the "denaturation" problem, where if > Python code throw some exception, it's turned into a generic exception > of some kind by gdb ... which if it is then caught again by Python, has > transmuted into something else. >=20 > Anyway this seems fine, just felt like I had to get that out. >=20 > Andrew> + for (; *name !=3D '\0'; ++name) > Andrew> + if (!isalnum (*name) && *name !=3D '_') > Andrew> + return false; >=20 > '-' >=20 > Andrew> + else if (PyIter_Check (result)) > Andrew> + { > Andrew> + gdbpy_ref<> item; > Andrew> + ui_out_emit_list list_emitter (uiout, field_name); > Andrew> + while (true) > Andrew> + { >=20 > Not for this patch but I wonder if emitting dictionaries via ui_out > might make for nicer CLI commands sometimes. >=20 > Andrew> + gdbpy_enter enter_py (get_current_arch (), current_language); >=20 > Probably should just drop the parameters here. >=20 > thanks, > Tom