From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 34189 invoked by alias); 26 Apr 2017 15:27:26 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 34028 invoked by uid 89); 26 Apr 2017 15:27:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-Spam-Status: No, score=-25.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=A33tzXS5ljKDrsbABAW9fhhdoUtXXal8yC26XNFwLXU=; b=qBJyKdoJsXgOi52DIBFFvzQM6m4asl0sx/w70h74Tbp2v0ma+ycFbaH72CQwl42PMiA/0kOlEN2FkpFvgPSb2fj2yq22lxkOuYOPMMstpb+kwqiv186HDAgGoZ18QE8ggMcackGoVtq4EVfk9kAcVquzR+HEMXKBcCjzPtLjSBs= Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=qt.io; Subject: Re: [PATCH 5/5] Add frame pointer unwinding for aarch64 To: Mark Wielaard References: <1493124006.31726.33.camel@klomp.org> <1493124579-21017-1-git-send-email-mark@klomp.org> <1493124579-21017-5-git-send-email-mark@klomp.org> <1493125881.31726.44.camel@klomp.org> <3b0d6718-cf17-9ae1-b5f7-8c6413b8d3d2@qt.io> <1493217200.31726.59.camel@klomp.org> CC: From: Ulf Hermann Message-ID: <14b0cd1d-5737-2c7a-3fab-f197011c7fc6@qt.io> Date: Thu, 27 Apr 2017 14:02:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1493217200.31726.59.camel@klomp.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: VI1PR0602CA0013.eurprd06.prod.outlook.com (2603:10a6:800:bc::23) To AM3PR02MB226.eurprd02.prod.outlook.com (2a01:111:e400:8810::13) X-MS-Office365-Filtering-Correlation-Id: 1130c2c1-d440-4972-cdc3-08d48cb8b92d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AM3PR02MB226; X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB226;3:pekH6CV5DLBrRGs5ZZItmcosXpK6U0QMndNUSuG8kP5CTFyY1bLdQPgiv31B00OKNY172YbnqmThZ/SqbSgs0mVrz/HCjuXP7yFjXbIKHxo55veE1ZyRX2Q6C+pjQ/JhmfmE8UkY3egh4plEqe7nqDKes9qLWiO3m9nnfyFhcK1p3GX72c0f2tgvw1JKqtqh0/KRmj2J/R7KNE3Zc0effxUqoejQzwvXem9viKL+/XsdqtI4nw0PUeVO/BtVx2921V0Sy1U3BCwQj90auj7/HJ8vqUGNVGQR+IKDbpT2bvtLHVSmgHEgGXPlrvj4NyvL8pNq08B7mS5R9EO4XbLT/Q==;25:mXz66IwU6zE3Fr2j9v6uOFIgx7dgavKQelMJinMaBVAV2Of8HDj07sloXFmY5H4uihNZ2vV+I4f0tVJV2V8rZ7RszP+hlMtw+bFfbp8159b8n9529drET94zogasYu/7AOew0NByUoxXOm+lCfNw1O0ZYUbd0ezgVD3DNv1Wf9dyCqRyp6+xBSnomMdOInrrlEkPLyqpi4EQA+NK5OrbGdWBB5crIMGsTgN9IbFRQDwAKqpCc9qeib1h0c/3LUHASeCRp2pCRLwWvyIEgrWWnxDvW6MEbTvbVIBcAuQNSFSTvRaxvVLBeI0rReVW6qpO3um1MrKI5QqXR7z8Kgh3MtMk6nRmxW7pZnrEba6JsyOqo43OlnqzkmUh0luvB9P/uorTTH2Ai2IX9p1QRqhgTfZhHE375TRcslNq2F/z+svLaMdL4M8ULynIGiUV1it2YM6kXuKy+t2+5Up1SpZGhw== X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB226;31:8vObQNDZ3C4Icl7SyclGkpy/slwgCCsyQCO94E28WAA7uAIIrdbDINZ6okBbozSmAd+uiCIPfYHo2yt1HkDSm4ru1RaGrFu1kIRiCj9kdRJcug/wkb2C/tNID5nDS+XtqJ7lxd4Ga1HKTDcGKg0Bc9cQMOccvbRuIaueigjJv1VeqdwNs9p0tP3i5eS72McwCWgeZX+xIRVsIN11nEGxIUopDVP317srxiiWIPA73d2qAEWEd7t9D8VA3v4anY4UWOWqWffwdoAu5Wk2xWYRLg==;20:pZ2dSa41ORE46FV0PFE61exHs0mKtmEettJeE+RqmWX8rKJa8dK4/KaA3QWdXF6dhqmSr9UrUlOa9r7TvpzwFbFC7p6TX1w1m9nMpnIKdyw0sT6+MhbHeuSEDFHS2Y/h6/bqxbK7LzxWDqRVVT5QJNL8z/xw/9eiJwgz9Jad7xsmOjLYfQIsrxqPjEQ0rsANHeOi8HmIfLzhd/7+I22gdqlY4mxds8V1oFB0Sudyjz45ScnhbUKyfJIMSc6bFuE+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123562025)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(20161123560025)(6072148);SRVR:AM3PR02MB226;BCL:0;PCL:0;RULEID:;SRVR:AM3PR02MB226; X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB226;4:bKF/WqjhDixxeMHxtijjo0f70inLtS5Xx7FwJIHIe63KWHhVk5xT03f96enkCg88CxvxDLqaNkgpr/AHkvjgYdDhoWAlyOtQ4BlFrN2p2kReZOrRlwqQLEf6Fpf+7ahri6OJwqdzKkmKQPMY6OAHL7tXyYjUDR00JxOB5pj+RdhR7odyIJH97YsKTIs9qf/mdmjk84EFX3wdmxnDdxXaCBuzEXhi/UWCmSJCVxmIWA6Y754IojLubDrdEyvldLZzJWOAmqNA0yD57O4EFk3KMersNQhd3NWQ2sPUnNBqP2sg0K0uW0k1F559BCSzOwulvp8fiA6te2u8RmZ3DUJGxPNgyjPt1sD+pxy4e1IBzLzrREgDq4uIi1I1db7nrla1PmQj4C+WLwLPOr9KexK3CAyB7pcqbM/MDlw8IrG3LsYW0bMcYqVAj28t7jh7aXUZKrw8sgClNZXyWYIWafM9hwHK4Ry+X8NZim3rvuSiNWlSHKuDhDnqyVBP811F2Ju0QjQ3xq7CL2F7z0TbrtTP9tC/ISRwmxI1h9OEZmSuyZ/rUZpPYLCJ1w042Oah2BFU8vZi77JRPnjMvHFR41oWlyHDbyOVgn123X4hcbLR1UzF7bMfkNtH5KsqAjoRDwKGO7l7p4axKsbngNUBiKKXgseeNX6iquHhSpCaK+5rh9xzcGK0vov+ChBXFDVo2GMT5wei1VfGWmIcpAcCbawg+Q== X-Forefront-PRVS: 0289B6431E X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39400400002)(39410400002)(39840400002)(39450400003)(377454003)(377424004)(24454002)(83506001)(3846002)(2906002)(23676002)(31686004)(6116002)(4001350100001)(42186005)(36756003)(86362001)(31696002)(8676002)(81166006)(305945005)(76176999)(54356999)(93886004)(77096006)(229853002)(50986999)(65826007)(5660300001)(53546009)(6486002)(4326008)(230700001)(65806001)(7736002)(6916009)(6666003)(38730400002)(189998001)(6246003)(33646002)(74482002)(64126003)(47776003)(66066001)(65956001)(53936002)(25786009)(110136004)(2950100002)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM3PR02MB226;H:[10.9.78.56];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTNQUjAyTUIyMjY7MjM6OFA1Nk1aVkJHeGRYQWgzY0gxRG05WHp2eEJG?= =?utf-8?B?ZDNDVkZmb1pQdjZJZkpHMXpEWWhLQ25uZnVkNVJ2R0xuaDFlMWo1YnZIOW9a?= =?utf-8?B?TWtmUzVhRlM1djlmOFNxKzlFT3ZaK0N6YklQSlQxM2svell3QktOSU5qL3Fy?= =?utf-8?B?Q1hrTUtmbW8wajg1TGhoays5M3g1L0hLVWt2MjlYbnNMQ0FmSC8yWStKWnZj?= =?utf-8?B?YkRKQlM3STI5UXl4SWQvZnVFbGNvMldjckh5UGpLUGVSN29UVmJnRnRNVzhQ?= =?utf-8?B?RmkvZkF2dGdRTE9NTnN3ZURVcm8xNDBYL3VsdWFKeXZWTVZBSTdyeHFMUnc4?= =?utf-8?B?UWNYQlVHS1FCWDB5WjlvcHdQVTYvcmdzTE45cmg2MXhaWkUrV2EvWFpBUG1I?= =?utf-8?B?d25OeEUxTVFFbVhIcXZOMTRZQ2N0VkVraTB3K1o1RU8xdWwwN3doQjBtajR5?= =?utf-8?B?d3U4d08vUHl2NXFRWnA1YWZydzBGZFBKd0ZteU9PT1NFRkVYR0VveTVVVXFL?= =?utf-8?B?SG5ndFRSL2U5VExId1Y4a0RQZUo5SmR1V2U0UW13aHpNM0NsbzBIYjBkamwy?= =?utf-8?B?Yi9LaUZVcDZKTXVCNHJXdnVkZ05wSUNoVHpHU1Jub0RvcnVDb3JiVXRFM1E1?= =?utf-8?B?S3JuWlVvVnBxdFgxVXZPTnUwWW1TT1p6SWZiTEZ5eGxncnVRemJ5dHdUdDFW?= =?utf-8?B?R3NvV0FMTkNZSGFmWE0vRWdFMlJzUFQ2bG5FZUNYRGJvd29BRk1WQ3ZyQUdj?= =?utf-8?B?bWlSVC80Z0VnY3dBcmNDcW96QysrMDFvbXlpeDRzNm1WUjlkajlxdUJ6SDBs?= =?utf-8?B?UTIyTWlBSThRRzB1cTlHb2VhZnJEK1JTc0p0QSs5TUw0MnJ3bG9DemR4WWJm?= =?utf-8?B?UUhWek5WT1cvR3ZTUGMyK2sxcGdXbkd5TXRwZ3VLS21lVmhROTZJQ1F4ZmdK?= =?utf-8?B?QW1ld2lYMkE4U0V0a0ZRMUZIWGVReTRpY3B2eHU2dDMwVVpaZngrVnVqZnVF?= =?utf-8?B?eVZwRmQ2Lzhoc0t6aXBxNCs5QmhQRzlIcUI0R2R1aU90bkZZYk1XcmlBR29k?= =?utf-8?B?akc4MHJVRy83ZjIwNlRPSlNmVElNZGE3NjVRUVY0V3NkQm5wZlNkK2RoYjBy?= =?utf-8?B?NzNKU3gxNTlHbGhTYU5ZQ05wT1hoM3hNTDVsR3Q5QW9jVmdEb1NhN1hzL1Fy?= =?utf-8?B?WUVEQ1lhY0lNOW9xcUY0L2JYQ1RIZFhQU05lbjhvSE52WFJFZDVpOWprYU43?= =?utf-8?B?NVZJZnpVT3puV2d6bDNlbEo4RkFLdXNqOWhxY3l1R3hBNngzZTFUd3g4VDVj?= =?utf-8?B?dlRDN0ZEcHR6dUo0QnZHMTk5K0c5Qi9EaFYwS0JwajhnMUFwWlZYbkprU2Zx?= =?utf-8?B?U0NPSUF2OXhaK1NoV0EyaFpvWEhoRUd1c0lEeUI3UlFIaUtaVmNlVTh1R0xa?= =?utf-8?B?YmY4WWJGclNGeGJJcW45ZC9kRXRxZHA3eUd4RldCMzJDckozUURRTzF4MDVX?= =?utf-8?B?U2dPbVNsSFpHdGFjL1c5aUNrUGE5WXVPZUVFWWxXU2E1M1N6UzZaMURBeDN5?= =?utf-8?B?Z2xGaDE0ZGY0ZWpmMm9YeVRtckFPdlVlVGNPU0NhV3JNSGpWS29tUWVtVlYz?= =?utf-8?B?a3FxeEVheCtueTh1K3hGejZYUXcrZHFyN2JjeGpqOU5MN3YrK3NabVRLbzIv?= =?utf-8?B?eTZQeUpyZUdYbGJzdm05Vy9aODl3L0k1L0p4T0o3cHVQK2IvNWd6OW1FMUxh?= =?utf-8?B?c3VXUWZNR3pKL1lBaVpGTEk5aWg2aUl3MXdVeG5JQUV6bWxiMjQyL2p3MEZZ?= =?utf-8?Q?OxJ+AHKKAlFW?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB226;6:lhwdvUdO3MqquTGNFeiS3kQovs2/w1zXU9liNJEVvmU4H/n8oxPG7U9iqNC4Ne01VRfXSYY/QR8/Nx+QL8/umfGUSZFeTmAyAwi0hlY89GzMYTK9dOrSm/rwkkLB3maPZhcf1ZV0ezpOrFm9wIFp1J47DKkNO0+yeE5Bb/3mfAf3vQtWUS1DzyFSlGGNVRaqA9JLQA6nf5V0FiRBFmWAr5No980PnE1rk0IA4YJV+Bw8LYZKS1jbr9chtIDfqOpoaZfrZOwXXLbF6tIwHTckE80+SpcyVuIYcYwdcYT3frVyDCDQgvJV7jpvusqn4sCgEMwp19XB8QGwvow6hJ5QjRMlt72o3kYT35QFMrL9n+Dr1wz71CMxgcnDe9/Ucjw/t3VSJA2Lvzk0GHOX4BXpGJPGyGFKdLQp26FS4/3yj5LnkLJcMgIh6PwEz4qdxnSEIXoa6qe/zhd+waY4DRoEv2ITJs+ljl9BoF5v5KcRU3lVPZx0hFN2IVDUzbFzLOM+zZDLsFnTbstnRFt4rjtl4Q==;5:qhXYDgKSM7bi5n2QDIu7QajG5r2cOL28GBzMmf3euzpmbfHt9/5+Yo7ABeVSlyJoeoEa6c0nFQZNGy3dkMmcCDGzZy4R0a/VjzYwLuEHE8jEXkRA3dgD2NcQItuZCz2m1SPhdsWJzgu6Ss4OBL47IQ==;24:61fGEAs4fjmrFlJMv+NvNGBzllMMMsRIYTyT1kzqoe8Hmn1wdpRSXNgV95bm5S46YS9Igc9P3UvebRnVBs9l59u42+3PJEh2GgjkJkxeLyA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB226;7:ezYPianxhGzMGTxlZnwPJZEYtRcKUno6dlbQeoFXgGgGOWZRZKyY6DTBf4ViDLEEzVAwXN9YfqDn4USgR4Ox6jh/rKaMuacYqq3akt76fI/JggSSwbr1iBKMNa9TxPAtHeaLcBDUfCvqv0pz3pnkIf64tPFR0WhwtJVpgmZ1iE4g64HSV+JfK3NehyF+N9wGCBCYlGlweOA5ODABIlcTml3Z1jbNBYhNCB8LNt+MOZ9dFZAt5xdPeL8VvZ6Fv+Gt04q9oNChH6GsTjIFF/cp92UJFk4Sdg0Zm/DHOZucGlW8/xQMOI2VPyPI1Yx2SsGDfdlENTXmKRZnAlSAN2Rvfw== X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2017 15:27:17.2688 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR02MB226 X-SW-Source: 2017-q2/txt/msg00102.txt.bz2 On 04/26/2017 04:33 PM, Mark Wielaard wrote: > On Tue, 2017-04-25 at 15:38 +0200, Ulf Hermann wrote: >>> My question is about this "initial frame". In our testcase we don't have >>> this case since the backtrace starts in a function that has some CFI. >>> But I assume you have some tests that rely on this behavior. >> >> Actually the test I provided does exercise this code. The initial >> __libc_do_syscall() frame does not have CFI. Only raise() has. You can >> check that by dropping the code for pc & 0x1. > > Maybe I am using the wrong binaries (exec and core), but for me there is > no difference. In fact, with the new binaries there is no difference. I was confused, sorry. However, if you strip .eh_frame and .eh_frame_hdr from the exe (thus triggering the fp unwinding on the first frame), you will see that it skips sigusr2. At the same time it invents another frame 0x403f40 on the main thread. Apparently pthread_join creates two stack frames. As it correctly unwinds the rest, the latter seemed harmless to me. With .eh_frame and .eh_frame_hdr: ulf@zebra:~/dev/build-elfutils/tests$ ./backtrace --core=backtrace.aarch64.fp.core -e backtrace.aarch64.fp.exec 0x400000 0x4a3000 /home/ulf/backtrace.aarch64.fp.exec 0x7fb6380000 0x7fb6381000 linux-vdso.so.1 TID 350: # 0 0x40583c raise # 1 0x401aac - 1 sigusr2 # 2 0x401ba8 - 1 stdarg # 3 0x401c04 - 1 backtracegen # 4 0x401c10 - 1 start # 5 0x402f44 - 1 start_thread # 6 0x41dc70 - 1 __clone TID 349: # 0 0x403fcc pthread_join # 1 0x401810 - 1 main # 2 0x406544 - 1 __libc_start_main # 3 0x401918 - 1 $x ./backtrace: dwfl_thread_getframes: address out of range Without .eh_frame and .eh_frame_hdr, code from PATCH V2: ulf@zebra:~/dev/build-elfutils/tests$ ./backtrace --core=backtrace.aarch64.fp.core -e backtrace.aarch64.fp.stripped 0x400000 0x4a3000 /home/ulf/backtrace.aarch64.fp.exec 0x7fb6380000 0x7fb6381000 linux-vdso.so.1 TID 350: # 0 0x40583c (null) # 1 0x401aac - 1 (null) # 2 0x401ba8 - 1 (null) # 3 0x401c04 - 1 (null) # 4 0x401c10 - 1 (null) # 5 0x402f44 - 1 (null) # 6 0x41dc70 - 1 (null) ./backtrace: dwfl_thread_getframes: address out of range TID 349: # 0 0x403fcc (null) # 1 0x403f40 - 1 (null) # 2 0x401810 - 1 (null) # 3 0x406544 - 1 (null) # 4 0x401918 - 1 (null) ./backtrace: dwfl_thread_getframes: address out of range Without .eh_frame and .eh_frame_hdr, without initial frame adjustment: ulf@zebra:~/dev/build-elfutils/tests$ ./backtrace --core=backtrace.aarch64.fp.core -e backtrace.aarch64.fp.stripped 0x400000 0x4a3000 /home/ulf/backtrace.aarch64.fp.exec 0x7fb6380000 0x7fb6381000 linux-vdso.so.1 TID 350: # 0 0x40583c (null) # 1 0x401ba8 - 1 (null) # 2 0x401c04 - 1 (null) # 3 0x401c10 - 1 (null) # 4 0x402f44 - 1 (null) # 5 0x41dc70 - 1 (null) ./backtrace: dwfl_thread_getframes: address out of range TID 349: # 0 0x403fcc (null) # 1 0x401810 - 1 (null) # 2 0x406544 - 1 (null) # 3 0x401918 - 1 (null) ./backtrace: dwfl_thread_getframes: address out of range You have to drop all the asserts from backtrace.c to actually test this: diff --git a/tests/backtrace.c b/tests/backtrace.c index 1ff6353..a910a77 100644 --- a/tests/backtrace.c +++ b/tests/backtrace.c @@ -71,14 +71,14 @@ static void callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, const char *symname, Dwfl *dwfl) { - static bool seen_main = false; +// static bool seen_main = false; if (symname && *symname == '.') symname++; - if (symname && strcmp (symname, "main") == 0) - seen_main = true; +// if (symname && strcmp (symname, "main") == 0) +// seen_main = true; if (pc == 0) { - assert (seen_main); +// assert (seen_main); return; } if (check_tid == 0) @@ -103,11 +103,11 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, && (strcmp (symname, "__kernel_vsyscall") == 0 || strcmp (symname, "__libc_do_syscall") == 0)) reduce_frameno = true; - else - assert (symname && strcmp (symname, "raise") == 0); +// else +// assert (symname && strcmp (symname, "raise") == 0); break; case 1: - assert (symname != NULL && strcmp (symname, "sigusr2") == 0); +// assert (symname != NULL && strcmp (symname, "sigusr2") == 0); break; case 2: // x86_64 only /* __restore_rt - glibc maybe does not have to have this symbol. */ @@ -125,11 +125,11 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, } /* FALLTHRU */ case 4: - assert (symname != NULL && strcmp (symname, "stdarg") == 0); +// assert (symname != NULL && strcmp (symname, "stdarg") == 0); break; case 5: /* Verify we trapped on the very last instruction of child. */ - assert (symname != NULL && strcmp (symname, "backtracegen") == 0); +// assert (symname != NULL && strcmp (symname, "backtracegen") == 0); mod = dwfl_addrmodule (dwfl, pc); if (mod) symname2 = dwfl_module_addrname (mod, pc);