From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 102912 invoked by alias); 1 Aug 2018 15:49:04 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 102889 invoked by uid 89); 1 Aug 2018 15:49:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=alfedotovgmailcom, alfedotov@gmail.com, H*i:sk:AhY1JB_, CFI X-HELO: foss.arm.com Received: from usa-sjc-mx-foss1.foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 01 Aug 2018 15:49:02 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 214A280D; Wed, 1 Aug 2018 08:49:01 -0700 (PDT) Received: from e120077-lin.cambridge.arm.com (e120077-lin.cambridge.arm.com [10.2.207.74]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 57D443F5D0; Wed, 1 Aug 2018 08:49:00 -0700 (PDT) Subject: Re: AArch64 calling convention in assembly code To: Alexander Fedotov , newlib@sourceware.org Cc: gdb@sourceware.org References: From: "Richard Earnshaw (lists)" Openpgp: preference=signencrypt Message-ID: Date: Wed, 01 Aug 2018 15:49:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2018-08/txt/msg00006.txt.bz2 On 01/08/18 14:28, Alexander Fedotov wrote: >>> Pushing LR on the stack resolves a problem > FP of course, not LR. > So the correct code must be like this: > > _cpu_init_hook: > stp x29, x30, [sp, #-16]! > mov x29, sp > bl _init_vectors > bl _flat_map > ldp x29, x30, [sp], #16 > ret > > But still my point is that GDB should catch such an error and do not hang. > > Alex > > On Tue, Jul 31, 2018 at 9:34 PM, Alexander Fedotov wrote: >> Hello dear AArch64 maintainers >> Please look into code snippet below from newlib/libgloss/aarch64/rdimon-aem-el3. >> >> Seems to me this code violates AArch64 calling convention and actually >> breaks debugging in GDB. GDB tries to unwind call stack and got >> endless reentrancy... >> >> FUNCTION (_cpu_init_hook): >> sub sp, sp, #16 >> str x30, [sp, xzr] >> bl _init_vectors >> bl _flat_map >> ldr x30, [sp, xzr] >> add sp, sp, #16 >> ret >> >> >> We have couple of calls there (_init_vectors, _flat_map). If you'll >> try to step into any subroutine you will found that GDB hangs and >> can't step anymore. >> >> Pushing LR on the stack resolves a problem. X30 is LR. All we really need is a CFI unwind record that GDB can understand. R. >> >> So my message is that: >> 1. Current code in _cpu_init_hook is incorrect >> 2. GDB should handle this and do not hang >> >> Alex > > >