From patchwork Thu Nov 23 22:17:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 24484 Received: (qmail 101452 invoked by alias); 23 Nov 2017 22:17:28 -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 101440 invoked by uid 89); 23 Nov 2017 22:17:27 -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, KB_WAM_FROM_NAME_SINGLEWORD, SPF_PASS autolearn=ham version=3.3.2 spammy=add*, H*r:sk:EUR02-H 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; Thu, 23 Nov 2017 22:17:24 +0000 Received: from ESESSHC024.ericsson.se (Unknown_Domain [153.88.183.90]) by sesbmg23.ericsson.net (Symantec Mail Security) with SMTP id 49.EF.08439.1F8471A5; Thu, 23 Nov 2017 23:17:22 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.90) with Microsoft SMTP Server (TLS) id 14.3.352.0; Thu, 23 Nov 2017 23:17:21 +0100 Received: from [142.133.61.121] (192.75.88.130) by AMSPR07MB309.eurprd07.prod.outlook.com (2a01:111:e400:802f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.260.2; Thu, 23 Nov 2017 22:17:17 +0000 Subject: Re: [python] Allow explicit locations in breakpoints. To: Phil Muldoon , Keith Seitz , , "gdb-patches@sourceware.org" References: <04ccc2c4-7827-eedc-d8db-a83a0167acb6@redhat.com> <58311250-9ab1-39d1-99b6-07478bc8c2ab@redhat.com> <4768c7ad-cc3d-5702-fa93-40e9760d4ee8@ericsson.com> <81f2b22a-ba79-cc7c-ee85-95d2d433a90e@ericsson.com> <1765bb88-8ab0-bdcd-8551-69f8dff3bcb9@redhat.com> <31ad8fb7-0e20-13a5-45d1-c9fa67b76e27@ericsson.com> From: Simon Marchi Message-ID: <9e817c74-170d-b7ee-e49b-0287215eab26@ericsson.com> Date: Thu, 23 Nov 2017 17:17:06 -0500 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: X-ClientProxiedBy: CY4PR13CA0076.namprd13.prod.outlook.com (2603:10b6:903:152::14) To AMSPR07MB309.eurprd07.prod.outlook.com (2a01:111:e400:802f::12) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:AMSPR07MB309; X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB309; 3:dgVIyUrTLLV01MOlV7VGfaMZ8pBBfAaDcc07gkESfxgKYt+draUXy1QIJ1SK6E8kZ2BHStDOxk09MvZ1DjVr6FQdIMzxNjDwSl+NQoMxJgkbOVvbdV3jHYaqmPlV7eUsZyAI/xjU20dYIneFa3/XBOnBImlLWIyc0EG0QlEDHF278xZuL6yvTRHtKpmsLGwuBiX2RNmKTNrr3SULk2T0d6FoDHzXC75aazzjLChbxBKRmeHh11BHDH07RJ6vWGz7; 25:ISzqUPkEKHtXS2QJ14UEnVU81PWaPNYGX4Z7XixBnNZt1wPGLZKrwV03LjLLGiZzt9jqV4u5FmIosVAFHG7PCVhG6Vo1QT9rfozUoVsxydDQrZGYt70fbNCz8T4/OzmRJEXSmVo+lfINgm5UdwO7KFJ7ghs2frTG1D3T0/eocIYBBWUPB9+ET1lBpULrP9YoWm2OVx7KlI7gzx0ZaQ+HV7yja4fQQgr0AcRhcsKEB3Uqf0AJ9eQmC9TvDTzZuk4itz8HzbcNnkjOIUxjFPhWuy9PPCFSGzZJJzFHj01aP5+TmqKganRLxZkYUM5dxapg6dMBv8PCVrtm1DTzLTFzP8d9sy9x0ut7cKwNSFuWS+o=; 31:j6bbpTwZ/B7iyq9bYi3LskfpjkzPPf6OGSSVW42knpp0RqMq7IcD823QVNp73CKY4UBXEWMpw2PxbDRB5bY2UaZznZztr5gbb0jhNwO1Q98etWGtIPJAI9X3OD9G56PMZuBhC/3wsFFwTF/Fme8MCA8rpaY3agS1D6sRq4dSip/v/2sxxEAsCQwzMK6ilM/wXBRz9jtT5IrsrvNzY800GeXP5tFT7txMg7ArUXlcAeU= X-MS-TrafficTypeDiagnostic: AMSPR07MB309: X-MS-Office365-Filtering-Correlation-Id: 047a1947-c92a-495e-e448-08d532bff586 X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB309; 20:IZIVVrePzXnGkQ7iF+zvlkkBLWU/E4txVapbb1J6lNE8wkbKU5i1m1GezhNBuqXjjhi5JhyiA4f0BKrneyTcZO90B75vRNN/E+OGt6WGVp3EfkyDzWCPTXxKvM8kyKfWXbL3z9e9GjwS/BNLvytMudNtzTiXZedMwjDvSVpjztqxndxjnnnmDWr6qUjJzc2yAdYbqsmR/NcgVu/FEzFeErPf4jDhSVhCA8Fxlz2kqfwUPwfHszleSbJZCwcepZWZ4jjQcPD/Lu0o0g+CqL5rGKLhkM0ttPW8NNk5wiQ550sd6ln5rSxTm0rNmfmWc8vl9Gu8h+FGPaofXgVos0yMCus4iY5TbLnQGC4N1N+2zu+lV1y0kFQYcuYCGKFkwltdkzaiKlDy61WGGS21+bjvBKAPepin2NJ4jbmHUyO0OPA7nMx8L71JzLkW11bxLLslyYZY/XgNttP1LoLwfqBCjsDlSM36a1mF/Z8I21OHBWfP58OFqGEoxQylpZPzunDH; 4:FiiA3BdQ2x20n5C2GYjrf/XfSBjmrTzKCPIXvZgUepGDRT1Mvc5+lBlC1gxJ8Xd5iHEwj4YGvmMDblSLJPSb/MQW494cGCQVgQlJa4kCnUMB965AZvmzkarnWVRn/2H3H8KzDU5aNLt5g4M5leeper7e8fhfg0QHLFnusTDAKNgheaCiJVetBPA7Ca4BjH6bMUjh+N8wT79Mjt7WOWel63mzOA5PdRzFKcc87hfVkRmzV8FmwDFH22n8t3bgbNPK1gjmVRCDqF5hwqD7vQSaIp3xvOd7uSGxfBiZTwlqT9mCykPj31cxPMrcbasXzK8C X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231022)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(20161123558100)(20161123564025)(6072148)(201708071742011); SRVR:AMSPR07MB309; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AMSPR07MB309; X-Forefront-PRVS: 05009853EF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6049001)(346002)(376002)(39860400002)(366004)(189002)(54534003)(377424004)(199003)(24454002)(5660300001)(97736004)(6666003)(4001150100001)(50986999)(65826007)(16526018)(2950100002)(110136005)(575784001)(23676004)(66066001)(36756003)(53546010)(31696002)(86362001)(6246003)(47776003)(229853002)(2906002)(65806001)(52146003)(16576012)(2501003)(53936002)(58126008)(316002)(25786009)(68736007)(76176999)(93886005)(65956001)(106356001)(54356999)(64126003)(33646002)(105586002)(6116002)(6306002)(7736002)(305945005)(83506002)(101416001)(50466002)(81166006)(8676002)(3846002)(478600001)(31686004)(2486003)(189998001)(6486002)(230700001)(81156014)(52116002)(966005)(8936002)(49976008)(78286006); DIR:OUT; SFP:1101; SCL:1; SRVR:AMSPR07MB309; H:[142.133.61.121]; 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?MTtBTVNQUjA3TUIzMDk7MjM6UHVadnJjVXl5MXFkbVNsaXlDZ1VSUWYxa0JG?= =?utf-8?B?bDFTNWhUNFBxK0thdWZ6RHU2bW11MXlYUWdPcnl0UTdjRzdXRTllOWFxb0xB?= =?utf-8?B?NVNZTXc5aEVuL0hXQkVtbFhSbnhIVjQ3eG80TTFRR1g4NHNLRTJ4MXJFVFNV?= =?utf-8?B?K3dmNHoyNmVsZjFON2RYVjhrYmtHbzBSSDR1YjhaN2plRFFKWVpJbmZNMzZ0?= =?utf-8?B?YlJ2UERwdmQrQzdFZWZxR2RmQW9yakQwQjN5bjNQdVJiZ1p6SDZwVllPS1FN?= =?utf-8?B?b0QzTVVnTWxhN0lXdHhRSU9SLzlYc0V6QkFEN3VGc3Vzc1Y2cTFnSWpsWHZ1?= =?utf-8?B?QXl4UzlSVFZSdUZiTWp2bjZQZWlFZXdXcmhBRGhBL2ZzRW1QUlZpaGQ4eXNP?= =?utf-8?B?RXVzQW1YeHBPcVVjbk91cFdOcFBSV3owc0tjU2xEazlQc2NoS0JQR1kyOFhq?= =?utf-8?B?UzZ3R2s3WlZFRldIanBXSno4Vi83OFNqelBpMFJaZXNGNHpxK0pwZVBUdWN3?= =?utf-8?B?eGJ1dXRES3JpbGtWRlFaUWhZZmRoNWJaMkN6N0g2ZnN5cWM4Rm13L0g3VFhO?= =?utf-8?B?VkZXS0dwbFdhdG51YTlPeHFaaW0vUXdTL001U3RNRFVaVVY5YTJ0RGNtWENz?= =?utf-8?B?eGZMU0xQTDgvbnRRL0lScjZ2MEIwdzF1blprSjRobFBtYnkxVW5TNFU0WVdJ?= =?utf-8?B?RnBET0xaMFpuNmZ4Skp2WGN5ak9OUzRvU3BJbjI2dzZDUUNUc0RWVzNMWG9h?= =?utf-8?B?OXRVS1FXZVdzVEhENkZzckd0Z0VyY0VHRitLOWVHcUJPbWV4d21NUit4Z3Bj?= =?utf-8?B?VnhqQ3NXQ3BncGxkTEx6QmljMVY5TlFFRlZjYUp4R2pmd1UrVHZkRFBDOEo5?= =?utf-8?B?b2hvVXhTM3BwbHRDcmZXd3c1dXJLKzBraWNybW43Z0owVVdsSmpEWm50OWl3?= =?utf-8?B?YzlPdUtxNHNPTkZLV3ZEbFRnKzFlWER5SEU3YUFRRmdseUNxQnd5ZHlPb0NN?= =?utf-8?B?RHdyRXpiYTV0NGN4K3JwODVubllKME9NbTd0aXkrSkdQTFBiWGJTRFdPM2RQ?= =?utf-8?B?MXlqRFRJTUFMcnYzalEzMmtFc0wzTit1eUNHakZuSGN1NDZRY2ZJTlJkY2Vn?= =?utf-8?B?eDV0QSs1ZGx2ZHp5SWJOeHM1RktQd0orYm5LRVhUQUtpNHJpeWFKVzhIY1pa?= =?utf-8?B?QjlEc05LdTFIVDd2enY4Rlp2a3V6d3ZqTWFBQU5rM3BidjYva3VzR0xCVzVL?= =?utf-8?B?a2QwZlA3NUQ0R2FZR0R0bEZUYnNtbEMyZkwvTTEyRkhFY09oS1A0WU5neTU4?= =?utf-8?B?UGQ5b2dlMXdpb3pESjNtNE55R3lJbENoeDNpUmZ0OWFiOFhCTDEyY2dmRXMx?= =?utf-8?B?QUlJd0FZL0JNWGVGdFBjejVzT0QzL1hzOHkrODJaeTdlWlBEb3k0ZVVQbVQ4?= =?utf-8?B?eHZGQzYyd2Z3anZyczNTQXZrQ3Q5SGluWjlqY1g3ZXdtc3dNbTYrQ0U4Q1Zx?= =?utf-8?B?VmVnOUN0bWx2UDBoYVNKQTc5SWJWNG5iR0F1dnVaTno3Vi85Q0NpdCt5b0s0?= =?utf-8?B?eGhwR0VJMTZoYXlTb1oxdkZSaGlLL2tnbUtZVTNWNnhUVmEwKzJnemI1YWxO?= =?utf-8?B?RmhscU5wZWtrSDJ2TWJGMG1vM2NUOG1XWWpjTENWT0tOSmRKZGt5Y05wZUE1?= =?utf-8?B?Z296ZWczRFZKYllGMkoyTnIwREdnWDJCeStBZTlrN040eUp0MzI4eEh6RTVr?= =?utf-8?B?ZzhZYzQzYjNESkt4Y3B2dDdZL0NLVVgvaU5FYzFEN2prcWZySUZ4N0ZmYTQz?= =?utf-8?B?RSswamU4d3ZMTStHZFVsTzFYTG5WbHY0ZlVLallqczZSaXlielhwdDNFaEYz?= =?utf-8?B?cjlkN3FwdnQzT3d1RHFlRE5EbEdyT1ZaeU8xbkl1a0w0K3NZRmFmbmo4d1ZV?= =?utf-8?B?Yy9xejF0dmpSc0hURGhoQi9zNGxLUjhjblJnRHFxdXArS05BWlJwcGhuTEI3?= =?utf-8?B?dU03WmVXMS96LzV2ZkdadXBWTXVFV2lPUnNJbVhoT0E2SGprOXkwZ1M1ZzBi?= =?utf-8?B?NVpUd2YzNC9aWUR3b2lSaFczajBVQWNYL3hyNjVNY0NtRk1MMTNzOTdRc29v?= =?utf-8?Q?9AiaQudbuAA0bFVOEumJIw+6cmAyvBvuRVHFsiToGrz?= X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB309; 6:38fNyUiYadJaStIvXEsBh7WtZK/8yvnFlAS44C0IZJFZHS6AifhJbnbPc2ivMbsavw3mUUQjyg7cg3ooDsUNxQfXVXAT8g0K2Ss16AkZs+ieUgxcWQ6er9TKdaxFtrXVge+6hBJCDb8cET0Zgm/gnFoH9fTlF5PCXzr2abZSFAfqrQDYa9vPZEhfdBwLrW5LIiTuB0UXP5OADzSSxEuGt0ULGWeFprPpSFWMMUH1/u9ns6IG7F3OQ/SAnAZXZktfjMHqZB2BjkwEe5BgCAd2yTaD8LIrXCpMtDy+USZjLDO14T2Y8qMA3fPyhCeh/DkSwBonB0ji58gI1yypWUf9rd4DBOCi8xGa/GQk9Ns+kRo=; 5:HGAJcZGf1KQAzXyDIljjSi1fgf+E0cilrD3kWSPNNLx/adU+Yk+JfPn1rs/zrg8xcFSfaVU/lL8zbVKdwIOtnx4YXug9nLwL5bBlvckGdnAtjd28bUaKMIX00T6bGWlDnGQx6w+mJvwubvC0olLSEW++pgd3e4SL+OX/pCZgB5I=; 24:ABWUWNR05X70jJysrQ9l5J3kH6oP5AfTBLwoY6LWngJGGTj9AnNW4Wtz27bzSdNxHf+LcGXnwquOtpTnzz7Bu1QnL4FviOlx0LyygC3TokM=; 7:+q7IGiaresTvXnp/EH6DJjAwS5j8WkZO2BYeRAbgb0eGZ+K5C6zPvU44eAzQH0NXvF2wlKMYIqyLDQWXuqhGcf5Jdv+7wjEjaSY+mr1z3n9rA03dvdov/Q0IzzMQd6AgBoYcwlvvRThqyJ/mToxKLUVLZO6/sVMgJbegu3GRp7LdGPjWLwHK2+tYZvwNk7QzbrZA2mm4ODkqNr+dpRmXyOH/qVHc/OZG9lAPEfbLkfZPV+st7NQYCmxxGQlBKTNY SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2017 22:17:17.0787 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 047a1947-c92a-495e-e448-08d532bff586 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR07MB309 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes On 2017-11-17 06:02 AM, Phil Muldoon wrote: > All, > > Here's an updated patch. ChangeLog remains the same (except for > additional NEWS entry) > > I just realised this needs a doc review also. > > Cheers > > Phil Hi Phil, That > --- a/gdb/python/py-breakpoint.c > +++ b/gdb/python/py-breakpoint.c > @@ -32,6 +32,7 @@ > #include "language.h" > #include "location.h" > #include "py-event.h" > +#include "linespec.h" > > /* Number of live breakpoints. */ > static int bppy_live; > @@ -638,20 +639,73 @@ static int > bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) > { > static const char *keywords[] = { "spec", "type", "wp_class", "internal", > - "temporary", NULL }; > - const char *spec; > + "temporary","source", "function", > + "label", "line", NULL }; > + const char *spec = NULL; > int type = bp_breakpoint; > int access_type = hw_write; > PyObject *internal = NULL; > PyObject *temporary = NULL; > int internal_bp = 0; > int temporary_bp = 0; > + char *line = NULL; > + char *label = NULL; > + char *source = NULL; > + char *function = NULL; > > - if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "s|iiOO", keywords, > + if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOssss", keywords, > &spec, &type, &access_type, > - &internal, &temporary)) > + &internal, > + &temporary, &source, > + &function, &label, &line)) > return -1; > > + /* If spec is defined, ensure that none of the explicit location > + keywords are also defined. */ > + if (spec != NULL) > + { > + if (source != NULL || function != NULL || label != NULL || line != NULL) > + { > + PyErr_SetString (PyExc_RuntimeError, > + _("Breakpoints specified with spec cannot " > + "have source, function, label or line defined.")); > + return -1; > + } > + } > + else > + { > + /* If spec isn't defined, ensure that the user is not trying to > + define a watchpoint with an explicit location. */ > + if (type == bp_watchpoint) > + { > + PyErr_SetString (PyExc_RuntimeError, > + _("Watchpoints cannot be set by explicit " > + "location parameters.")); > + return -1; > + } > + else > + { > + /* Otherwise, ensure some explicit locations are defined. */ > + if (source == NULL && function == NULL && label == NULL > + && line == NULL) > + { > + PyErr_SetString (PyExc_RuntimeError, > + _("Neither spec nor explicit location set.")); > + return -1; > + } > + /* Finally, if source is specified, ensure that line, label > + or function are specified too. */ > + if (source != NULL && function == NULL && label == NULL > + && line == NULL) > + { > + PyErr_SetString (PyExc_RuntimeError, > + _("Specifying a source must also include a " > + "line, label or function.")); > + return -1; > + } > + } > + } > + I would suggest putting the argument validation code in its own function (e.g. bppy_init_validate_args), to keep bppy_init of a reasonnable size. > if (internal) > { > internal_bp = PyObject_IsTrue (internal); > @@ -672,16 +726,37 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) > > TRY > { > - gdb::unique_xmalloc_ptr > - copy_holder (xstrdup (skip_spaces (spec))); > - char *copy = copy_holder.get (); > - > switch (type) > { > case bp_breakpoint: > { > - event_location_up location > - = string_to_event_location_basic (©, current_language); > + event_location_up location; > + > + if (spec != NULL) > + { > + gdb::unique_xmalloc_ptr > + copy_holder (xstrdup (skip_spaces (spec))); > + char *copy = copy_holder.get (); > + > + location = string_to_event_location (©, > + current_language); > + } > + else > + { > + struct explicit_location explicit_loc; > + > + initialize_explicit_location (&explicit_loc); > + explicit_loc.source_filename = source; > + explicit_loc.function_name = function; > + explicit_loc.label_name = label; > + > + if (line != NULL) > + explicit_loc.line_offset = > + linespec_parse_line_offset (line); For convenience, I think it would be nice to accept integers for line. So perhaps something like this: From d0e3122bca8b4fcb2d6f303bdc66f68929bdc14f Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 23 Nov 2017 16:58:35 -0500 Subject: [PATCH] suggestion --- gdb/python/py-breakpoint.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 7fb35ce..5ee0fed 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -648,23 +648,23 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) PyObject *temporary = NULL; int internal_bp = 0; int temporary_bp = 0; - char *line = NULL; + PyObject *lineobj = NULL; char *label = NULL; char *source = NULL; char *function = NULL; - if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOssss", keywords, + if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOsssO", keywords, &spec, &type, &access_type, &internal, &temporary, &source, - &function, &label, &line)) + &function, &label, &lineobj)) return -1; /* If spec is defined, ensure that none of the explicit location keywords are also defined. */ if (spec != NULL) { - if (source != NULL || function != NULL || label != NULL || line != NULL) + if (source != NULL || function != NULL || label != NULL || lineobj != NULL) { PyErr_SetString (PyExc_RuntimeError, _("Breakpoints specified with spec cannot " @@ -687,7 +687,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) { /* Otherwise, ensure some explicit locations are defined. */ if (source == NULL && function == NULL && label == NULL - && line == NULL) + && lineobj == NULL) { PyErr_SetString (PyExc_RuntimeError, _("Neither spec nor explicit location set.")); @@ -696,7 +696,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) /* Finally, if source is specified, ensure that line, label or function are specified too. */ if (source != NULL && function == NULL && label == NULL - && line == NULL) + && lineobj == NULL) { PyErr_SetString (PyExc_RuntimeError, _("Specifying a source must also include a " @@ -706,6 +706,13 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) } } + if (lineobj != NULL && !PyInt_Check (lineobj) && !PyString_Check (lineobj)) + { + PyErr_SetString (PyExc_TypeError, + _ ("line must be an integer or a string.")); + return -1; + } + if (internal) { internal_bp = PyObject_IsTrue (internal); @@ -750,9 +757,23 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs) explicit_loc.function_name = function; explicit_loc.label_name = label; - if (line != NULL) - explicit_loc.line_offset = - linespec_parse_line_offset (line); + if (lineobj != NULL) + { + gdb::unique_xmalloc_ptr line; + + if (PyInt_Check (lineobj)) + line.reset (xstrprintf ("%ld", PyInt_AsLong (lineobj))); + else if (PyString_Check (lineobj)) + line = python_string_to_host_string (lineobj); + else + { + /* We should have validated the type up there... */ + gdb_assert_not_reached ("Unexpected type of lineobj."); + } + + explicit_loc.line_offset + = linespec_parse_line_offset (line.get ()); + } location = new_explicit_location (&explicit_loc); }