From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 77861 invoked by alias); 25 Apr 2017 13:38:29 -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 77817 invoked by uid 89); 25 Apr 2017 13:38:28 -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=-2.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Lastly, dig, H*r:sk:EUR01-V, H*r:104.47.1 X-Spam-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,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-VE1-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=vSkRZnmbPeQEuHm++xjD7HAKNtdEpgBOMVCnnef+byo=; b=XQTUVWcwDRqs8ErsjnNnreRDEOBfHubLj4R0oSMqU+PqieIFwH2YAztpQUf8JxbWMz+I1o9VLdBhYeJTCbMRtkvvOLFoMPHxR4QKfGe8ySMbenoN4w4n7ZCLrKbJJn1v4l1INYLkA4qCeJhENakjbujyNV2U944ys8oPt0jG6sA= 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> From: Ulf Hermann Message-ID: <3b0d6718-cf17-9ae1-b5f7-8c6413b8d3d2@qt.io> Date: Tue, 25 Apr 2017 22:23: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: <1493125881.31726.44.camel@klomp.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: DB6PR0902CA0029.eurprd09.prod.outlook.com (2603:10a6:6:2::42) To AMSPR02MB230.eurprd02.prod.outlook.com (2a01:111:e400:8022::17) X-MS-Office365-Filtering-Correlation-Id: a95acbcd-46b0-4efd-7dac-08d48be05984 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AMSPR02MB230; X-Microsoft-Exchange-Diagnostics: 1;AMSPR02MB230;3:eLzYBCInW5ts96nT9I4ZhnZxWxbKGTvPlJRHHzr8H8T07HwesYLQT93pTsdcQ5zJzgbRYe1ezCsJkjbMqjKGPjdoAh59Yw1fLKuYLxOqcFfkxYWx3SetrLsCmAKPTL/Q3UjzFKD79HI+Tu+8cMWhx/ZD3jouLj8mIvQzHsd4nuIEptQX/LmALjxFEIE4sm6UNiwwTWMRqQHB00M6rAjL/0krzKxYva65atH3MhdTHg1YV7+rBHigbrBdERBEag/61OHFdNhvCVW++EqUa4ILHYP2R+LNxn4KJGg4ie8v5ABc9UTm7FHQ45vFQ8MeV691GrAXIXuvkxFOtpXHegYScw==;25:xzqHVS33iIa3GG/h0orB8gSooDizOpGU7Ciwmvf3OCLd/UMyn+9VTIar4yttRZPhS66MtAxG824NFqayl1RDg8Kk1hYJvp4I8LDzRuY1qTzVcCKzwRzZfNgeXjdYakE4RI6eMcDptcw8Z4akeGtYY1n7lkjdTwD6SrXq1p2fbnZYh++8AEDpxtWQ7/OEV2HES8cT+PtoiqHZlbM7jzMUAGCIHJhZIIt1do4UoLAAbGLaaiwDXt21S1G0HpJ314IY/douWnvNk9Au8eEtUqFE5qh4zZkSlfqQ2E1t6tvZ+dJ3fWP4oq0MmHH1eGPZc/4mrnf82BLTVWoIT/Aym+08cLZQbTKsw9QkBB9Z/pvSPQ8AOUYAoYYpsCavnZgE74GwKnXR54jI0qoFx1johYGUg6Oyru7yaLAUT1TpzPO2QXVzFqg/8ffukH3FGHFZNct1QLiVzTLfWnhiW1J9PgZxgw== X-Microsoft-Exchange-Diagnostics: 1;AMSPR02MB230;31:Y1HWmxfsBaaCvfRhgDI16fYcH80j4tPQh3cHTfxwzS99MXJAyfgWi0FI/yefnWpXfPTmGww+AzuNNE+22RGlznyX5NmRjxiA9T7Hadtl4yctwgo6oCeN5WsRWEuUtgJiKX7KWbdOd4GQTJtutamb4U8kDhdVbJpGOD/0kLVSuLCl4NEKyNMgtFbu5a24QNBd/ui4qQ1Gytd9BxYMSn6Py17DA5mNNIg1QPt5jwSzsFJ7EsKQe+ZT1ksNkysq3NVouxt3np5JwEczINcPLJkxiw==;20:y76WgOdoNTuKbI2xvFWiXSjDAPha/+utwalkzK3WYxIQq8tRWEk5MKnIFG7LQxOJ871ZpG0KGX5q9APILcuxGcazqFn1WfxV3lMlXYlj6VOjuFJBarCfvOKL1H6Iw9HDfXJVmzOPiLPbLNhxry4XO5VM/NASnPcRAswLm+WBEyUur3rxgwUBQaQNHzhJsoneXAdaQw3OmwQ2dnXJig6Epg6JwBgOhahxoguxXudIE6dv8e93SANAVn0HokKSQZ/3 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)(93006095)(93001095)(3002001)(6041248)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(6072148);SRVR:AMSPR02MB230;BCL:0;PCL:0;RULEID:;SRVR:AMSPR02MB230; X-Microsoft-Exchange-Diagnostics: 1;AMSPR02MB230;4:2ht41B9jq1exrDrMkKQ3S06aLR0AZMVZ0w7a2H3LFbjau22rdBoo9BlJ36Jv224UoVOkhNR3OO9YcKjZ8lGZIacxH9F1/F4edJcFelQSMx0SZP6/MUu7K4F1SOb6qlBsQpKVnu+qPsrhUBzdzlHZi/Dmy/yPPBtc0JL60Y/tfhhGuJ+XU9qC3tDWnkKn/6gqgTSmiTAXPz33O+hd+tpm/sxcXljogfSsdLaOfSyJyegJN6ZGney2gxYFa+rR9vUldBReXqzH6PpMBg1ijywFq2GbYb/MiOQbEVQGUwbStG/g81TvaiB6tMhqMFNyCdbJO9PfWNQdgfWRKhfHDmrcbHMIVbvuiZOLfwcv1fiKXc7agjTkNiBPPOQZYfdUEQ0O4kqRI4JR1/MXu0ywPQroR3UEr354JR6GqTk9/WQQcNBlOBpnG0DZda6fDcECCcCJz6zCeH8xHQA5t6SnaRWcuqwh72WmVnNhxeXnHfxEsya/6UnUQ1+Kfu0veOEkFnRAukjI5YiTCt2kWmbOXjix0QIxpSz/MhtQzrRXPgZM/47fE90qBUr6KwpixinIsJs1++YLxTm1Q78gpjFG0LR+TGQxJUgAyA4rN2jKJwtnlJwlg+qzlMybYsY7w+yWPPTvngqWe074s5L2ORWzYIOdEtA8f+VrKbPvdmm4R0wfiNTXFlHGBblGYcUVknPruOW2M9hFHLmvR4TFk6m76PvJug== X-Forefront-PRVS: 0288CD37D9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39400400002)(39450400003)(39830400002)(39410400002)(50986999)(53936002)(31686004)(76176999)(54356999)(50466002)(6486002)(42186005)(64126003)(77096006)(7736002)(65826007)(86362001)(4001350100001)(2906002)(93886004)(230700001)(305945005)(33646002)(25786009)(5660300001)(189998001)(36756003)(83506001)(6116002)(47776003)(23676002)(3846002)(65806001)(65956001)(2950100002)(66066001)(31696002)(6246003)(74482002)(229853002)(38730400002)(8676002)(81166006);DIR:OUT;SFP:1102;SCL:1;SRVR:AMSPR02MB230;H:[10.9.78.56];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTVNQUjAyTUIyMzA7MjM6OWZFSkdxOWtDa3duY3Jwc2FOQmJqcFgxZi9l?= =?utf-8?B?SDlzdENncmtZOFF2RTJmQzVRM21HZkZZQktISEVLYzVGY1J3OUtHM3lwTDAr?= =?utf-8?B?RFROblBHbnc4ejFONUNrMTE4ZGpubXdHcTI5TkFkaVpQTjBMam1ZRUdrZFc0?= =?utf-8?B?Z1NVYkt4N0h3WTY2bm4xczJIL1R2elRRQnltWXhUNW9kMGdUNWVkVThGUHhX?= =?utf-8?B?YmpoSHhDVGtWWmpaL01vUGNyOHFkZ2ZRY09KRHpUNE4yTFY1MHV6WXI5bmVM?= =?utf-8?B?Vk5pSkpBR3ZTb3ZKM1E4L2lFWFlqWjJ2WlFJaDlyTFVoSGRTbk1TRWZlZFpU?= =?utf-8?B?akd6c2VscDVUTnEyZnJvU0xncUZWTGlKMHQzRDg3OWNvMnRsK3ZLTUYxMzBl?= =?utf-8?B?alZBU1p3RXArNDhCU0J2QlRsQm9BUVR5VU9XY1lLcGhUZ2tmaHY2c1pndU0v?= =?utf-8?B?c2JhK0dKNVhzSEFSV093UTlpdmxvNG1neW50NW9ITTJkTkgrLzhVbFRKOGRU?= =?utf-8?B?dnp3OEppbU5kNHpGVUlMSzlRL2R5OU1zWlc0SFJIY29jUnh0Sk9DT3VuT0dX?= =?utf-8?B?K08xaFJJMFdxTzNjaS9VTHZoRHRXdXQ3L0FEbXF1Y3d0NDhBVEg4bWt1aWFj?= =?utf-8?B?NHpsSExVMWpsc1poRGhxM2RKT0x0N2tXRG5iMFVseWN2Ti9aSmw3VEpIaDFo?= =?utf-8?B?ZU1uWnJwcmtGWS9qeUhNUjhiNHFCcFVEdzRvQWwrRENjOFpYR3BVdjlwTmtX?= =?utf-8?B?V3NCM0ROM2FjdWUrYjdwWk1DN1pYcndBMXc0ZU9uNWhUUy9CNjREeFdkNWs5?= =?utf-8?B?bVM3dzR3dGhaS1ZVdnNWejRaV3VKSk9mRjNQS3NYOWtXS0V5QU1UcWpqVS8r?= =?utf-8?B?SjNEcGNwb2lKcGp0bmM3L0pobjdPMG1mR2xDYTBzTXZGUEhZNFNRcXZaUkRr?= =?utf-8?B?M0FnaFc4WTFHallibjR0eEdLNVZBVFlBN0pQeVJ2QTB6VVhkWllWZkZhcFA2?= =?utf-8?B?MFRzdUdCY0haSklmTCtpNlhlZVVIOUFvWjJXTTFwT082Z2Nad1Z5VXU0MU1O?= =?utf-8?B?aVRGM3N6L2gvaEc2ODVZUDJ3SUR4V1pObFh1SkxGcHFHamVWVm1zZXd4RU1m?= =?utf-8?B?NFJHU2NrejJYOVczejJ5TTRzMnZWUTNkZm1adVI3a0Q0TEhkSGpDK1o4eVdY?= =?utf-8?B?Z3VYTEUvWCtWczBtdFdiYllidm9UZVNwYXRLVDYwOHV0T2RVNmdwSHBRZ3RF?= =?utf-8?B?ZVRCRmJ4RnhiOEFLQm1TM1JwaDFvOTQrSmQ2TE9SSGlDUldVWWpUZnljM0JK?= =?utf-8?B?RnVLZEs3Rk9xTm9GRFhoaHNuTk41aDlFcVJsTXFqU3piUS9FdWtERGJHM1o1?= =?utf-8?B?Z25LOVFSMVdHTDJxQThTdGkvKzBuaTdmVHdTb2FhU3BiUTNjZmF0NFBFTTNX?= =?utf-8?B?SWJZOWxXZ043SVVCNGlnWmx2eTRiVFN4L3pDN0UvRXA2MDVYSk16MGRVNGNI?= =?utf-8?B?WjhYcWxSSEdDaW9iTDVTbVE5UG5aWWNqNGZtRldvME90bnVHUlhDMTFmaEFx?= =?utf-8?B?Rmc4YnpKTmJMTGhIV3BRQTUrRTZWZz09?= X-Microsoft-Exchange-Diagnostics: 1;AMSPR02MB230;6:uvRGpzSXKnAi13G7Evp4nD5Gtqrs6RkDtyqGJdofoDXa4zWcsVRHgoJsr0YI39lVFWjIsLwT0O2mYnxS8ZJW+UwABMKkaQs1/spw/T2KyU3Fi2n+2AsnS5uAos9lSyAEAI4ZQrMZUgNCZHCjcmtBi9p55aGdjOPRcWxpW94LghTX5bGjEzhE/nYMbx4WngQnKAPOP385JHbldNaiMYU0FJtNROPkKBowLNO/xP+MZpRjAeVUZobWlqnqB2WbVR/EdI/NOiwGfrqlYtEyAWdYexl3mpJx0oXAnk+WQJFXGPOGYx0zxyE3812z0/eVdUEdybfgDqFS/KjBi1A//q9Qun6TRquAs36tuEfnlrMwglEO2TSry11fCXItzMh+JSCtvphQJosAP44FbLsekoTIL+eE9lDXWWb8pyBZESxJT8WU4KMHXmnKc6YILhaiedTh/3p0pRLIWyMOiRpmLK94jLzBc1bJJDCL3XSsfvpwUBW3pNUqKLhY/Mvsr1YkPShF3gpKipdvjsyKIXgfDY3CXw==;5:CsHesh19L6GzsEoXit95JrZRz/saHAHPNHOD4FUibNi0Vwm+4C7EB3MDEN+UC6V2IYbN3JuisxJ75shN+nEi/xB67iRbmvY0AuzuPhYC3FupY/qYhdGzKp8gs6rRNt1xneyuiJsmdku3UvT/di9Z9w==;24:fcElUxhqfAmnQofOf9YGrROYVkvtMRnkt956DzZxzvsb0Kug/cFdQ98ax4uDQTGCpDxhtUz/PziRMvyiQgYm/cx/1LNFmwyrBic+G2ruzkg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AMSPR02MB230;7:BVixgF2g098vERZrad/MUUy8W+ytybI6pzGJa8MjA8qo5YYrbhCNSi3oILb70S2Xvl5sfs1a1OQBbhSHPIlOczP3iacTRdslRfBFuDT+n12VR2C1t2kMTlKswMuvDjmHHcVQ/9xOU2ebL7OlD6lCYp+Pt1/qtpgeIIB/igFQubML2EBRgccdStZZe1n4W6xd+QodWWviLkJKzX6Z3/30yxPKjPdx09x4QmG334Vi7k/A3UEAYTsNWUVd0mQh+wIRtxNwJl4l3Vg/BceKTxDifvAlOujVdEEkEfRTwKySsgctJG65RrSNoSRasXq5hzE5r74TwslxilOXVt8Q6KSTGg== X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2017 13:38:25.4721 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR02MB230 X-SW-Source: 2017-q2/txt/msg00092.txt.bz2 > 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. > The first question is how/why the (pc & 0x1) == 0 check works? > Why is that the correct check? > > Secondly, if it really is the initial (or signal frame) we are after, > should we pass in into bool *signal_framep argument. Currently we don't We have this piece of code in __libdwfl_frame_unwind, in frame_unwind.c: if (! state->initial_frame && ! state->signal_frame) pc--; AArch64 has a fixed instruction width of 32bit. So, normally the pc is aligned to 4 bytes. Except if we decrement it, then we are guaranteed to have an odd number, which we can then test to see if the frame in question is the initial or a signal frame. Of course it would be nicer to pass this information directly, but the signal_frame parameter is supposed to be an output parameter. After all we do the following after calling ebl_unwind(): state->unwound->signal_frame = signal_frame; > Lastly could you instead of returning the frame itself with just the pc > adjusted do that directly? > > if ((pc & 0x1) == 0) > lr = lr & (~0x1); If I dig up the first frame after the initial one from the stack, then we drop whatever we initially had in LR. Apparently, on aarch64 PC is always one frame "ahead" of the other registers. To establish that, we have to set PC to the value of LR on the initial frame, without actually unwinding. br, Ulf