From owner-freebsd-arm@freebsd.org Wed Feb 8 01:42:40 2017 Return-Path: Delivered-To: freebsd-arm@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 16211CD4AFA for ; Wed, 8 Feb 2017 01:42:40 +0000 (UTC) (envelope-from freebsdml@marino.st) Received: from shepard.synsport.com (mail.synsport.com [208.69.230.148]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E76BF14A6 for ; Wed, 8 Feb 2017 01:42:39 +0000 (UTC) (envelope-from freebsdml@marino.st) Received: from [127.0.0.1] (ip72-204-83-236.fv.ks.cox.net [72.204.83.236]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by shepard.synsport.com (Postfix) with ESMTP id 53F6243BBC; Tue, 7 Feb 2017 19:40:54 -0600 (CST) Subject: Re: ARM64: PC/IP not saved in signal frame To: Andrew Turner References: <530c18cd-d50d-4709-a0ca-22324a0cb592@marino.st> <86279411-3979-edab-7ba2-4a1e3fa6429e@marino.st> <20170207190622.1a7a3673@zapp> Cc: freebsd-arm@freebsd.org, Andreas Tobler From: John Marino Message-ID: Date: Tue, 7 Feb 2017 19:42:33 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: <20170207190622.1a7a3673@zapp> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Antivirus: avast! (VPS 170206-3, 02/06/2017), Outbound message X-Antivirus-Status: Clean X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Feb 2017 01:42:40 -0000 On 2/7/2017 13:06, Andrew Turner wrote: > On Tue, 7 Feb 2017 12:55:51 -0600 > John Marino wrote: > >> On 2/7/2017 12:47, John Marino wrote: >>> Hi guys, >>> I've been struggling to provide unwind support on the >>> aarch64-*-freebsd* target of FreeBSD. The only working example on >>> this arch is aarch64-linux (attached). I think I'm 99% done with >>> the freebsd version (attached) but the last value that needs to be >>> pass to the _Unwind_FrameState is the program counter offset. >>> >>> I know the PC is not register-based on aarch64. Linux still saves >>> the value in the signal context, but AFAICT FreeBSD does not. >>> >>> Can somebody >>> A) confirm that the program counter is missing from the saved signal >>> context >>> B) confirm that it needs to be added for proper signal frame >>> unwinding? >>> >>> Alternatively, maybe somebody can figure out a solution given the >>> current freebsd structures, but I'm losing hope on that one. (line >>> 99) >> >> Apparently attachments are stripped out on this mail list. >> You can see the headers here: >> https://leaf.dragonflybsd.org/~marino/linux-unwind.h >> https://leaf.dragonflybsd.org/~marino/freebsd-unwind.h > > You want sc->REG_NAME(elr). > Hi Andrew, After changing the .how field to REG_SAVED_OFFSET (from the original REG_SAVED_VAL_OFFSET) on the retaddr column, it worked! I didn't expect that though. Is linux just using a misnomer? That is, is it referring to the Exception Link Register as the PC? I'm just trying to understand what happened and how you knew the correct answer. :) John