From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129646 invoked by alias); 7 Mar 2017 17:18:59 -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 129623 invoked by uid 89); 7 Mar 2017 17:18:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-6.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,MIME_BASE64_BLANKS,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=H*f:sk:8637epw, UD:xp, H*i:sk:8637epw, H*MI:sk:8637epw X-HELO: mga09.intel.com Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Mar 2017 17:18:57 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Mar 2017 09:18:25 -0800 X-ExtLoop1: 1 Received: from irsmsx101.ger.corp.intel.com ([163.33.3.153]) by orsmga001.jf.intel.com with ESMTP; 07 Mar 2017 09:18:24 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.38]) by IRSMSX101.ger.corp.intel.com ([169.254.1.112]) with mapi id 14.03.0248.002; Tue, 7 Mar 2017 17:18:23 +0000 From: "Wiederhake, Tim" To: Eli Zaretskii , Yao Qi CC: "Jose E. Marchesi" , "gdb-patches@sourceware.org" Subject: RE: MemoryView missing from Python 2.4 and 2.6 Date: Tue, 07 Mar 2017 17:18:00 -0000 Message-ID: <9676A094AF46E14E8265E7A3F4CCE9AF942A3B@irsmsx105.ger.corp.intel.com> References: <87o9xsx38r.fsf@oracle.com> <20170223225946.snir4ab6twc7vo7n@localhost> <9676A094AF46E14E8265E7A3F4CCE9AF9417D1@irsmsx105.ger.corp.intel.com> <86h93j7evn.fsf@gmail.com> <9676A094AF46E14E8265E7A3F4CCE9AF941DE1@irsmsx105.ger.corp.intel.com> <86y3wmpsng.fsf@gmail.com> <9676A094AF46E14E8265E7A3F4CCE9AF942654@irsmsx105.ger.corp.intel.com> <8637epwf5j.fsf@gmail.com> In-Reply-To: <8637epwf5j.fsf@gmail.com> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00075.txt.bz2 SGkgYWxsLA0KDQpMZXQgbWUgcmVjYXA6DQoNClRoZSBweXRob24gYmluZGlu Z3MgSSB3cm90ZSBicmVhayBHREIgY29tcGlsYXRpb24gZm9yIFB5dGhvbiAy LjYgYW5kIGJlbG93Lg0KDQpJIHdyb3RlIGEgcGF0Y2g6IGh0dHBzOi8vc291 cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxNy0wMi9tc2cwMDcxMi5o dG1sDQp3aGljaCBJIGxhdGVyIHJldmlzZWQgdG8gdGhpczogaHR0cHM6Ly9z b3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDE3LTAzL21zZzAwMDM5 Lmh0bWwNCg0KVGhlIHJldmlzZWQgcGF0Y2ggd2FzIE9LJ2QgdG8gcHVzaCBi eSBZYW86IGh0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMv MjAxNy0wMy9tc2cwMDA1OC5odG1sDQp1bmRlciB0aGUgcHJlbWlzZSB0aGF0 IEpvc2Ugb3IgSSBjb25maXJtIHRoYXQgaXQgd29ya3Mgd2l0aCBQeXRob24g Mi42Lg0KDQpKb3NlIGNvbmZpcm1lZCB0aGUgZmlyc3QgdmVyc2lvbjogaHR0 cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDE3LTAyL21z ZzAwNzE1Lmh0bWwNCg0KQXMgdGhlIHNlY29uZCB2ZXJzaW9uIGRvZXMgbm90 IGNoYW5nZSB0aGUgYWN0dWFsIGNvZGUsIEkgZ3Vlc3MgdGhhdCBpcyBmaW5l LCB0b28uDQoNCkpvZWwgc2VlbXMgdG8gYmUgZmluZSB3aXRoIHRoZSBnZW5l cmFsIHNvbHV0aW9uIGFzIHdlbGw6IGh0dHBzOi8vc291cmNld2FyZS5vcmcv bWwvZ2RiLXBhdGNoZXMvMjAxNy0wMy9tc2cwMDA3Mi5odG1sDQoNCkRvIEkg bmVlZCBFbGkncyBPSyBmb3IgdGhlIGFkZGVkIGxpbmUgaW4gdGhlIGRvY3Vt ZW50YXRpb24/DQoNCk90aGVyd2lzZSwgaXQnZCBsaWtlIHRvIGdvIGFoZWFk IGFuZCBwdXNoIHRoaXMgcGF0Y2guDQoNClJlZ2FyZHMsDQpUaW0NCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZYW8gUWkgW21h aWx0bzpxaXlhb2x0Y0BnbWFpbC5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIE1h cmNoIDcsIDIwMTcgMTE6MzMgQU0NCj4gVG86IFdpZWRlcmhha2UsIFRpbSA8 dGltLndpZWRlcmhha2VAaW50ZWwuY29tPg0KPiBDYzogSm9zZSBFLiBNYXJj aGVzaSA8am9zZS5tYXJjaGVzaUBvcmFjbGUuY29tPjsgZ2RiLQ0KPiBwYXRj aGVzQHNvdXJjZXdhcmUub3JnDQo+IFN1YmplY3Q6IFJlOiBNZW1vcnlWaWV3 IG1pc3NpbmcgZnJvbSBQeXRob24gMi40IGFuZCAyLjYNCj4gDQo+ICJXaWVk ZXJoYWtlLCBUaW0iIDx0aW0ud2llZGVyaGFrZUBpbnRlbC5jb20+IHdyaXRl czoNCj4gDQo+ID4gVGhhbmtzIGZvciB0aGUgcG9pbnRlci4gSSd2ZSBhdHRh Y2hlZCBhIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgcGF0Y2guDQo+IA0KPiBI aSBUaW0sDQo+IERpZCB5b3UgcnVuIHB5LXJlY29yZC1idHJhY2UueHAgd2l0 aCBweXRob24gMi42PyBvciBwcm9iYWJseSBKb3NlIGNhbiBoZWxwDQo+IHRv IHJ1biBpdCB3aXRoIHB5dGhvbiAyLjYuDQo+IA0KPiBJZiB0aGUgdGVzdCBU aW0gYWRkZWQgcGFzcyB3aXRoIGJvdGggcHl0aG9uIDIuNiBhbmQgcHl0aG9u IDMsIHlvdXIgcGF0Y2ggaXMNCj4gT0suDQo+IA0KPiAtLQ0KPiBZYW8gKOm9 kOWwpykNCkludGVsIERldXRzY2hsYW5kIEdtYkgKUmVnaXN0ZXJlZCBBZGRy ZXNzOiBBbSBDYW1wZW9uIDEwLTEyLCA4NTU3OSBOZXViaWJlcmcsIEdlcm1h bnkKVGVsOiArNDkgODkgOTkgODg1My0wLCB3d3cuaW50ZWwuZGUKTWFuYWdp bmcgRGlyZWN0b3JzOiBDaHJpc3RpbiBFaXNlbnNjaG1pZCwgQ2hyaXN0aWFu IExhbXByZWNodGVyCkNoYWlycGVyc29uIG9mIHRoZSBTdXBlcnZpc29yeSBC b2FyZDogTmljb2xlIExhdQpSZWdpc3RlcmVkIE9mZmljZTogTXVuaWNoCkNv bW1lcmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhSQiAx ODY5MjgK >From gdb-patches-return-137432-listarch-gdb-patches=sources.redhat.com@sourceware.org Tue Mar 07 17:23:27 2017 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 3445 invoked by alias); 7 Mar 2017 17:23:27 -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 Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 3435 invoked by uid 89); 7 Mar 2017 17:23:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-6.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,MIME_BASE64_BLANKS,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=SOME, gdb.instruction, sk:FullRec, Ideal X-HELO: mga01.intel.com Received: from mga01.intel.com (HELO mga01.intel.com) (192.55.52.88) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Mar 2017 17:23:25 +0000 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Mar 2017 09:18:12 -0800 X-ExtLoop1: 1 Received: from irsmsx103.ger.corp.intel.com ([163.33.3.157]) by fmsmga004.fm.intel.com with ESMTP; 07 Mar 2017 09:18:11 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.38]) by IRSMSX103.ger.corp.intel.com ([169.254.3.107]) with mapi id 14.03.0248.002; Tue, 7 Mar 2017 17:18:10 +0000 From: "Wiederhake, Tim" To: Yao Qi CC: "gdb-patches@sourceware.org" , "Metzger, Markus T" , "palves@redhat.com" , "xdje42@gmail.com" Subject: RE: [PATCH v6 9/9] Add documentation for new record Python bindings. Date: Tue, 07 Mar 2017 17:23:00 -0000 Message-ID: <9676A094AF46E14E8265E7A3F4CCE9AF942A2E@irsmsx105.ger.corp.intel.com> References: <1486989450-11313-1-git-send-email-tim.wiederhake@intel.com> <1486989450-11313-10-git-send-email-tim.wiederhake@intel.com> <86tw7apqf6.fsf@gmail.com> <9676A094AF46E14E8265E7A3F4CCE9AF942666@irsmsx105.ger.corp.intel.com> <86wpc1uwtz.fsf@gmail.com> In-Reply-To: <86wpc1uwtz.fsf@gmail.com> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00076.txt.bz2 Content-length: 11794 SGkgWWFvIQ0KDQpJIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIG1pc3VuZGVy c3RhbmRpbmcuICBMZXQgbWUgcGljayB1cCB0aGUgaWRlYSBvZiBnaXZpbmcN CmNvbmNyZXRlIGV4YW1wbGVzLiAgV2l0aCB0aGUgY3VycmVudCBpbXBsZW1l bnRhdGlvbiwgYSBzaW1wbGUgdXNlIGNhc2Ugd291bGQNCmxvb2sgbGlrZSB0 aGlzOg0KDQooZ2RiKSByZWNvcmQgYnRyYWNlDQpbUkVDT1JEIFNPTUUgUFJP R1JBTSBGTE9XXQ0KKGdkYikgcHl0aG9uLWludGVyYWN0aXZlDQo+Pj4gcmVj b3JkZWRfaW5zdHJ1Y3Rpb25zID0gZ2RiLmN1cnJlbnRfcmVjb3JkaW5nKCku aW5zdHJ1Y3Rpb25faGlzdG9yeQ0KPj4+IGZvciBpbnN0cnVjdGlvbiBpbiBy ZWNvcmRlZF9pbnN0cnVjdGlvbnM6DQouLi4gICBwcmludChpLm51bWJlciwg aGV4KGkucGMpLCBpLnNhbCkNCi4uLg0KW09VVFBVVF0NCg0KRm9yIHRoZSBz YWtlIG9mIHRoZSBhcmd1bWVudCwgbGV0J3MgYXNzdW1lIHRoYXQgIm51bWJl ciIsICJwYyIgYW5kICJzYWwiIGFyZSBub3QNCnVuaXF1ZSB0byBidHJhY2Ug YW5kIHRoYXQgc3VwcG9ydCBmb3IgImZ1bGwiIGlzIGltcGxlbWVudGVkIGlu IHRoZSB3YXkgdGhhdCBJDQpzdWdnZXN0ZWQ6ICJGdWxsSW5zdHJ1Y3Rpb24i IGhhcyBzb21lIGZ1bmN0aW9ucyAvIGRhdGEgbWVtYmVycyB0aGF0IGhhcHBl biB0bw0KaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGVpciAiQnRyYWNlSW5z dHJ1Y3Rpb24iIGNvdW50ZXJwYXJ0cyBidXQgdGhlc2UgcHl0aG9uDQpjbGFz c2VzIGFyZSBub3QgcmVsYXRlZCBpbiBhbnkgd2F5IGluIHRlcm1zIG9mIGNs YXNzIGluaGVyaXRhbmNlLiBUaGUgdXNlciBub3cNCndhbnRzIHRvIHJlY29y ZCB3aXRoIG1ldGhvZCAiZnVsbCIgYW5kICJpbnN0cnVjdGlvbl9oaXN0b3J5 IiByZXR1cm5zIG5vdCBhIGxpc3QNCm9mIEJ0cmFjZUluc3RydWN0aW9uIG9i amVjdHMgYnV0IGEgbGlzdCBvZiBGdWxsSW5zdHJ1Y3Rpb24gb2JqZWN0czsg dGhlIGlucHV0DQpsb29rcyBsaWtlIHRoaXM6DQoNCihnZGIpIHJlY29yZCBm dWxsDQpbUkVDT1JEIFNPTUUgUFJPR1JBTSBGTE9XXQ0KKGdkYikgcHl0aG9u LWludGVyYWN0aXZlDQo+Pj4gcmVjb3JkZWRfaW5zdHJ1Y3Rpb25zID0gZ2Ri LmN1cnJlbnRfcmVjb3JkaW5nKCkuaW5zdHJ1Y3Rpb25faGlzdG9yeQ0KPj4+ IGZvciBpbnN0cnVjdGlvbiBpbiByZWNvcmRlZF9pbnN0cnVjdGlvbnM6DQou Li4gICBwcmludChpLm51bWJlciwgaGV4KGkucGMpLCBpLnNhbCkNCi4uLg0K W09VVFBVVF0NCg0KSXQgaXMgZXhhY3RseSB0aGUgc2FtZS4gTm93IGlmIHdl IHdlcmUgdG8gaGF2ZSBzb21lIFB5dGhvbiBpbnN0cnVjdGlvbiBiYXNlDQpj bGFzcywgbGV0J3MgY2FsbCBpdCAiUmVjb3JkSW5zdHJ1Y3Rpb24iLCBhbmQg dHdvIFB5dGhvbiBzdWIgY2xhc3NlcywNCiJCdHJhY2VJbnN0cnVjdGlvbiIg YW5kICJGdWxsSW5zdHJ1Y3Rpb24iLCB0aGUgZXhhbXBsZSB3b3VsZCBzdGls bCBsb29rIGV4YWN0bHkNCmxpa2UgdGhpczoNCg0KKGdkYikgcmVjb3JkIFtm dWxsIG9yIGJ0cmFjZV0NCltSRUNPUkQgU09NRSBQUk9HUkFNIEZMT1ddDQoo Z2RiKSBweXRob24taW50ZXJhY3RpdmUNCj4+PiByZWNvcmRlZF9pbnN0cnVj dGlvbnMgPSBnZGIuY3VycmVudF9yZWNvcmRpbmcoKS5pbnN0cnVjdGlvbl9o aXN0b3J5DQo+Pj4gZm9yIGluc3RydWN0aW9uIGluIHJlY29yZGVkX2luc3Ry dWN0aW9uczoNCi4uLiAgIHByaW50KGkubnVtYmVyLCBoZXgoaS5wYyksIGku c2FsKQ0KLi4uDQpbT1VUUFVUXQ0KDQpUaGUgdXNlciBoYXMgbm8gYmVuZWZp dCBmcm9tIHRoZSBleGlzdGFuY2Ugb2YgYSBweXRob24gYmFzZSBjbGFzcy4g VGhleSBuZXZlcg0KcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGJhc2Ug Y2xhc3MgdG8gc2VlIHdoYXQgdGhlIGNvbW1vbiBpbnRlcmZhY2UgaXMuIFRo ZQ0KcHl0aG9uaWMgd2F5IC0tIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQg LS0gaXMgdG8gcmVseSBvbiB0aGUgZXhpc3RhbmNlIG9mDQpmdW5jdGlvbnMg LyBkYXRhIG1lbWJlcnMgb2YgdGhlIG9iamVjdHMsIG5vdCBvbiB0aGUgYWN0 dWFsIHR5cGUgb2YgdGhlIG9iamVjdC4NClRoYXQgaXMgd2hhdCBJIG1lYW50 IHdpdGggImR1Y2sgdHlwaW5nIi4gQm90aCBCdHJhY2VJbnN0cnVjdGlvbiBh bmQNCkZ1bGxJbnN0cnVjdGlvbiBiZWhhdmUgaW4gdGhlIHNhbWUgd2F5IGZv ciBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgLyBkYXRhIG1lbWJlcnMsDQp0aGV5 ICJxdWFjayBsaWtlIGEgZHVjayIgYW5kIHRoZXJlZm9yZSAiYXJlIGEgZHVj ayIsIG5vIG1hdHRlciB0aGF0IHRoZXkgYXJlDQppbnN0YW5jZXMgb2YgdHdv IHVucmVsYXRlZCBjbGFzc2VzLg0KDQpXaGF0IGV4YWN0bHkgZm9ybXMgdGhp cyBjb21tb24gaW50ZXJmYWNlIGhhcyB5ZXQgdG8gZGVmaW5lZCBhbmQgY29k aWZpZWQgaW4gdGhlDQpkb2N1bWVudGF0aW9uLiBCdXQgdGhpcyBpcyBpbiBt eSBvcGluaW9uIHRoZSBiZWF1dHkgb2YgdGhpcyBhcHByb2FjaDogQWxsDQpm dW5jdGlvbnMgLyBkYXRhIG1lbWJlcnMgb2YgQnRyYWNlSW5zdHJ1Y3Rpb24g dGhhdCBhcmUgbm90IHBhcnQgb2YgdGhpcyBjb21tb24NCmludGVyZmFjZSBh dXRvbWF0aWNhbGx5IGFyZSAianVzdCB0aGVyZSIgYW5kICJhZGRpdGlvbmFs IGZ1bmN0aW9uYWxpdHkiLg0KDQpUaGUgYXBwcm9hY2ggb2YgaGF2aW5nIGEg Y29tbW9uIGJhc2UgY2xhc3MgL3dvdWxkLyBoYXZlIHNvbWUgYmVuZWZpdCwg aWYgYWxsDQp0aHJlZSBvZiAiUmVjb3JkSW5zdHJ1Y3Rpb24iLCAiQnRyYWNl SW5zdHJ1Y3Rpb24iIGFuZCAiRnVsbEluc3RydWN0aW9uIiB3ZXJlDQpuYXRp dmUgUHl0aG9uIGNsYXNzZXM6IExlc3MgY29kZSBpbiBCdHJhY2VJbnN0cnVj dGlvbiBhbmQgRnVsbEluc3RydWN0aW9uLiBCdXQNCkJ0cmFjZUluc3RydWN0 aW9uIGFuZCBldmVudHVhbGx5IEZ1bGxJbnN0cnVjdGlvbiBhcmUgIkJ1aWx0 LUluInMgZnJvbSBQeXRob24ncw0KcGVyc3BlY3RpdmUuIFRoYXQgaXMsIG5v dCByZWFsIFB5dGhvbiBjbGFzc2VzIGJ1dCBzb21lIEMgY29kZSB0aGF0IGlu dGVyZmFjZXMNCndpdGggdGhlIFB5dGhvbiBpbnRlcnByZXRlci4NCg0KTGV0 J3MgYXNzdW1lIHRoYXQgIm51bWJlciIsICJwYyIgYW5kICJzYWwiIHdlcmUg dG8gYmUgdGhlIGNvbW1vbiBpbnRlcmZhY2UgYW5kDQp0aGVyZWZvcmUgZGF0 YSBtZW1iZXJzIG9mICJSZWNvcmRJbnN0cnVjdGlvbiIuIFRoZSBDIGNvZGUg Zm9yIHRoaXMgUHl0aG9uIGNsYXNzDQpub3cgbmVlZHMgdG8ga25vdyB3aGlj aCByZWNvcmRpbmcgaXMgY3VycmVudGx5IGFjdGl2ZSwgc2luY2UgdGhlcmUg aXMgbm8NCg0KY3VycmVudF90YXJnZXQudG9fZ2V0X3BjX2Zvcl9yZWNvcmRl ZF9pbnN0cnVjdGlvbl9ieV9udW1iZXIoc3RydWN0IHRhcmdldF9vcHMqLA0K CQkJCQkJCXVuc2lnbmVkIGludCk7DQoNClNvIHRoZSBDIGNvZGUgZm9yIHRo ZSBjb21tb24gIlJlY29yZEluc3RydWN0aW9uLnBjIiB3b3VsZCBsb29rIHNv bWV0aGluZyBsaWtlDQp0aGlzOg0KDQpzd2l0Y2ggKGN1cnJlbnRfcmVjb3Jk aW5nX21ldGhvZCkNCiAgew0KICAgIGNhc2UgTUVUSE9EX0JSQUNFOg0KCS8q IEJUUkFDRSBzcGVjaWZpYyBjb2RlIHRvIHJldHJpZXZlIFBDIGZvciBhIGdp dmVuIHJlY29yZGVkIGluc3RydWN0aW9uICovDQoJc3RydWN0IGJ0cmFjZV9p bnNuX2l0ZXJhdG9yIGl0ZXI7DQoJZmluZF9pbnNuX2J5X251bWJlcigmaXRl ciwgbnVtYmVyX29mX3RoZV9yZWNvcmRlZF9pbnN0cnVjdGlvbik7DQoJc3Ry dWN0IGJ0cmFjZV9pbnNuKiBpbnNuID0gYnRyYWNlX2luc25fZ2V0KCZpdGVy KTsNCglyZXR1cm4gaW5zbi0+cGM7DQogICAgY2FzZSBNRVRIT0RfRlVMTDoN CgkvKiBGVUxMIHNwZWNpZmljIGNvZGUgdG8gcmV0cmlldmUgUEMgZm9yIGEg Z2l2ZW4gcmVjb3JkZWQgaW5zdHJ1Y3Rpb24gKi8NCgkuLi4uDQogICAgZGVm YXVsdDoNCgkvKiB0aHJvdyBzb21lIHB5dGhvbiBleGNlcHRpb24gKi8NCiAg fQ0KDQpUbyBhZGQgbW9yZSByZWNvcmRpbmcgcmVsYXRlZCBmdW5jdGlvbnMg dG8gdGFyZ2V0X29wcyBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QNCndheSB0 byBnbywgc2luY2Ugd2Ugc3RpbGwgbmVlZCBzb21lIHNoaW0gdG8gdHVybiB0 aGUgcmV0dXJuZWQgQyBzdHJ1Y3RzIGludG8NClB5dGhvbiBvYmplY3RzIGFu ZCB3ZSBpbXBvc2Ugc29tZSByZXF1aXJlbWVudHMgb24gdGhlIHJlY29yZGlu ZyB0YXJnZXRzIGxpa2UNCiJyZXF1aXJlcyByYW5kb20gYWNjZXNzIHRvIHRo ZSByZWNvcmRlZCBpbnN0cnVjdGlvbiIgYW5kIHNvIG9uLiBBZGRpdGlvbmFs bHksDQp3ZSB3b3VsZCBzdGlsbCByZXF1aXJlIGN1c3RvbSBjb2RlIGZvciBh IHJlY29yZGluZyBtZXRob2QsIGlmIHRoYXQgcmVjb3JkaW5nDQptZXRob2Qg Y2FuIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHdlIHdh bnQgdG8gbWFrZSBhY2Nlc3NpYmxlIHRvDQp0aGUgdXNlci4NCg0KRnJvbSBt eSBwb2ludCBvZiB2aWV3LCB0aGVyZSBpcyBubyBiZW5lZml0IGZvciB0aGUg dXNlciBmcm9tIHRoZSBjb21tb24gYmFzZQ0KY2xhc3MgYXBwcm9hY2guIEJv dGggY2FzZXMgZXhoaWJpdCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGJ1dCB0 aGUgb25lIHdpdGggdGhlDQpjb21tb24gYmFzZSBjbGFzcyBhZGRzIGxvdHMg b2YgY29tcGxleGl0eSBhbmQgYWRkZWQgY29kZSB0byBtYWludGFpbi4NCg0K U28sIG5vICJpZiAobWV0aG9kID0gLi4uKSIgaW4gcHl0aG9uIGNvZGU7IHRo ZSBtYW51YWwgdGVsbHMgeW91IGhvdyB3cml0ZQ0KKHB5dGhvbikgY29kZSB0 aGF0IHdvcmtzIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlY29yZGluZyBtZXRob2Qg aW4gYSB5ZXQgdG8gYmUNCndyaXR0ZW4gYW5kIHRvIGJlIGRlY2lkZWQgdXBv biBwYXJhZ3JhcGggYWJvdXQgdGhlICJjb21tb24gaW50ZXJmYWNlIjsgYW5k IHRoZQ0KcHl0aG9uIEFQSSBpdHNlbGYgaXMgYWN0dWFsbHkgbm90IGF0IGFs bCBidHJhY2Ugc3BlY2lmaWMsIGFzIG9uZSBjb3VsZCBhcmd1ZQ0KdGhhdCBh bGwgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGFuZCBkYXRhIG1lbWJlcnMgYXJl IGN1cnJlbnRseSBqdXN0ICJhZGRlZA0KZnVuY3Rpb25hbGl0eSBmb3IgdGhl IGJ0cmFjZSBjYXNlIi4NCg0KSSBob3BlIEkgY291bGQgY2xlYXIgdGhpbmdz IHVwIGFuZCB0aGFua3MgZm9yIHJlYWRpbmcgdGhyb3VnaCB0aGlzLA0KDQpU aW0NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206 IFlhbyBRaSBbbWFpbHRvOnFpeWFvbHRjQGdtYWlsLmNvbV0NCj4gU2VudDog VHVlc2RheSwgTWFyY2ggNywgMjAxNyAxMjo1NCBQTQ0KPiBUbzogV2llZGVy aGFrZSwgVGltIDx0aW0ud2llZGVyaGFrZUBpbnRlbC5jb20+DQo+IENjOiBn ZGItcGF0Y2hlc0Bzb3VyY2V3YXJlLm9yZzsgTWV0emdlciwgTWFya3VzIFQN Cj4gPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPjsgcGFsdmVzQHJlZGhh dC5jb207IHhkamU0MkBnbWFpbC5jb20NCj4gU3ViamVjdDogUmU6IFtQQVRD SCB2NiA5LzldIEFkZCBkb2N1bWVudGF0aW9uIGZvciBuZXcgcmVjb3JkIFB5 dGhvbg0KPiBiaW5kaW5ncy4NCj4gDQo+ICJXaWVkZXJoYWtlLCBUaW0iIDx0 aW0ud2llZGVyaGFrZUBpbnRlbC5jb20+IHdyaXRlczoNCj4gDQo+ID4+IEkg cmVhZCB0aGVtIGFnYWluIHRoaXMgbW9ybmluZywgYW5kIGhhdmUgYSBkZXNp Z24gcXVlc3Rpb24gaW4NCj4gPj4gZ2VuZXJhbCwgd2h5IGFyZSB0aGV5IHNw ZWNpZmljIHRvIGJ0cmFjZT8NCj4gPj4gKC4uLikNCj4gPj4gQ2FuIGFkZCBh IGJhc2UgY2xhc3MgbGlrZSBSZWNvcmRJbnN0cnVjdGlvbiwgd2hpY2ggaGF2 ZSBzb21lIGJhc2ljDQo+ID4+IGF0dHJpYnV0ZXMgZm9yIGFsbCByZWNvcmQg bWV0aG9kcywgYW5kIEJ0cmFjZUluc3RydWN0aW9uIGV4dGVuZHMgaXQNCj4g Pj4gdG8gYWRkIG1vcmUgYnRyYWNlIHNwZWNpZmljIGF0dHJpYnV0ZXMuDQo+ ID4NCj4gPiBVbmZvcnR1bmF0ZWx5LCB0aGUgaW50ZXJmYWNlcyB0byB0aGUg ImZ1bGwiIGFuZCAiYnRyYWNlIiByZWNvcmRpbmcNCj4gPiBkaWZmZXIgcXVp dGUgbXVjaC4gU28gZXZlbiBmb3IgImNvbW1vbiIgYXR0cmlidXRlcywgdGhl IGNvZGUgZm9yIHRoZQ0KPiA+IGJhc2UgY2xhc3MgaW5zdHJ1Y3Rpb24gYW5k IGZ1bmN0aW9uIHNlZ21lbnQgb2JqZWN0cyB3b3VsZCBoYXZlIHRvICJpZg0K PiA+IChtZXRob2QgPT0gLi4uKSIgdGhyb3VnaCBhbGwgcmVjb3JkaW5nIG1l dGhvZHMsIGNsdXR0ZXJpbmcgaXQsIG1ha2luZw0KPiA+IGl0IGhhcmRlciB0 byBtYWludGFpbiBhbmQgcG90ZW50aWFsbHkNCj4gDQo+IERvIHlvdSBoYXZl IGEgY29uY3JldGUgZXhhbXBsZT8gIElmIHlvdSBoYXZlIHRvICJpZiAobWV0 aG9kID09IC4uLikiIGluDQo+IHB5dGhvbiBjb2RlIChvdXRzaWRlIG9mIGdk YiksIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBvbiBkZXNpZ24gaW4gcHl0 aG9uDQo+IGNvZGUuICBJIGJlbGlldmUgdGhlcmUgYXJlIHNvbWUgZGVzaWdu IHBhdHRlcm5zIGZvciB0aGlzIGtpbmQgb2YgaXNzdWUgImlmDQo+IChtZXRo b2QgPT0gLi4uKSIuDQo+IA0KPiA+IGNhdXNlIHRyb3VibGUgaWYgd2UgaW50 cm9kdWNlIGFub3RoZXIgcmVjb3JkaW5nIGZvcm1hdCBpbiB0aGUgZnV0dXJl DQo+ID4gd2hlbiBmdW5jdGlvbnMgaW4gdGhlIGJhc2UgY2xhc3Mgc3VkZGVu bHkgYXJlIG5vdCBpbXBsZW1lbnRlZCBmb3IgYWxsDQo+ID4gbWV0aG9kcyBh bnltb3JlLg0KPiA+DQo+ID4gTXkgaWRlYSB3YXMgdG8gbWFrZSB1c2Ugb2Yg UHl0aG9uJ3MgcGhpbG9zb3BoeSBvZiBkdWNrLXR5cGluZy4gSGF2aW5nDQo+ ID4gc3BlY2lmaWMgKEMgd3JhcHBlcikgb2JqZWN0cyBmb3IgZWFjaCByZWNv cmRpbmcgbWV0aG9kIHNvbHZlcyB0aGUNCj4gPiBwcm9ibGVtIG9mIGhvdyB0 byBvYnRhaW4gdGhlIHJlcXVlc3RlZCBkYXRhIGZyb20gdGhlIHJlY29yZGlu ZyAiYmFjaw0KPiA+IGVuZCIuIElmIHdlIG5hbWUgcmVzcGVjdGl2ZSBmdW5j dGlvbnMgYW5kIGF0dHJpYnV0ZXMgdGhlIHNhbWUgaW4gdGhlc2UNCj4gPiBj bGFzc2VzLCB3ZSAicXVhY2sgbGlrZSBhIGR1Y2siIGFuZCBjcmVhdGUgdGhl IHNhbWUgY29tbW9uIGludGVyZmFjZSBmb3INCj4gdGhlIHVzZXIgZnJvbSBQ eXRob24ncyBwZXJzcGVjdGl2ZS4NCj4gPg0KPiANCj4gYnV0IHlvdSBjYW4n dCBoYXZlIGEgY29tbW9uIGludGVyZmFjZSBiZWNhdXNlIHRoZSBweXRob24g YXBpIGlzIGJ0cmFjZQ0KPiBzcGVjaWZpYy4gIFN1cHBvc2Ugd2UgaGF2ZSBn ZGIuRnVsbEluc3RydWN0aW9uIGZvciAiZnVsbCIsIHdoYXQgYXR0cmlidXRl cyBkbw0KPiB3ZSBoYXZlPyAubnVtYmVyIGFuZCAucGMgbWF5YmU/ICBXaXRo IHRoZSBweXRob24gYXBpIGRlc2lnbiBsaWtlIHRoaXMsIGhvdw0KPiBjYW4g SSB3cml0ZSBhIHB5dGhvbiBjb2RlIHRvIHRyYWNlIGRhdGEgcmVnYXJkbGVz cyBvZiB3aGljaCBtZXRob2QgaXMgYmVpbmcNCj4gdXNlZD8gIElkZWFsIGRl c2lnbiBpbiBteSBtaW5kIGlzIGxpa2UgdGhpcyAoSSBob3BlIGNvbmNyZXRl IGV4YW1wbGUgbGlrZSB0aGlzDQo+IGhlbHBzIGRpc2N1c3Npb24pDQo+IA0K PiBjbGFzcyBSZWNvcmRJbnN0cnVjdGlvbihvYmplY3QpDQo+IA0KPiAgICAg ICAjIGZpZWxkcyAucGMgYW5kIC5udW1iZXINCj4gDQo+IGNsYXNzIEZ1bGxS ZWNvcmRJbnN0cnVjdGlvbihSZWNvcmRJbnN0cnVjdGlvbikNCj4gDQo+IGNs YXNzIEJ0cmFjZUluc3RydWN0aW9uKFJlY29yZEluc3RydWN0aW9uKQ0KPiAN Cj4gICAgICAgIyBmaWVsZCAuZXJyb3INCj4gDQo+IENsaWVudCBweXRob24g Y29kZSBjYW4gZ2V0IGEgbGlzdCBvZiBSZWNvcmRJbnN0cnVjdGlvbiB0byBw cm9jZXNzLCB3aXRob3V0DQo+IGJlaW5nIGF3YXJlIHdoaWNoIG1ldGhvZCBp cyB1c2VkLg0KPiANCj4gVXNlIGdkYi5maW5kX3BjX2xpbmUgKHBjKSB0byBn ZXQgZ2RiLlN5bXRhYl9hbmRfbGluZSwgc28gd2UgZG9uJ3QgbmVlZCB0bw0K PiBoYXZlIEJ0cmFjZUluc3RydWN0aW9uLnNhbC4NCj4gDQo+IEJ0cmFjZUlu c3RydWN0aW9uIC5kYXRhLCAuZGVjb2RlZCwgLnNpemUsIGFuZCAuaXNfc3Bl Y3VsYXRpdmUsIHNob3VsZG4ndCBiZSBpbg0KPiBCdHJhY2VJbnN0cnVjdGlv bi4gIFRoZXkgYXJlIGFib3V0IGluc3RydWN0aW9uLiAgV2UgbmVlZCB0byBw dXQgdGhlbSBpbnRvIGENCj4gc2VwYXJhdGUgY2xhc3MsIGxpa2UgZ2RiLklu c3RydWN0aW9uLCBhbmQgYWRkIHNvbWUgZnVuY3Rpb24gdG8gZ2V0DQo+IGdk Yi5JbnN0cnVjdGlvbiBmcm9tIHBjLg0KPiANCj4gSSdsbCBnaXZlIGNvbW1l bnRzIHRvIEJ0cmFjZUZ1bmN0aW9uQ2FsbCBsYXRlci4NCj4gDQo+IC0tDQo+ IFlhbyAo6b2Q5bCnKQ0KSW50ZWwgRGV1dHNjaGxhbmQgR21iSApSZWdpc3Rl cmVkIEFkZHJlc3M6IEFtIENhbXBlb24gMTAtMTIsIDg1NTc5IE5ldWJpYmVy ZywgR2VybWFueQpUZWw6ICs0OSA4OSA5OSA4ODUzLTAsIHd3dy5pbnRlbC5k ZQpNYW5hZ2luZyBEaXJlY3RvcnM6IENocmlzdGluIEVpc2Vuc2NobWlkLCBD aHJpc3RpYW4gTGFtcHJlY2h0ZXIKQ2hhaXJwZXJzb24gb2YgdGhlIFN1cGVy dmlzb3J5IEJvYXJkOiBOaWNvbGUgTGF1ClJlZ2lzdGVyZWQgT2ZmaWNlOiBN dW5pY2gKQ29tbWVyY2lhbCBSZWdpc3RlcjogQW10c2dlcmljaHQgTXVlbmNo ZW4gSFJCIDE4NjkyOAo= >From gdb-patches-return-137433-listarch-gdb-patches=sources.redhat.com@sourceware.org Tue Mar 07 19:51:14 2017 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 9527 invoked by alias); 7 Mar 2017 19:51:14 -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 Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 9088 invoked by uid 89); 7 Mar 2017 19:51:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=tip, dying, 6276, Share X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Mar 2017 19:51:10 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 88336624B1; Tue, 7 Mar 2017 19:51:10 +0000 (UTC) Received: from localhost (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v27Jp90N031297 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 7 Mar 2017 14:51:09 -0500 From: Sergio Durigan Junior To: Pedro Alves Cc: GDB Patches , Luis Machado Subject: Re: [PATCH v3 5/6] Share fork_inferior et al with gdbserver References: <1482464361-4068-1-git-send-email-sergiodj@redhat.com> <20170208032257.15443-1-sergiodj@redhat.com> <20170208032257.15443-6-sergiodj@redhat.com> X-URL: http://blog.sergiodj.net Date: Tue, 07 Mar 2017 19:51:00 -0000 In-Reply-To: (Pedro Alves's message of "Wed, 15 Feb 2017 17:28:24 +0000") Message-ID: <87bmtcg91v.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00077.txt.bz2 Content-length: 21883 On Wednesday, February 15 2017, Pedro Alves wrote: > Hi Sergio, > > I think I'll likely have more comments, but this large, so > here's a first pass. Cool, thanks for the comments so far. I had to spend a bit of time thinking about some of them and addressing everything. Sorry about the delay. >> diff --git a/gdb/common/common-fork-child.c b/gdb/common/common-fork-child.c >> new file mode 100644 >> index 0000000..f4d7866 >> --- /dev/null >> +++ b/gdb/common/common-fork-child.c >> @@ -0,0 +1,593 @@ >> +/* Fork a Unix child process, and set up to debug it, for GDB and GDBserver. >> + >> + Copyright (C) 1990-2017 Free Software Foundation, Inc. >> + >> + Originally contributed by Cygnus Support. > > We should just take the opportunity to drop that per recent policy. > Plenty of files added by Cygnus (nowadays Red Hat) don't have that marker, > this won't be missed, IMO. Done. >> + >> + This file is part of GDB. >> + >> + This program is free software; you can redistribute it and/or modify >> + it under the terms of the GNU General Public License as published by >> + the Free Software Foundation; either version 3 of the License, or >> + (at your option) any later version. >> + >> + This program is distributed in the hope that it will be useful, >> + but WITHOUT ANY WARRANTY; without even the implied warranty of >> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + GNU General Public License for more details. >> + >> + You should have received a copy of the GNU General Public License >> + along with this program. If not, see . */ >> + > >> +int >> +fork_inferior (char *exec_file_arg, char *allargs, char **env, >> + void (*traceme_fun) (void), void (*init_trace_fun) (int), >> + void (*pre_trace_fun) (void), char *shell_file_arg, >> + void (*exec_fun)(const char *file, char * const *argv, >> + char * const *env)) >> +{ > >> + /* Retain a copy of our environment variables, since the child will >> + replace the value of environ and if we're vforked, we have to >> + restore it. */ >> + save_our_env = environ; >> + >> + /* Likewise the current UI. */ >> + save_ui = current_ui; > > Hmm, making this compile on gdbserver is of course a hack, > since there's not such thing as a "UI" concept on gdbserver... > >> + >> + /* Tell the terminal handling subsystem what tty we plan to run on; >> + it will just record the information for later. */ >> + new_tty_prefork (inferior_io_terminal); > > I wonder about calling here instead a more generalized hook, and > moving the save_ui saving and the new_tty_prefork calls to > that hook's gdb implementation. Might be easier to do that after > the series is in... Right, it is a hack indeed, and not a beautiful one. I implemented a bunch of new functions that solve this problem. Two of them, tty_{pre,post}fork_hook, are responsible for saving/restoring the current 'struct ui' and also for calling the new_tty_{pre,post}fork functions (which are now static). One more function was needed: switch_ui_postfork, which is responsible for switching the current_ui to main_ui, as is done currently after we successfully fork. These 3 functions are implemented only on GDB; they're stubs on gdbserver. >> + >> + /* It is generally good practice to flush any possible pending stdio >> + output prior to doing a fork, to avoid the possibility of both >> + the parent and child flushing the same data after the fork. */ >> + gdb_flush_out_err (); >> + >> + /* If there's any initialization of the target layers that must >> + happen to prepare to handle the child we're about fork, do it >> + now... */ >> + if (pre_trace_fun != NULL) >> + (*pre_trace_fun) (); >> + > > >> +++ b/gdb/common/common-top.h >> @@ -0,0 +1,31 @@ >> +/* Common top level stuff for GDB and GDBserver. >> + >> + Copyright (C) 1986-2017 Free Software Foundation, Inc. >> + >> + This file is part of GDB. >> + >> + This program is free software; you can redistribute it and/or modify >> + it under the terms of the GNU General Public License as published by >> + the Free Software Foundation; either version 3 of the License, or >> + (at your option) any later version. >> + >> + This program is distributed in the hope that it will be useful, >> + but WITHOUT ANY WARRANTY; without even the implied warranty of >> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + GNU General Public License for more details. >> + >> + You should have received a copy of the GNU General Public License >> + along with this program. If not, see . */ >> + >> +#ifndef COMMON_TOP_H >> +#define COMMON_TOP_H >> + >> +/* The main UI. This is the UI that is bound to stdin/stdout/stderr. >> + It always exists and is created automatically when GDB starts >> + up. */ >> +extern struct ui *main_ui; >> + >> +/* The current UI. */ >> +extern struct ui *current_ui; >> + > > Not exactly thrilled with moving this to common. See comment above. This is now back on GDB land. >> +#endif /* ! COMMON_TOP_H */ > >> /* Implement the "unset exec-wrapper" command. */ >> @@ -585,7 +73,7 @@ Show the wrapper for running programs."), NULL, >> &unsetlist); >> >> add_setshow_boolean_cmd ("startup-with-shell", class_support, >> - &startup_with_shell, _("\ >> + (int *) &startup_with_shell, _("\ > > That's invalid C/C++. Don't do that. Ops, thanks for pointing that out. I decided to revert the change and use an integer instead of a boolean there; at least until we have proper add_setshow* functions for real booleans. >> Set use of shell to start subprocesses. The default is on."), _("\ >> Show use of shell to start subprocesses."), NULL, >> NULL, > > >> --- a/gdb/gdbserver/inferiors.c >> +++ b/gdb/gdbserver/inferiors.c >> @@ -29,6 +29,8 @@ struct thread_info *current_thread; >> >> #define get_thread(inf) ((struct thread_info *)(inf)) >> >> +ptid_t inferior_ptid; > > What do we need this for? gdbserver already has > a "current thread" global. Another one looks like asking > for out-of-sync trouble. This is needed because fork_inferior et al reference this variable directly, and so I moved the 'extern' declaration of it to commom/. A possible solution to this would be to create a get/set pair of functions for it, but I'm not sure this would be a good idea due to (a) the number of direct references to it, and (b) the fact that these functions would probably end up being stubs on gdbserver as well. >> /* See common/common-gdbthread.h. */ >> >> void >> init_thread_list (void) >> { >> - /* To be implemented. */ >> + /* Placeholder needed for fork_inferior. No action is needed. */ > > Pick one of the comments, and move it to the right patch. Sorry, fixed. >> } >> > >> -/* Add a process to the common process list, and set its private >> - data. */ >> +/* Update process represented by PID with necessary info. */ >> >> static struct process_info * >> -linux_add_process (int pid, int attached) >> +linux_update_process (int pid) > > I'm not sure I understand the need for this yet. I need > to look deeper. "update what? why?" Or maybe the > comments should be improved. :-) The reason these 'update' functions were created is because fork_inferior already creates the process/thread structures, but we (the caller) still need to fill in some of the fields of these structures with more information. They are the same functions that existed before, but now we work with an existing process/thread, while before we *created* these structures. >> { >> - struct process_info *proc; >> + struct process_info *proc = find_process_pid (pid); >> >> - proc = add_process (pid, attached); >> + gdb_assert (proc != NULL); >> proc->priv = XCNEW (struct process_info_private); >> >> if (the_low_target.new_process != NULL) >> @@ -432,6 +433,16 @@ linux_add_process (int pid, int attached) >> return proc; >> } >> > >> +/* Update the lwp associated to thread represented by PTID. */ >> + >> +static struct lwp_info * >> +update_thread_lwp (ptid_t ptid) > > Ditto. > >> /* Start an inferior process and returns its pid. >> ALLARGS is a vector of program-name and args. */ >> >> static int >> -linux_create_inferior (char *program, char **allargs) >> +linux_create_inferior (std::vector &program_argv) > > "const std::vector &" ? Same comment for the whole > call chain, of course. Fixed. >> { >> struct lwp_info *new_lwp; >> int pid; >> ptid_t ptid; >> struct cleanup *restore_personality >> = maybe_disable_address_space_randomization (disable_randomization); >> + std::string program_args = stringify_argv (program_argv); >> >> -#if defined(__UCLIBC__) && defined(HAS_NOMMU) >> - pid = vfork (); >> -#else >> - pid = fork (); >> -#endif >> - if (pid < 0) >> - perror_with_name ("fork"); >> + pre_fork_inferior (program_argv); >> >> - if (pid == 0) >> - { >> - close_most_fds (); >> - ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); >> - >> - setpgid (0, 0); >> - >> - /* If gdbserver is connected to gdb via stdio, redirect the inferior's >> - stdout to stderr so that inferior i/o doesn't corrupt the connection. >> - Also, redirect stdin to /dev/null. */ >> - if (remote_connection_is_stdio ()) >> - { >> - close (0); >> - open ("/dev/null", O_RDONLY); >> - dup2 (2, 1); >> - if (write (2, "stdin/stdout redirected\n", >> - sizeof ("stdin/stdout redirected\n") - 1) < 0) >> - { >> - /* Errors ignored. */; >> - } >> - } >> - >> - restore_original_signals_state (); >> - >> - execv (program, allargs); >> - if (errno == ENOENT) >> - execvp (program, allargs); >> - >> - fprintf (stderr, "Cannot exec %s: %s.\n", program, >> - strerror (errno)); >> - fflush (stderr); >> - _exit (0177); >> - } >> + pid = fork_inferior (program_argv[0], >> + (char *) program_args.c_str (), > > Can we constify fork_inferior's parameters to avoid such > cast hacks ? I constified the args as requested, and now most of the casts are gone. I have a patch here that I'll send later, which constifies more parts of this code. >> + environ_vector (get_environ ()), linux_ptrace_fun, >> + NULL, NULL, NULL, NULL); >> >> do_cleanups (restore_personality); >> >> - linux_add_process (pid, 0); >> + linux_update_process (pid); >> >> ptid = ptid_build (pid, pid, 0); >> - new_lwp = add_lwp (ptid); >> + new_lwp = update_thread_lwp (ptid); >> new_lwp->must_set_ptrace_flags = 1; >> >> + post_fork_inferior (pid, program_argv); >> + >> return pid; >> } >> > >> +/* See common/common-inferior.h. */ >> + >> +char * >> +get_exec_wrapper (void) >> { >> - char **new_argv = argv; >> + static std::string ret; >> + static int initialized_p = 0; > > bool. Fixed. >> + >> + if (wrapper_argv.empty ()) >> + return NULL; >> >> - if (wrapper_argv != NULL) >> + if (!initialized_p) >> { >> - int i, count = 1; >> - >> - for (i = 0; wrapper_argv[i] != NULL; i++) >> - count++; >> - for (i = 0; argv[i] != NULL; i++) >> - count++; >> - new_argv = XALLOCAVEC (char *, count); >> - count = 0; >> - for (i = 0; wrapper_argv[i] != NULL; i++) >> - new_argv[count++] = wrapper_argv[i]; >> - for (i = 0; argv[i] != NULL; i++) >> - new_argv[count++] = argv[i]; >> - new_argv[count] = NULL; >> + for (std::vector::iterator i = wrapper_argv.begin (); >> + i != wrapper_argv.end (); >> + ++i) >> + ret += *i + std::string (" "); > > for (auto arg : wrapper_argv) > ret += arg + " "; Fixed. >> + >> + /* Erasing the last whitespace. */ > > "Erase". Fixed. >> + ret.erase (ret.end () - 1); >> + >> + initialized_p = 1; >> } >> >> + return (char *) ret.c_str (); > > Can the function return const instead? Fixed. >> +} >> + >> +/* See common/common-inferior.h. */ >> + >> +char * >> +get_exec_file (int err) >> +{ >> + if (err && program_argv.empty ()) >> + error (_("Could not get the exec file.")); > > I think this error message could be improved. If I see > that on the gdbserver terminal, I'll have no clue what > it means. "get from where??" How about just saying > the same thing gdb says, sans the "Use the ..." part? Fixed. >> + return program_argv[0]; >> +} >> + >> +/* See server.h. */ >> + >> +struct gdb_environ * >> +get_environ (void) >> +{ >> + return our_environ; >> +} >> + >> +/* See server.h. */ >> + >> +void >> +pre_fork_inferior (std::vector &argv) >> +{ >> if (debug_threads) >> { >> - int i; >> - for (i = 0; new_argv[i]; ++i) >> - debug_printf ("new_argv[%d] = \"%s\"\n", i, new_argv[i]); >> + int idx = 0; >> + >> + for (char *&i : argv) > > Reference to pointer is pointless, it's like pointer to > pointer. This should be fine: > > for (char *i : argv) > > I'd suggest naming the variable something else, since > it's not really an iterator. Like e.g.,: > > for (char *str : argv) > for (char *arg : argv) Thanks for the tip. >> + { >> + debug_printf ("new_argv[%d] = \"%s\"\n", idx, i); >> + ++idx; > > OTOH, if you're needing/maintaining an index anyway, > this ends up clearer IMO: > > for (int idx = 0; idx < argv.size(); idx++) > debug_printf ("new_argv[%d] = \"%s\"\n", idx, argv[idx]); Fixed. >> + } >> debug_flush (); >> } >> > > > >> handle_v_run (char *own_buf) >> { >> - char *p, *next_p, **new_argv; >> - int i, new_argc; >> + char *p, *next_p; >> + std::vector new_argv; >> + int new_argc; >> + int i; >> >> new_argc = 0; >> for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';')) >> @@ -2870,62 +2893,91 @@ handle_v_run (char *own_buf) >> new_argc++; >> } >> >> - new_argv = (char **) calloc (new_argc + 2, sizeof (char *)); >> - if (new_argv == NULL) >> - { >> - write_enn (own_buf); >> - return 0; >> - } >> - >> - i = 0; >> - for (p = own_buf + strlen ("vRun;"); *p; p = next_p) >> + for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i) >> { >> next_p = strchr (p, ';'); >> if (next_p == NULL) >> next_p = p + strlen (p); >> >> - if (i == 0 && p == next_p) >> - new_argv[i] = NULL; >> + if (p == next_p) >> + new_argv.push_back ("''"); >> else >> { >> /* FIXME: Fail request if out of memory instead of dying. */ >> - new_argv[i] = (char *) xmalloc (1 + (next_p - p) / 2); >> - hex2bin (p, (gdb_byte *) new_argv[i], (next_p - p) / 2); >> - new_argv[i][(next_p - p) / 2] = '\0'; >> + size_t len = 1 + (next_p - p) / 2; >> + char *s = (char *) xmalloc (len); >> + char *ss = (char *) xmalloc (len * 2); >> + char *tmp_s, *tmp_ss; >> + int need_quote; >> + >> + hex2bin (p, (gdb_byte *) s, (next_p - p) / 2); >> + s[(next_p - p) / 2] = '\0'; >> + >> + tmp_s = s; >> + tmp_ss = ss; >> + need_quote = 0; >> + while (*tmp_s != '\0') >> + { >> + switch (*tmp_s) >> + { >> + case '\n': >> + *tmp_ss = '\''; >> + ++tmp_ss; >> + need_quote = 1; >> + break; >> + >> + case '\'': >> + *tmp_ss = '\\'; >> + ++tmp_ss; >> + break; >> + >> + default: >> + break; >> + } >> + >> + *tmp_ss = *tmp_s; >> + ++tmp_ss; >> + ++tmp_s; >> + } >> + >> + if (need_quote) >> + *tmp_ss++ = '\''; > > Hmm, is this quoting stuff being moved from somewhere, > or it is new? This is new, even though GDB has a lot of places that do the same thing... >> + >> + *tmp_ss = '\0'; >> + new_argv.push_back (ss); >> + xfree (s); >> } >> >> if (*next_p) >> next_p++; >> - i++; >> } >> - new_argv[i] = NULL; > >> >> + /* Gather information about the environment. */ >> + our_environ = make_environ (); >> + init_environ (our_environ); >> + >> initialize_async_io (); >> initialize_low (); >> + /* This is called when initializing inflow on GDB. */ > > What is this comment supposed be to telling? Nothing; this was a leftover from another patch. Removed. >> + have_job_control (); >> initialize_event_loop (); >> if (target_supports_tracepoints ()) >> initialize_tracepoint (); >> @@ -3695,13 +3758,11 @@ captured_main (int argc, char *argv[]) >> int i, n; >> >> n = argc - (next_arg - argv); >> - program_argv = XNEWVEC (char *, n + 1); >> for (i = 0; i < n; i++) >> - program_argv[i] = xstrdup (next_arg[i]); >> - program_argv[i] = NULL; >> + program_argv.push_back (xstrdup (next_arg[i])); >> > >> -#define create_inferior(program, args) \ >> - (*the_target->create_inferior) (program, args) >> +#define create_inferior(program) \ >> + (*the_target->create_inferior) (program) > > program_argv, I suppose. Fixed. >> +/* See common/common-utils.h. */ >> + >> +std::string >> +stringify_argv (std::vector &argv) >> +{ >> + std::string ret (""); > > std::string ret; Fixed. >> + >> + for (std::vector::iterator i = argv.begin () + 1; >> + i != argv.end (); >> + ++i) >> + ret += *i + std::string (" "); > > Should we remove the last empty space? Yep, always a good practice. Fixed. >> + >> + return ret; >> +} >> diff --git a/gdb/gdbserver/utils.h b/gdb/gdbserver/utils.h >> index b4ded31..a30d99a 100644 >> --- a/gdb/gdbserver/utils.h >> +++ b/gdb/gdbserver/utils.h >> @@ -19,7 +19,17 @@ >> #ifndef UTILS_H >> #define UTILS_H >> >> +#include >> + >> char *paddress (CORE_ADDR addr); >> char *pfildes (gdb_fildes_t fd); >> >> +/* Works like FREEARGV, but with std::vector. */ >> +extern void free_vector_argv (std::vector &v); > > At some point, freeargv is eliminated, and this comment will > stay behind. Can we expand it a bit? Expanded. >> + >> +/* Given a vector of arguments ARGV, return a string equivalent to >> + joining all the arguments (starting from ARGV + 1) with a >> + whitespace separating them. */ >> +extern std::string stringify_argv (std::vector &argv); > > const ? > > This "starting from ARGV + 1" contract was surprising to me. > I only noticed this when I saw the implementation. > > Does it really make sense to put the program name inside the > vector instead of on a separate argument if we're always going > to treat argv[0] differently? > > I.e., would: > > - ...create_inferior (char *program, char **program_args) > + ...create_inferior (char *program, std::vector &program_args) > > make more sense? Right. I reverted this change, and now we're passing *program as the first argument again. >> static int >> -win32_create_inferior (char *program, char **program_args) >> +win32_create_inferior (std::vector &program_argv) >> { >> #ifndef USE_WIN32API >> char real_path[PATH_MAX]; >> @@ -627,6 +625,9 @@ win32_create_inferior (char *program, char **program_args) >> int argc; >> PROCESS_INFORMATION pi; >> DWORD err; >> + char *program = program_argv[0]; >> + std::string program_args = stringify_argv (program_argv); >> + char *args = (char *) program_args.c_str (); >> >> /* win32_wait needs to know we're not attaching. */ >> attaching = 0; >> @@ -636,6 +637,8 @@ win32_create_inferior (char *program, char **program_args) >> >> flags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; >> >> + pre_fork_inferior (program, argv); > > Hmm, fork on Windows? Ops. Removed. >> + >> #ifndef USE_WIN32API >> orig_path = NULL; >> path_ptr = getenv ("PATH"); >> @@ -652,18 +655,6 @@ win32_create_inferior (char *program, char **program_args) >> program = real_path; >> #endif >> >> - argslen = 1; >> - for (argc = 1; program_args[argc]; argc++) >> - argslen += strlen (program_args[argc]) + 1; >> - args = (char *) alloca (argslen); >> - args[0] = '\0'; >> - for (argc = 1; program_args[argc]; argc++) >> - { >> - /* FIXME: Can we do better about quoting? How does Cygwin >> - handle this? */ >> - strcat (args, " "); >> - strcat (args, program_args[argc]); >> - } >> OUTMSG2 (("Command line is \"%s\"\n", args)); >> >> #ifdef CREATE_NEW_PROCESS_GROUP >> @@ -704,6 +695,8 @@ win32_create_inferior (char *program, char **program_args) >> >> do_initial_child_stuff (pi.hProcess, pi.dwProcessId, 0); >> >> + post_fork_inferior (current_process_id, program_argv); >> + >> return current_process_id; >> } >> > > >> @@ -39,8 +39,14 @@ set spawn_id [remote_spawn target "$gdbserver stdio non-existing-program"] >> set msg "gdbserver exits cleanly" >> set saw_exiting 0 >> expect { >> - # This is what we get on ptrace-based targets. >> - -re "stdin/stdout redirected.*No program to debug\r\nExiting\r\n$" { >> + # This is what we get on ptrace-based targets with >> + # startup-with-shell disabled. >> + -re "stdin/stdout redirected.*gdbserver: Cannot exec >> non-existing-program\r\ngdbserver: Error: No such file or >> directory\r\n\r\nDuring startup program exited with code >> 127\.\r\nExiting\r\n$" { >> + set saw_exiting 1 >> + exp_continue > > Shouldn't this be a part of the next patch? Not really. I put this here because without it a regreession is introduced, and I wanted each patch to be regression-free. >> + } >> + # Likewise, but with startup-with-shell enabled. >> + -re "stdin/stdout redirected.*exec: non-existing-program: not found\r\nDuring startup program exited with code 127\.\r\nExiting\r\n$" { >> set saw_exiting 1 >> exp_continue >> } I'll send the next version soon. Thanks, -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/