From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10425 invoked by alias); 9 Oct 2013 11:37:30 -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 10412 invoked by uid 89); 9 Oct 2013 11:37:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00,MIME_BASE64_BLANKS,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail.bachmann.info Received: from mail.bachmann.info (HELO mail.bachmann.info) (213.33.91.3) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 09 Oct 2013 11:37:28 +0000 Received: from atfkex04.bachmann.at (atfkex04.bachmann.at [10.10.10.8]) by mail.bachmann.info (8.14.5/8.14.5) with ESMTP id r99BbDV6016979; Wed, 9 Oct 2013 13:37:13 +0200 Received: from atfkex06.bachmann.at ([fe80::f8b1:c064:d390:b714]) by atfkex04.bachmann.at ([fe80::e9df:b70d:a4dd:a52d%11]) with mapi id 14.03.0123.003; Wed, 9 Oct 2013 13:37:13 +0200 From: "ILG.Robert" To: "yao@codesourcery.com" , "palves@redhat.com" CC: "gdb-patches@sourceware.org" Subject: WG: Extending RSP with vCont;n and vCont;f Date: Wed, 09 Oct 2013 11:37:00 -0000 Message-ID: <7E3A266F5548C442BC08FA3038B5197C68449C77@ATFKEX06.bachmann.at> References: <7E3A266F5548C442BC08FA3038B5197C684495C0@ATFKEX06.bachmann.at> <525117AF.60703@codesourcery.com> In-Reply-To: <525117AF.60703@codesourcery.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2013-10/txt/msg00256.txt.bz2 Pj4+IEFjY29yZGluZyB0byB5b3VyIGNvbW1lbnRzLCB5b3UgZ290IGl0IGNv bXBsZXRlbHkgcmlnaHQuIFBsZWFzZSBsZXQgbWUga25vdyBpZiB0aGVyZSBp cyBhbm90aGVyIHBsYWNlIA0KPj4+IHdoZXJlIEkgaGF2ZSB0byBkZXNjcmli ZSB0aGVzZSB0d28gcGFja2FnZXMgaW4gZGV0YWlsLg0KDQo+PiBUaGUgbWFp bCBib2R5IGlzIGEgZ29vZCBwbGFjZSB0byBkZXNjcmliZSB0aGVzZSBwYWNr ZXRzLiAgSVdCTiB0byBnaXZlIHRoZSByc3AgdHJhZmZpYyB3aXRoIGFuZCB3 aXRob3V0IHRoZSBwYXRjaCwgYW5kIA0KPj4gaGlnaGxpZ2h0IHRoZSBkaWZm ZXJlbmNlLiAgZ2RiL2RvYy9nZGIudGV4aW5mbyBzaG91bGQgYmUgdXBkYXRl ZCB0byBpbmNsdWRlIHRoZXNlIHR3byBuZXcgcGFja2V0cywgYnV0IHlvdSBj YW4gZG8gaXQgDQo+PiBsYXRlci4NCg0KPj4+IEZpcnN0IG9mIGFsbCB3ZSBh cmUgZGVidWdnaW5nIG9uIGEgdGFyZ2V0IHRoYXQgaGFzIG5vIG1lbW9yeSBt YW5hZ2VtZW50IHBlciB0YXNrL3RocmVhZC4gVG8gYmUgbW9yZSBzcGVjaWZp YyB0aGUgDQo+Pj4gY29udHJvbGxlciBtYW5hZ2VzIG1lbW9yeSBhY2Nlc3Mg YmxvY2sgd2lzZS4gU28gd2hlbmV2ZXIgR0RCIHNldHMgYSBicmVha3BvaW50 IHRvIGEgbWVtb3J5IGFkZHJlc3Mgd2l0aGluIGEgDQo+Pj4gcHJvdGVjdGVk IGJsb2NrICh0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiBi ZWluZyBkZWJ1Z2dlZCksIGFuIGV4Y2VwdGlvbiBvbiB0aGUgY29udHJvbGxl ciB3b3VsZCByZXN1bHQuIFdlIA0KPj4+IGF2b2lkIHRoaXMgYnkgaWdub3Jp bmcgYnJlYWtwb2ludHMgdG8gdGhlc2Ugd2VsbC1rbm93biwgcHJvdGVjdGVk IGJsb2NrcyB3aXRoaW4gb3VyIGdkYi1zdHViLiBJZiBvdXIgdGFyZ2V0IGRv ZXMgbm90IA0KPj4+IGFjdCBkaWZmZXJlbnRseSBvbiAibmV4dCIgYW5kICJm aW5pc2giLCBkZWJ1Z2dpbmcgd2l0aCBHREIgcnVucyBpbnRvIGEgZGVhZCBl bmQuIEFsc28gY29uc2lkZXIgdGhhdCBzb21lIHRhcmdldCBoYXZlIA0KPj4+ IHJlYWQtb25seSBtZW1vcnksIHdoZXJlIHRoaXMgd2lsbCBjYXVzZSBwcm9i bGVtcyBhcyB3ZWxsLg0KPj4gDQo+PiBJIGFtIG5vdCBmYW1pbGlhciB3aXRo IHlvdXIgdGFyZ2V0LCBzbyBJIGRvbid0IHVuZGVyc3RhbmQgd2h5ICJkZWJ1 Z2dpbmcgd2l0aCBHREIgcnVucyBpbnRvIGEgZGVhZCBlbmQiLiAgU291bmRz IGxpa2UgDQo+PiBicmVha3BvaW50IGlzIHN1cHBvcnRlZCBvbiB5b3VyIHN0 dWIsIGJ1dCB3aHkgZG9lcyAiZmluaXNoIiBub3Qgd29yayBwcm9wZXJseT8N Cg0KSSBoYXZlbuKAmXQgYmVlbiBhYmxlIHRvIHRyYWNlIGJhY2sgdGhlIGV4 YWN0IHByb2JsZW0uIElmIHRoZSB0YXJnZXQgZGVuaWVzIHRvIGluc2VydCBh IGJyZWFrcG9pbnQgZm9yICJmaW5pc2giLCBHREIgd2lsbCBjcmFzaCBsYXRl ciB3aGlsZSBkZWJ1Z2dpbmcgYmVjYXVzZSBpdCBzdWRkZW5seSB1c2VzIHJv dHRlbiBhZGRyZXNzZXMuIElmIEdEQiBpcyBub3QgaW5mb3JtZWQgYWJvdXQg dGhlIHByb2JsZW0gb2Ygc2V0dGluZyBzdWNoIGEgYnJlYWtwb2ludHMsIHlv dSBjYW4gY29udGludWUgZGVidWdnaW5nIHdpdGhvdXQgYW55IHByb2JsZW0u IEl0IGxvb2tzIGxpa2UgYXMgR0RCIGNvbnRhaW5zIGFuIGluY29tcGxldGUg ZXJyb3IgaGFuZGxpbmcuDQoNCj4+PiBTZWNvbmQgb3VyIHN5c3RlbSBjb250 YWlucyBzb21lIGFzc2VtYmxlciBmdW5jdGlvbnMgd2hpY2ggZG8gbm90IGJ1 aWxkIGEgc3RhY2sgZnJhbWUgYXMgdXN1YWxseSBkb25lIGJ5IGNvbXBpbGVk IA0KPj4+IGMtY29kZS4gV2hlbiBkZWJ1Z2dpbmcgdGhlc2UgYXNzZW1ibGVy IGZ1bmN0aW9ucyBHREIgcmVhY3RzIGFzIHVzdWFsOiBpdCBkZXRlY3RzIHRo ZSBjYWxsIG9mIGV4dGVybmFsIGNvZGUgYW5kIGRvZXMgDQo+Pj4gYSAiY29u dGludWUiIHRvIHRoZSByZXR1cm4gYWRkcmVzcyBvZiB0aGUgY3VycmVudCBz dGFjayBmcmFtZS4gWWV0IHRoaXMgcmV0dXJuIGFkZHJlc3MgaXMgbm90IHRo ZSBjYWxsZXIgLSBpdCBpcyB0aGUgY2FsbGVyIG9mIA0KPj4+IHRoZSBjYWxs ZXIgYW5kIHRoZXJlZm9yZSBhICJzdGVwLWludG8iIGRvZXMgbm90IG9ubHkg c2tpcCB1bmRlYnVnYWJsZSBjb2RlLCBpdCBhbHNvIHN0ZXBzIG91dCBvZiB0 aGUgY3VycmVudGx5IGRlYnVnZ2VkIA0KPj4+IGZ1bmN0aW9uLg0KPj4NCj4+ IElNTywgaXQgaXMgbm90IGEgcHJvYmxlbSBzcGVjaWZpYyB0byB5b3VyIHRh cmdldC4gIEl0IG5lZWRzIGEgZml4IGluIEdEQiByYXRoZXIgdGhhbiBwcm9w b3NpbmcgYSBuZXcgcnNwIHBhY2tldC4NCj4NCj4gUGVkcm8gQWx2ZXM6IE9y IHJlYWxseSwgdGhvc2UgYXNzZW1ibHkgZnVuY3Rpb25zIGhhdmUgd3Jvbmcg b3IgbWlzc2luZyB1bndpbmQgaW5mby4NCg0KSW5kZWVkIHRoYXQncyBleGFj dGx5IHRoZSBwcm9ibGVtLiANCg0KPj4+IEFsbCBpbiBhbGwgb3VyIHN5c3Rl bSBoYXMgc29tZSBsaW1pdGF0aW9ucyB0aGF0IGFyZSBzcGVjaWFsIGZvciBs b3ctbGV2ZWwgdGFyZ2V0cy4gT3VyIHByb3Bvc2FsIGlzIGEgIGdlbmVyYWxp emF0aW9uIG9uIA0KPj4+IGhvdyBHREIgaXMgY3VycmVudGx5IHdvcmtpbmcu IEN1cnJlbnRseSBHREIgZG9lcyBub3QgZXhwZWN0IHRoZSB0YXJnZXQgdG8g YmUgYWJsZSB0byBkbyBhIHN0ZXAtb3ZlciBvciBhIHN0ZXAtaW50by4gDQo+ Pj4gWWV0IGEgc3BlY2lmaWMgdGFyZ2V0IHNob3VsZCBiZSBhYmxlIHRvIG92 ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGJ5IHRlbGxpbmcgR0RCIHRoYXQgaXQg aXMgY2FwYWJsZSB0byBkbyBzby4gU3VjaCB0aGUgdGFyZ2V0IA0KPj4+IGNh biBkbyB0YXJnZXQtc3BlY2lmaWMgc3RhZmYgd2hhdGV2ZXIgaXMgY29uY2Vy bmVkIChyZWFkLW9ubHkgbWVtb3J5LCBtZW1vcnkgcHJvdGVjdGlvbiwgdGlt aW5nLCBtdXRleCAtIHdoYXRldmVyIA0KPj4+IGNvbWVzIGludG8geW91ciBt aW5kKS4gU3RlcC1yYW5nZSBkb2VzIG5vdCBjb3ZlciB0aGVzZSBzY2VuYXJp b3MgYW5kIGludHJvZHVjaW5nIHNwZWNpZmljIGNvZGUgZm9yIGRpZmZlcmVu dCByZW1vdGUgDQo+Pj4gdGFyZ2V0cyB0byBHREIgc291cmNlIHNlZW1zIHRv IGJlIHdyb25nICB0byBtZS4NCj4+DQo+PiBMb29rcyB5b3VyIG1vdGl2YXRp b24gaXMgZm9yIGZ1bmN0aW9uYWwgcHVycG9zZSwgcmFuZ2Ugc3RlcHBpbmcg aXMgbm90IHN1aXRhYmxlIHRvIHlvdS4gIFlvdXIgZ2VuZXJhbGl6YXRpb24g ZG9lc24ndCBsb29rIA0KPj4gcmVhc29uYWJsZSB0byBtZS4NCj4+IFdlIGNh biBoYXZlIGEgbG9vayBhdCBzdXBwb3J0ZWQgYWN0aW9ucyBvZiB2Q29udCwg J2MsQyxzLFMsdCxyJy4gIFRoZXkgYXJlIHF1aXRlIGxvdy1sZXZlbCBhbmQg cHJpbWl0aXZlLiAgSG93ZXZlciwgaW4gDQo+PiB5b3VyIHByb3Bvc2FsLCB2 Q29udDtuIGFuZCB2Q29udDtmIGFyZSBhYm91dCAic3RlcCB0byBhIG5ldyBs aW5lIiBhbmQgInN0ZXAgb3V0IG9mIHRoaXMgZnVuY3Rpb24iLCB3aHkgYXJl IHF1aXRlIGhpZ2gtDQo+PiBsZXZlbCB0byBtZS4NCg0KSW5kZWVkICJOZXh0 IiBjYW4gYmUgcmVwbGFjZWQgYnkgInJhbmdlLXN0ZXBwaW5nIi4gSXQgc2Vl bXMgdGhhdCB0aGlzIG1pZ2h0IHdvcmsgZm9yIHVzLiANCg0KQWxsIHRoZSBz YW1lICJmaW5pc2giIGlzIG5lZWRlZCBpbiBvcmRlciB0byBoYW5kbGUgdGhl IEdEQiAiZmluaXNoIiBjb3JyZWN0bHkuIFJlbWVtYmVyIHRoYXQgb3VyIHRh cmdldCBjYW5ub3QgaW5zZXJ0IGJyZWFrcG9pbnRzIHRvIHN5c3RlbSBjb2Rl LCBsaWtlIG90aGVyIHRhcmdldHMgY2Fubm90IGFsdGVyIHJlYWQtb25seSBt ZW1vcnkuIFNvIGlmIHlvdSB0cmlnZ2VyIHRoZSBzeXN0ZW0gdG8gY2FsbCBh IGNhbGwtYmFjayBmdW5jdGlvbiBvZiB5b3VyIGNvZGUsIHlvdSBjYW5ub3Qg c3RlcCBiYWNrLiBUaGUgU3RhY2sgd291bGQgbG9vayBsaWtlIHRoaXM6IE15 Q29kZTEtLT5TeXN0ZW1Db2RlMi0tPi4uLi0tPlN5c3RlbWNvZGU0LS0+TXlD b2RlNS4gQXMgeW91IGNhbm5vdCBpbnNlcnQgYSBicmVha3BvaW50IHRvIFN5 c3RlbUNvZGU0IHRoZXJlIGlzIG5vIHdheSB0byAiZmluaXNoIiB1bnRpbCBN eUNvZGUxLiBJbiBzdWNoIGEgY2FzZSBHREIgb3IgdGhlIHRhcmdldCBuZWVk IHRvIHJlYWxpemUgdGhhdCB0aGUgY29kZSBpbiBiZXR3ZWVuIGNhbm5vdCBi ZSBjb250cm9sbGVkIHdpdGggYnJlYWtwb2ludHMgYW5kIHRoZXJlZm9yZSB0 aGUgYnJlYWtwb2ludCBuZWVkcyB0byBiZSBzZXQgdG8gdGhlIHJldHVybiBh ZGRyZXNzIG9mIE15Q29kZTEgLSBza2lwcGluZyBhbGwgY29kZSBpbiBiZXR3 ZWVuLiBHREIgZG9lcyBub3Qgc2tpcCB1bmtub3duIGNvZGUgYXQgdGhlIG1v bWVudCwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc2tpcHBpbmcgdW5r bm93biBDb2RlIGhhcyB0byBiZSBkb25lIGJ5IEdEQiBvciBieSB0aGUgdGFy Z2V0IChyZW1vdGUgYnkgdXNpbmcgImZpbmlzaCIpLg0KDQpCeSB0aGUgd2F5 IHRoZXNlIFJTUCBjb21tYW5kcyBhcmUgbm90IGFzIGhpZ2ggbGV2ZWwgYXMg eW91IHRoaW5rIHRoZXkgYXJlLiAiTmV4dCIgZG9lcyBub3Qgc2tpcCBhIHdo b2xlIGxpbmUuIEl0IG9ubHkgc2tpcHMgYSBwb3NzaWJsZSBmdW5jdGlvbiBj YWxsLiBTdWNoIG5vIERXQVJGMiBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgLSBv bmx5IHRoZSBzdGFjayBhbmQgdGhlIGEgZmV3IGFzc2VtYmxlciBpbnN0cnVj dGlvbnMgbmVlZCB0byBiZSBldmFsdWF0ZWQuDQoNClNvIHRoZSByZWFsIHF1 ZXN0aW9ucyBhcmU6DQpJcyBpdCBpbnRlbmRlZCB0byBza2lwIHVua25vd24v cmVhZC1vbmx5IGNvZGUgaW4gR0RCPw0KSWYgeWVzLCBoYXMgaXQgdG8gYmUg c29sdmVkIHdpdGhpbiBHREIgb3Igd2l0aGluIHRoZSB0YXJnZXQ/DQoNCg0K Pj4gT24gdGhlIG90aGVyIGhhbmQsIHRoZXNlIHR3byBwYWNrZXRzIGNhbid0 IGJlIGV4ZXJjaXNlZCBpbiBvdGhlciBwZW9wbGUncyBlbnZpcm9ubWVudCwg YmVjYXVzZSB3ZSBkb24ndCBoYXZlIHlvdXIgDQo+PiBzdHViIGFuZCBnZGJz ZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uICBJIGFtIGFmcmFpZCB0aGF0 IHRoZXNlIHBpZWNlIG9mIGNvZGUgd2lsbCBiZSByb3R0ZW4gaW4gdGhlIHRy ZWUgYXMgR0RCIGV2b2x2ZXMuDQo+Pg0KDQpUaGFua3MsDQpSb2JlcnQgSWxn DQo= >From gdb-patches-return-106150-listarch-gdb-patches=sources.redhat.com@sourceware.org Wed Oct 09 12:01:58 2013 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 27664 invoked by alias); 9 Oct 2013 12:01:58 -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 27643 invoked by uid 89); 9 Oct 2013 12:01:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mga11.intel.com Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 09 Oct 2013 12:01:56 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 09 Oct 2013 05:01:55 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 09 Oct 2013 05:01:24 -0700 Received: from ulslx001.iul.intel.com (ulslx001.iul.intel.com [172.28.207.63]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id r99C1Ojm011885; Wed, 9 Oct 2013 13:01:24 +0100 Received: from ulslx001.iul.intel.com (localhost [127.0.0.1]) by ulslx001.iul.intel.com with ESMTP id r99C1N08004179; Wed, 9 Oct 2013 14:01:23 +0200 Received: (from wtedesch@localhost) by ulslx001.iul.intel.com with id r99C1NfO004175; Wed, 9 Oct 2013 14:01:23 +0200 From: Walfred Tedeschi To: tromey@redhat.com, mark.kettenis@xs4all.nl Cc: gdb-patches@sourceware.org, Walfred Tedeschi Subject: [PATCH V7 5/8] Add MPX support to gdbserver. Date: Wed, 09 Oct 2013 12:01:00 -0000 Message-Id: <1381320034-4092-6-git-send-email-walfred.tedeschi@intel.com> In-Reply-To: <1381320034-4092-1-git-send-email-walfred.tedeschi@intel.com> References: <1381320034-4092-1-git-send-email-walfred.tedeschi@intel.com> X-IsSubscribed: yes X-SW-Source: 2013-10/txt/msg00263.txt.bz2 Content-length: 16007 2013-05-22 Walfred Tedeschi gdbserver/ * Makefile.in: Add i386-mpx.c, i386-mpx-linux.c, amd64-mpx.c, amd64-mpx-linux.c, x32-mpx.c and x32-mpx-linux.c generation. * configure.srv (srv_i386_regobj): Add i386-mpx.o. (srv_i386_linux_regobj): Add i386-mpx-linux.o. (srv_amd64_regobj): Add amd64-mpx.o. (srv_amd64_linux_regobj): Add amd64-mpx-linux.o. (srv_i386_32bit_xmlfiles): Add i386/32bit-mpx.xml. (srv_i386_64bit_xmlfiles): Add i386/64bit-mpx.xml. * i387-fp.c (num_pl_bnd_register) Added constant. (num_pl_bnd_cfg_registers) Added constant. (struct i387_xsave) Added reserved area and MPX fields. (i387_cache_to_xsave, i387_xsave_to_cache) Add MPX. * linux-x86-low.c (init_registers_i386_mpx_linux): Declare new function. (tdesc_i386_mpx_linux): Add MPX amd64 target. (init_registers_amd64_mpx_linux): Declare new function. (tdesc_amd64_mpx_linux): Add MPX amd64 target. (init_registers_x32_mpx_linux): Declare new function. (tdesc_x32_mpx_linux): Add MPX amd64 target. (x86_64_regmap): Add MPX registers. (x86_linux_read_description): Add MPX case. (initialize_low_arch): Initialize MPX targets. --- gdb/gdbserver/Makefile.in | 15 +++++++ gdb/gdbserver/configure.srv | 20 ++++----- gdb/gdbserver/i387-fp.c | 90 +++++++++++++++++++++++++++++++++++++++++ gdb/gdbserver/linux-x86-low.c | 87 +++++++++++++++++++++++++++++++-------- 4 files changed, 186 insertions(+), 26 deletions(-) diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index e42c67f..81d223c 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -342,10 +342,13 @@ clean: rm -f tic6x-c64xp-linux.c tic6x-c64x-linux.c tic6x-c62x-linux.c rm -f xml-builtin.c stamp-xml rm -f i386-avx.c i386-avx-linux.c + rm -f i386-mpx.c i386-mpx-linux.c rm -f amd64-avx.c amd64-avx-linux.c + rm -f amd64-mpx.c amd64-mpx-linux.c rm -f i386-mmx.c i386-mmx-linux.c rm -f x32.c x32-linux.c rm -f x32-avx.c x32-avx-linux.c + rm -f x32-mpx.c x32-mpx-linux.c @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do maintainer-clean realclean distclean: clean @@ -568,6 +571,10 @@ i386-avx.c : $(srcdir)/../regformats/i386/i386-avx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx.dat i386-avx.c i386-avx-linux.c : $(srcdir)/../regformats/i386/i386-avx-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-linux.dat i386-avx-linux.c +i386-mpx.c : $(srcdir)/../regformats/i386/i386-mpx.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-mpx.dat i386-mpx.c +i386-mpx-linux.c : $(srcdir)/../regformats/i386/i386-mpx-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-mpx-linux.dat i386-mpx-linux.c i386-mmx.c : $(srcdir)/../regformats/i386/i386-mmx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-mmx.dat i386-mmx.c i386-mmx-linux.c : $(srcdir)/../regformats/i386/i386-mmx-linux.dat $(regdat_sh) @@ -664,8 +671,12 @@ amd64-linux.c : $(srcdir)/../regformats/i386/amd64-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-linux.dat amd64-linux.c amd64-avx.c : $(srcdir)/../regformats/i386/amd64-avx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx.dat amd64-avx.c +amd64-mpx.c : $(srcdir)/../regformats/i386/amd64-mpx.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-mpx.dat amd64-mpx.c amd64-avx-linux.c : $(srcdir)/../regformats/i386/amd64-avx-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-linux.dat amd64-avx-linux.c +amd64-mpx-linux.c : $(srcdir)/../regformats/i386/amd64-mpx-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-mpx-linux.dat amd64-mpx-linux.c x32.c : $(srcdir)/../regformats/i386/x32.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32.dat x32.c x32-linux.c : $(srcdir)/../regformats/i386/x32-linux.dat $(regdat_sh) @@ -674,6 +685,10 @@ x32-avx.c : $(srcdir)/../regformats/i386/x32-avx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-avx.dat x32-avx.c x32-avx-linux.c : $(srcdir)/../regformats/i386/x32-avx-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-avx-linux.dat x32-avx-linux.c +x32-mpx.c : $(srcdir)/../regformats/i386/x32-mpx.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-mpx.dat x32-mpx.c +x32-mpx-linux.c : $(srcdir)/../regformats/i386/x32-mpx-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-mpx-linux.dat x32-mpx-linux.c reg-xtensa.c : $(srcdir)/../regformats/reg-xtensa.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-xtensa.dat reg-xtensa.c reg-tilegx.c : $(srcdir)/../regformats/reg-tilegx.dat $(regdat_sh) diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index f65dd10..276452e 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -24,20 +24,20 @@ # Default hostio_last_error implementation srv_hostio_err_objs="hostio-errno.o" -srv_i386_regobj="i386.o i386-avx.o i386-mmx.o" -srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-mmx-linux.o" -srv_amd64_regobj="amd64.o amd64-avx.o x32.o x32-avx.o" -srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o x32-linux.o x32-avx-linux.o" +srv_i386_regobj="i386.o i386-avx.o i386-mpx.o i386-mmx.o" +srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-mpx-linux.o i386-mmx-linux.o" +srv_amd64_regobj="amd64.o amd64-avx.o amd64-mpx.o x32.o x32-avx.o x32-mpx.o" +srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-mpx-linux.o x32-linux.o x32-avx-linux.o x32-mpx-linux.o" ipa_i386_linux_regobj=i386-linux-ipa.o ipa_amd64_linux_regobj=amd64-linux-ipa.o -srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml" -srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-sse.xml i386/64bit-avx.xml i386/x32-core.xml" -srv_i386_xmlfiles="i386/i386.xml i386/i386-avx.xml i386/i386-mmx.xml $srv_i386_32bit_xmlfiles" -srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml i386/x32.xml i386/x32-avx.xml $srv_i386_64bit_xmlfiles" -srv_i386_linux_xmlfiles="i386/i386-linux.xml i386/i386-avx-linux.xml i386/i386-mmx-linux.xml i386/32bit-linux.xml $srv_i386_32bit_xmlfiles" -srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/64bit-linux.xml i386/x32-linux.xml i386/x32-avx-linux.xml $srv_i386_64bit_xmlfiles" +srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml i386/32bit-mpx.xml" +srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-sse.xml i386/64bit-avx.xml i386/x32-core.xml i386/64bit-mpx.xml" +srv_i386_xmlfiles="i386/i386.xml i386/i386-avx.xml i386/i386-mpx.xml i386/i386-mmx.xml $srv_i386_32bit_xmlfiles" +srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml i386/x32.xml i386/x32-avx.xml i386/amd64-mpx.xml $srv_i386_64bit_xmlfiles" +srv_i386_linux_xmlfiles="i386/i386-linux.xml i386/i386-avx-linux.xml i386/i386-mmx-linux.xml i386/32bit-linux.xml i386/i386-mpx-linux.xml $srv_i386_32bit_xmlfiles" +srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/64bit-linux.xml i386/amd64-mpx-linux.xml i386/x32-linux.xml i386/x32-avx-linux.xml i386/x32-mpx-linux.xml $srv_i386_64bit_xmlfiles" # Linux object files. This is so we don't have to repeat diff --git a/gdb/gdbserver/i387-fp.c b/gdb/gdbserver/i387-fp.c index 2886519..1240b67 100644 --- a/gdb/gdbserver/i387-fp.c +++ b/gdb/gdbserver/i387-fp.c @@ -20,6 +20,9 @@ #include "i387-fp.h" #include "i386-xstate.h" +static const int num_mpx_bnd_registers = 4; +static const int num_mpx_cfg_registers = 2; + /* Note: These functions preserve the reserved bits in control registers. However, gdbserver promptly throws away that information. */ @@ -108,6 +111,15 @@ struct i387_xsave { /* Space for eight upper 128-bit YMM values, or 16 on x86-64. */ unsigned char ymmh_space[256]; + + unsigned char reserved4[128]; + + /* Space for 4 bound registers values of 128 bits. */ + unsigned char mpx_bnd_space[64]; + + /* Space for 2 MPX configuration registers of 64 bits + plus reserved space. */ + unsigned char mpx_cfg_space[16]; }; void @@ -271,6 +283,14 @@ i387_cache_to_xsave (struct regcache *regcache, void *buf) if ((clear_bv & I386_XSTATE_AVX)) for (i = 0; i < num_xmm_registers; i++) memset (((char *) &fp->ymmh_space[0]) + i * 16, 0, 16); + + if ((clear_bv & I386_XSTATE_BNDREGS)) + for (i = 0; i < num_mpx_bnd_registers; i++) + memset (((char *) &fp->mpx_bnd_space[0]) + i * 16, 0, 16); + + if ((clear_bv & I386_XSTATE_BNDCFG)) + for (i = 0; i < num_mpx_cfg_registers; i++) + memset (((char *) &fp->mpx_cfg_space[0]) + i * 8, 0, 8); } /* Check if any x87 registers are changed. */ @@ -324,6 +344,40 @@ i387_cache_to_xsave (struct regcache *regcache, void *buf) } } + /* Check if any bound register has changed. */ + if ((x86_xcr0 & I386_XSTATE_BNDREGS)) + { + int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); + + for (i = 0; i < num_mpx_bnd_registers; i++) + { + collect_register (regcache, i + bnd0r_regnum, raw); + p = ((char *) &fp->mpx_bnd_space[0]) + i * 16; + if (memcmp (raw, p, 16)) + { + xstate_bv |= I386_XSTATE_BNDREGS; + memcpy (p, raw, 16); + } + } + } + + /* Check if any status register has changed. */ + if ((x86_xcr0 & I386_XSTATE_BNDCFG)) + { + int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); + + for (i = 0; i < num_mpx_cfg_registers; i++) + { + collect_register (regcache, i + bndcfg_regnum, raw); + p = ((char *) &fp->mpx_cfg_space[0]) + i * 8; + if (memcmp (raw, p, 8)) + { + xstate_bv |= I386_XSTATE_BNDCFG; + memcpy (p, raw, 8); + } + } + } + /* Update the corresponding bits in xstate_bv if any SSE/AVX registers are changed. */ fp->xstate_bv |= xstate_bv; @@ -531,6 +585,42 @@ i387_xsave_to_cache (struct regcache *regcache, const void *buf) } } + if ((x86_xcr0 & I386_XSTATE_BNDREGS)) + { + int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); + + + if ((clear_bv & I386_XSTATE_BNDREGS) != 0) + { + for (i = 0; i < num_mpx_bnd_registers; i++) + supply_register_zeroed (regcache, i + bnd0r_regnum); + } + else + { + p = (gdb_byte *) &fp->mpx_bnd_space[0]; + for (i = 0; i < num_mpx_bnd_registers; i++) + supply_register (regcache, i + bnd0r_regnum, p + i * 16); + } + + } + + if ((x86_xcr0 & I386_XSTATE_BNDCFG)) + { + int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); + + if ((clear_bv & I386_XSTATE_BNDCFG) != 0) + { + for (i = 0; i < num_mpx_cfg_registers; i++) + supply_register_zeroed (regcache, i + bndcfg_regnum); + } + else + { + p = (gdb_byte *) &fp->mpx_cfg_space[0]; + for (i = 0; i < num_mpx_cfg_registers; i++) + supply_register (regcache, i + bndcfg_regnum, p + i * 8); + } + } + supply_register_by_name (regcache, "fioff", &fp->fioff); supply_register_by_name (regcache, "fooff", &fp->fooff); supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index cf61872..8c2bfc9 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -43,6 +43,10 @@ extern const struct target_desc *tdesc_amd64_linux; void init_registers_amd64_avx_linux (void); extern const struct target_desc *tdesc_amd64_avx_linux; +/* Defined in auto-generated file amd64-mpx-linux.c. */ +void init_registers_amd64_mpx_linux (void); +extern const struct target_desc *tdesc_amd64_mpx_linux; + /* Defined in auto-generated file x32-linux.c. */ void init_registers_x32_linux (void); extern const struct target_desc *tdesc_x32_linux; @@ -50,6 +54,11 @@ extern const struct target_desc *tdesc_x32_linux; /* Defined in auto-generated file x32-avx-linux.c. */ void init_registers_x32_avx_linux (void); extern const struct target_desc *tdesc_x32_avx_linux; + +/* Defined in auto-generated file x32-mpx-linux.c. */ +void init_registers_x32_mpx_linux (void); +extern const struct target_desc *tdesc_x32_mpx_linux; + #endif /* Defined in auto-generated file i386-linux.c. */ @@ -64,6 +73,10 @@ extern const struct target_desc *tdesc_i386_mmx_linux; void init_registers_i386_avx_linux (void); extern const struct target_desc *tdesc_i386_avx_linux; +/* Defined in auto-generated file i386-mpx-linux.c. */ +void init_registers_i386_mpx_linux (void); +extern const struct target_desc *tdesc_i386_mpx_linux; + #ifdef __x86_64__ static struct target_desc *tdesc_amd64_linux_no_xml; #endif @@ -163,8 +176,11 @@ static const int x86_64_regmap[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, - ORIG_RAX * 8 + -1, + -1, -1, -1, -1, -1, -1, -1, -1, + ORIG_RAX * 8, + -1, -1, -1, -1, /* MPX registers BND0 ... BND3. */ + -1, -1 /* MPX registers BNDCFGU, BNDSTATUS. */ }; #define X86_64_NUM_REGS (sizeof (x86_64_regmap) / sizeof (x86_64_regmap[0])) @@ -1233,7 +1249,7 @@ x86_linux_read_description (void) { unsigned int machine; int is_elf64; - int avx; + int xcr0_features; int tid; static uint64_t xcr0; struct regset_info *regset; @@ -1312,36 +1328,71 @@ x86_linux_read_description (void) } /* Check the native XCR0 only if PTRACE_GETREGSET is available. */ - avx = (have_ptrace_getregset - && (xcr0 & I386_XSTATE_AVX_MASK) == I386_XSTATE_AVX_MASK); + xcr0_features = (have_ptrace_getregset + && (xcr0 & I386_XSTATE_ALL_MASK)); - /* AVX is the highest feature we support. */ - if (avx) + if (xcr0_features) x86_xcr0 = xcr0; if (machine == EM_X86_64) { #ifdef __x86_64__ - if (avx) + if (is_elf64) { - if (!is_elf64) - return tdesc_x32_avx_linux; + if (xcr0_features) + { + switch (xcr0 & I386_XSTATE_ALL_MASK) + { + case I386_XSTATE_MPX_MASK: + return tdesc_amd64_mpx_linux; + + case I386_XSTATE_AVX_MASK: + return tdesc_amd64_avx_linux; + + default: + return tdesc_amd64_linux; + } + } else - return tdesc_amd64_avx_linux; + return tdesc_amd64_linux; } else { - if (!is_elf64) - return tdesc_x32_linux; + if (xcr0_features) + { + switch (xcr0 & I386_XSTATE_ALL_MASK) + { + case I386_XSTATE_MPX_MASK: + return tdesc_x32_mpx_linux; + + case I386_XSTATE_AVX_MASK: + return tdesc_x32_avx_linux; + + default: + return tdesc_x32_linux; + } + } else - return tdesc_amd64_linux; + return tdesc_x32_linux; } #endif } else { - if (avx) - return tdesc_i386_avx_linux; + if (xcr0_features) + { + switch (xcr0 & I386_XSTATE_ALL_MASK) + { + case (I386_XSTATE_MPX_MASK): + return tdesc_i386_mpx_linux; + + case (I386_XSTATE_AVX_MASK): + return tdesc_i386_avx_linux; + + default: + return tdesc_i386_linux; + } + } else return tdesc_i386_linux; } @@ -3338,8 +3389,11 @@ initialize_low_arch (void) #ifdef __x86_64__ init_registers_amd64_linux (); init_registers_amd64_avx_linux (); + init_registers_amd64_mpx_linux (); + init_registers_x32_linux (); init_registers_x32_avx_linux (); + init_registers_x32_mpx_linux (); tdesc_amd64_linux_no_xml = xmalloc (sizeof (struct target_desc)); copy_target_description (tdesc_amd64_linux_no_xml, tdesc_amd64_linux); @@ -3348,6 +3402,7 @@ initialize_low_arch (void) init_registers_i386_linux (); init_registers_i386_mmx_linux (); init_registers_i386_avx_linux (); + init_registers_i386_mpx_linux (); tdesc_i386_linux_no_xml = xmalloc (sizeof (struct target_desc)); copy_target_description (tdesc_i386_linux_no_xml, tdesc_i386_linux); -- 1.7.10.4