From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91666 invoked by alias); 7 Apr 2016 22:07:48 -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 91654 invoked by uid 89); 7 Apr 2016 22:07:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=BAYES_20,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=0x68, 32byte, 32-byte, FPU X-HELO: mail2.cimeq.qc.ca Received: from mail2.cimeq.qc.ca (HELO mail2.cimeq.qc.ca) (205.237.245.17) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 07 Apr 2016 22:07:37 +0000 Received: from [10.0.0.14] (unknown [10.0.0.14]) by mail2.cimeq.qc.ca (Postfix) with ESMTPA id 4D35E55770 for ; Thu, 7 Apr 2016 18:08:20 -0400 (EDT) To: gdb-patches@sourceware.org From: James-Adam Renquinha Henri Subject: [PATCH] (ARM Cortex-M) FPU and PSP aware exception frame unwinder Message-ID: <5706DA27.1070308@cimeq.qc.ca> Date: Thu, 07 Apr 2016 22:07:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000402060100050306040108" X-IsSubscribed: yes X-SW-Source: 2016-04/txt/msg00170.txt.bz2 This is a multi-part message in MIME format. --------------000402060100050306040108 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1004 I submitted it as a bug to the GNU ARM Embedded initially, see here for details: https://bugs.launchpad.net/gcc-arm-embedded/+bug/1566054 Basically, this patch allow gdb to unwind properly an extended stack frame, that is an exception frame with FPU state stacked. Additionally, because all Cortex-M variants have 2 stack pointers, the Main Stack Pointer (MSP) and the Process Stack Pointer (PSP), the code in the patch also check which stack was used prior to the exception. That way, backtraces work beautifully. In my original submission, I mentioned a known issue that I didn't try to fix *yet*, because that would involve a lot more work, and the impact is relatively minor: for a given outer frame, some FPU registers may not be reported correctly. I hope you don't mind too much. I consider the current patch still useful, because at least backtraces work, and it's an annoyance not to be able to get them. -- James-Adam Renquinha Henri, Ing. jr Ingenieur d'application CIMEQ INC. --------------000402060100050306040108 Content-Type: text/plain; charset=UTF-8; name="patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch" Content-length: 5633 ZGlmZiAtLWdpdCBhL2dkYi9hcm0tdGRlcC5jIGIvZ2RiL2FybS10ZGVwLmMK aW5kZXggMDQxMmY3MS4uOGYzNDJjMSAxMDA2NDQKLS0tIGEvZ2RiL2FybS10 ZGVwLmMKKysrIGIvZ2RiL2FybS10ZGVwLmMKQEAgLTQ3MCw4ICs0NzAsMTAg QEAgYXJtX2FkZHJfYml0c19yZW1vdmUgKHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoLCBDT1JFX0FERFIgdmFsKQogewogICAvKiBPbiBNLXByb2ZpbGUgZGV2 aWNlcywgZG8gbm90IHN0cmlwIHRoZSBsb3cgYml0IGZyb20gRVhDX1JFVFVS TgogICAgICAodGhlIG1hZ2ljIGV4Y2VwdGlvbiByZXR1cm4gYWRkcmVzcyku ICAqLworIC8qIE5PVEU6IDB4ZjAwMDAwMDAgaXMgdGhlIEVYQ19SRVRVUk4g cGF0dGVybiwgYWNjb3JkaW5nIHRvIEIxLjUuOCBvZiB0aGUKKyAgICBBUk12 Ny1NIFJlZmVyZW5jZSBNYW51YWwuICAqLwogICBpZiAoZ2RiYXJjaF90ZGVw IChnZGJhcmNoKS0+aXNfbQotICAgICAgJiYgKHZhbCAmIDB4ZmZmZmZmZjAp ID09IDB4ZmZmZmZmZjApCisgICAgICAmJiAodmFsICYgMHhmMDAwMDAwMCkg PT0gMHhmMDAwMDAwMCkKICAgICByZXR1cm4gdmFsOwogCiAgIGlmIChhcm1f YXBjc18zMikKQEAgLTI5MDcsMTMgKzI5MDksMzEgQEAgYXJtX21fZXhjZXB0 aW9uX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKICAg ZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3Jk ZXIgKGdkYmFyY2gpOwogICBzdHJ1Y3QgYXJtX3Byb2xvZ3VlX2NhY2hlICpj YWNoZTsKICAgQ09SRV9BRERSIHVud291bmRfc3A7CisgIENPUkVfQUREUiB0 aGlzX2xyOwogICBMT05HRVNUIHhwc3I7CisgIGludCBtYWluX3N0YWNrX3Vz ZWQ7CisgIGludCBleHRlbmRlZF9mcmFtZV90eXBlOworICBpbnQgc3RhY2tf cmVnbnVtOwogCiAgIGNhY2hlID0gRlJBTUVfT0JTVEFDS19aQUxMT0MgKHN0 cnVjdCBhcm1fcHJvbG9ndWVfY2FjaGUpOwogICBjYWNoZS0+c2F2ZWRfcmVn cyA9IHRyYWRfZnJhbWVfYWxsb2Nfc2F2ZWRfcmVncyAodGhpc19mcmFtZSk7 CiAKLSAgdW53b3VuZF9zcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25l ZCAodGhpc19mcmFtZSwKLQkJCQkJICAgIEFSTV9TUF9SRUdOVU0pOworICAv KiBXZSBuZWVkIExSIHRvIGtub3c6IDEtIGlmIHRoZSBGUFUgd2FzIHVzZWQs IDItIHdoaWNoIHN0YWNrIHdhcyB1c2VkLgorICAgICAiQjEuNS42IEV4Y2Vw dGlvbiBlbnRyeSBiZWhhdmlvciIgaW4gQVJNdjctTSBBcmNoaXRlY3R1cmUg UmVmZXJlbmNlCisgICAgIE1hbnVhbCBJc3N1ZSBEIChvciB0aGUgbGFzdCBv bmUpIGdpdmVzIHRoZSB2YXJpb3VzIGJpdHMgaW4gTFIKKyAgICAgaW52b2x2 ZWQgaW4gdGhpcy4gTk9URTogdGhpcyBMUiBpcyBkaWZmZXJlbnQgb2YgdGhl IHN0YWNrZWQgb25lLiAgKi8KKyAgdGhpc19scgorICAgID0gZ2V0X2ZyYW1l X3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLAorCQkJCSAgIHVzZXJf cmVnX21hcF9uYW1lX3RvX3JlZ251bSAoZ2RiYXJjaCwKKwkJCQkJCQkJImxy IiwKKwkJCQkJCQkJLTEpKTsKKyAgbWFpbl9zdGFja191c2VkID0gKHRoaXNf bHIgJiAweGYpICE9IDB4ZDsKKyAgZXh0ZW5kZWRfZnJhbWVfdHlwZSA9ICh0 aGlzX2xyICYgKDEgPDwgNCkpID09IDA7CisgIHN0YWNrX3JlZ251bSA9IHVz ZXJfcmVnX21hcF9uYW1lX3RvX3JlZ251bSAoZ2RiYXJjaCwKKwkJCQkJICAg ICAgbWFpbl9zdGFja191c2VkID8gInNwIiA6ICJwc3AiLAorCQkJCQkgICAg ICAtMSk7CisKKyAgdW53b3VuZF9zcCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91 bnNpZ25lZCAodGhpc19mcmFtZSwgc3RhY2tfcmVnbnVtKTsKIAogICAvKiBU aGUgaGFyZHdhcmUgc2F2ZXMgZWlnaHQgMzItYml0IHdvcmRzLCBjb21wcmlz aW5nIHhQU1IsCiAgICAgIFJldHVybkFkZHJlc3MsIExSIChSMTQpLCBSMTIs IFIzLCBSMiwgUjEsIFIwLiAgU2VlIGRldGFpbHMgaW4KQEAgLTI5MjgsMTAg KzI5NDgsNDcgQEAgYXJtX21fZXhjZXB0aW9uX2NhY2hlIChzdHJ1Y3QgZnJh bWVfaW5mbyAqdGhpc19mcmFtZSkKICAgY2FjaGUtPnNhdmVkX3JlZ3NbMTVd LmFkZHIgPSB1bndvdW5kX3NwICsgMjQ7CiAgIGNhY2hlLT5zYXZlZF9yZWdz W0FSTV9QU19SRUdOVU1dLmFkZHIgPSB1bndvdW5kX3NwICsgMjg7CiAKKyAg aWYgKGV4dGVuZGVkX2ZyYW1lX3R5cGUpCisgICAgeworICAgICAgaW50IHMw X29mZnNldDsKKyAgICAgIGludCBmcHNjcl9vZmZzZXQ7CisKKyAgICAgIHMw X29mZnNldCA9IHVzZXJfcmVnX21hcF9uYW1lX3RvX3JlZ251bSAoZ2RiYXJj aCwgInMwIiwgLTEpOworICAgICAgZnBzY3Jfb2Zmc2V0ID0gdXNlcl9yZWdf bWFwX25hbWVfdG9fcmVnbnVtIChnZGJhcmNoLCAiZnBzY3IiLCAtMSk7CisK KyAgICAgIGlmIChzMF9vZmZzZXQgPT0gLTEgfHwgZnBzY3Jfb2Zmc2V0ID09 IC0xKQorCXsKKwkgIC8qIE9vb3BzLiAqLworCSAgd2FybmluZyAoXygiY2Fu J3QgZ2V0IHJlZ2lzdGVyIG9mZnNldHMgaW4gY2FjaGU7ICIKKwkJICAgICAi ZnB1IGluZm8gbWF5IGJlIHdyb25nIikpOworCX0KKyAgICAgIGVsc2UKKwl7 CisJICBpbnQgaTsKKwkgIGludCBmcHVfcmVnX29mZnNldDsKKworCSAgZnB1 X3JlZ19vZmZzZXQgPSB1bndvdW5kX3NwICsgMHgyMDsKKworCSAgLyogWFhY OiBUaGlzIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGxhenkgc3Rh Y2tpbmcsIHNlZSAiTGF6eQorCSAgICAgY29udGV4dCBzYXZlIG9mIEZQIHN0 YXRlIiwgaW4gQjEuNS43LiAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCAxNjsg KytpLCBmcHVfcmVnX29mZnNldCArPSA0KQorCSAgICB7CisJICAgICAgY2Fj aGUtPnNhdmVkX3JlZ3NbczBfb2Zmc2V0ICsgaV0uYWRkciA9IGZwdV9yZWdf b2Zmc2V0OworCSAgICB9CisJICBjYWNoZS0+c2F2ZWRfcmVnc1tmcHNjcl9v ZmZzZXRdLmFkZHIgPSB1bndvdW5kX3NwICsgMHg2MDsKKwl9CisKKwkvKiBP ZmZzZXQgMHg2NCBpcyByZXNlcnZlZCAqLworCWNhY2hlLT5wcmV2X3NwID0g dW53b3VuZF9zcCArIDB4Njg7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgY2FjaGUtPnByZXZfc3AgPSB1bndvdW5kX3NwICsgMzI7CisgICAgfQor CiAgIC8qIElmIGJpdCA5IG9mIHRoZSBzYXZlZCB4UFNSIGlzIHNldCwgdGhl biB0aGVyZSBpcyBhIGZvdXItYnl0ZQogICAgICBhbGlnbmVyIGJldHdlZW4g dGhlIHRvcCBvZiB0aGUgMzItYnl0ZSBzdGFjayBmcmFtZSBhbmQgdGhlCiAg ICAgIHByZXZpb3VzIGNvbnRleHQncyBzdGFjayBwb2ludGVyLiAgKi8KLSAg Y2FjaGUtPnByZXZfc3AgPSB1bndvdW5kX3NwICsgMzI7CiAgIGlmIChzYWZl X3JlYWRfbWVtb3J5X2ludGVnZXIgKHVud291bmRfc3AgKyAyOCwgNCwgYnl0 ZV9vcmRlciwgJnhwc3IpCiAgICAgICAmJiAoeHBzciAmICgxIDw8IDkpKSAh PSAwKQogICAgIGNhY2hlLT5wcmV2X3NwICs9IDQ7CkBAIC0yOTk3LDExICsz MDU0LDE5IEBAIGFybV9tX2V4Y2VwdGlvbl91bndpbmRfc25pZmZlciAoY29u c3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwKICAgLyogRXhjZXB0aW9u IGZyYW1lcyByZXR1cm4gdG8gb25lIG9mIHRoZXNlIG1hZ2ljIFBDcy4gIE90 aGVyIHZhbHVlcwogICAgICBhcmUgbm90IGRlZmluZWQgYXMgb2YgdjctTS4g IFNlZSBkZXRhaWxzIGluICJCMS41LjggRXhjZXB0aW9uCiAgICAgIHJldHVy biBiZWhhdmlvciIgaW4gIkFSTXY3LU0gQXJjaGl0ZWN0dXJlIFJlZmVyZW5j ZSBNYW51YWwiLiAgKi8KLSAgaWYgKHRoaXNfcGMgPT0gMHhmZmZmZmZmMSB8 fCB0aGlzX3BjID09IDB4ZmZmZmZmZjkKLSAgICAgIHx8IHRoaXNfcGMgPT0g MHhmZmZmZmZmZCkKLSAgICByZXR1cm4gMTsKKyAgc3dpdGNoICh0aGlzX3Bj KQorICAgIHsKKyAgICAgIGNhc2UgMHhmZmZmZmZlMToKKyAgICAgIGNhc2Ug MHhmZmZmZmZlOToKKyAgICAgIGNhc2UgMHhmZmZmZmZlZDoKKyAgICAgIGNh c2UgMHhmZmZmZmZmMToKKyAgICAgIGNhc2UgMHhmZmZmZmZmOToKKyAgICAg IGNhc2UgMHhmZmZmZmZmZDoKKyAgICAgICAgcmV0dXJuIDE7CiAKLSAgcmV0 dXJuIDA7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAg ICB9CiB9CiAKIC8qIEZyYW1lIHVud2luZGVyIGZvciBNLXByb2ZpbGUgZXhj ZXB0aW9ucy4gICovCg== --------------000402060100050306040108--