Date: Fri, 25 Oct 2019 11:38:03 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Nick Kostirya <nikolay.kostirya@i11.co> Cc: freebsd-arm@freebsd.org Subject: Re: ucontext Message-ID: <20191025083803.GD73312@kib.kiev.ua> In-Reply-To: <20191025104421.012c1e5e@i11.co> References: <20191024141133.04fb0693@i11.co> <20191024145436.GX73312@kib.kiev.ua> <20191025104421.012c1e5e@i11.co>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Oct 25, 2019 at 10:44:21AM +0300, Nick Kostirya wrote: > On Thu, 24 Oct 2019 17:54:36 +0300 > Konstantin Belousov <kostikbel@gmail.com> wrote: > > > > > I believe you want > > uc_context.__gregs[_REG_PC] > > on arm (32bit) and > > uc_context.mc_gpregs.gp_elr > > on arm64 for aarch64. > > > > Sometimes the thumb bit (lowest bit in PC) leaks there, then you should > > mask it. > > Thanks! > > Although I did not understand your last phrase. > There is leak of what? Leak of the thumb bit. ARM ARM specifies that in non-thumb mode, pc must be word-aligned, in thumb it is half-word aligned. A way to enter thumb mode is to execute BX or BLX instruction with the lowest bit of the target PC set to 1. Sometimes you might get pc with the bit 0 set, which should be masked out then. This is a bigger issue for unwinders than for simple profilers. > Where can I read about it? ARM ARM (ARM architecture reference manual), available from arm.com. Or Google for it.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20191025083803.GD73312>