From owner-dev-commits-src-all@freebsd.org Wed Mar 3 15:09:11 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B556756D3AB; Wed, 3 Mar 2021 15:09:11 +0000 (UTC) (envelope-from andrew@freebsd.org) Received: from fry.fubar.geek.nz (fry.fubar.geek.nz [139.59.165.16]) by mx1.freebsd.org (Postfix) with ESMTP id 4DrHTM47jfz3t2y; Wed, 3 Mar 2021 15:09:11 +0000 (UTC) (envelope-from andrew@freebsd.org) Received: from [192.168.42.21] (cpc91232-cmbg18-2-0-cust554.5-4.cable.virginm.net [82.2.126.43]) by fry.fubar.geek.nz (Postfix) with ESMTPSA id 7A8BC4E716; Wed, 3 Mar 2021 15:09:10 +0000 (UTC) From: Andrew Turner Message-Id: <9D7C6FED-2B65-4219-9B1E-4BAF5AC5CEC8@freebsd.org> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.17\)) Subject: Re: git: 28d945204ea1 - main - Handle functions that use a nop in the arm64 fbt Date: Wed, 3 Mar 2021 15:09:09 +0000 In-Reply-To: <8B945F5B-AC79-47E6-98D9-16762D3DBBF5@freebsd.org> Cc: "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" To: Jessica Clarke References: <202103031426.123EQoM5082920@gitrepo.freebsd.org> <8B945F5B-AC79-47E6-98D9-16762D3DBBF5@freebsd.org> X-Mailer: Apple Mail (2.3445.104.17) X-Rspamd-Queue-Id: 4DrHTM47jfz3t2y X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.34 X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Mar 2021 15:09:11 -0000 > On 3 Mar 2021, at 14:59, Jessica Clarke wrote: >=20 > On 3 Mar 2021, at 14:55, Andrew Turner > wrote: >>=20 >>> On 3 Mar 2021, at 14:37, Jessica Clarke wrote: >>>=20 >>> On 3 Mar 2021, at 14:29, Jessica Clarke wrote: >>>> On 3 Mar 2021, at 14:26, Andrew Turner wrote: >>>>>=20 >>>>> The branch main has been updated by andrew: >>>>>=20 >>>>> URL: = https://cgit.FreeBSD.org/src/commit/?id=3D28d945204ea1014d7de6906af8470ed8= b3311335 >>>>>=20 >>>>> commit 28d945204ea1014d7de6906af8470ed8b3311335 >>>>> Author: Andrew Turner >>>>> AuthorDate: 2021-01-13 11:08:19 +0000 >>>>> Commit: Andrew Turner >>>>> CommitDate: 2021-03-03 14:18:03 +0000 >>>>>=20 >>>>> Handle functions that use a nop in the arm64 fbt >>>>>=20 >>>>> To trace leaf asm functions we can insert a single nop instruction = as >>>>> the first instruction in a function and trigger off this. >>>>>=20 >>>>> Reviewed by: gnn >>>>> Sponsored by: Innovate UK >>>>> Differential Revision: https://reviews.freebsd.org/D28132 >>>>> --- >>>>> sys/arm64/include/asm.h | 8 +++- >>>>> .../contrib/opensolaris/uts/common/sys/dtrace.h | 2 + >>>>> sys/cddl/dev/dtrace/aarch64/dtrace_subr.c | 5 +++ >>>>> sys/cddl/dev/fbt/aarch64/fbt_isa.c | 51 = ++++++++++++++-------- >>>>> 4 files changed, 46 insertions(+), 20 deletions(-) >>>>>=20 >>>>> diff --git a/sys/arm64/include/asm.h b/sys/arm64/include/asm.h >>>>> index 05e618500e59..32b79d256e80 100644 >>>>> --- a/sys/arm64/include/asm.h >>>>> +++ b/sys/arm64/include/asm.h >>>>> @@ -38,9 +38,15 @@ >>>>>=20 >>>>> #define _C_LABEL(x) x >>>>>=20 >>>>> +#ifdef KDTRACE_HOOKS >>>>> +#define DTRACE_NOP nop >>>>> +#else >>>>> +#define DTRACE_NOP >>>>> +#endif >>>>> + >>>>> #define LENTRY(sym) = \ >>>>> .text; .align 2; .type sym,#function; sym: \ >>>>> - .cfi_startproc >>>>> + .cfi_startproc; DTRACE_NOP >>>>> #define ENTRY(sym) = \ >>>>> .globl sym; LENTRY(sym) >>>>=20 >>>> Doesn't this mean ENTRY incorrectly also has the nop? >>>=20 >>> Hm, right, the L in LENTRY means local not leaf. Isn't this a = problem >>> though? (L)ENTRY are perfectly legal to use for non-leaf assembly >>> functions today. Shouldn't there be separate ones specifically for = leaf >>> functions if you want to treat them differently? >>=20 >> Other than early boot handling, pmap_switch, and the exception = handlers I think we only have a few non-leaf asm functions on arm64. The = only ones I can think of use tail recursion, e.g. memmove -> memcpy when = possible. Other than exception handlers these functions don=E2=80=99t = have the needed instructions to manage the stack frame as they don=E2=80=99= t use any stack space. I decided it was easier to add the nop = instruction to the start of function than try to create an unneeded = stack frame. >=20 > I don't contest that. My problem is that there is now a hidden > requirement that (L)ENTRY only be used for leaf functions lest you get > broken FBT for them. That is a surprising restriction, which to me > should be indicated by having a different macro name from the generic > (L)ENTRY shared across most (all?) ports. Despite its flaws, MIPS does > have special LEAF macros that are distinct from the others. Why would you get broken FBT? All it cares about is finding an = instruction it can emulate and replace it with a specific breakpoint. In = a non-leaf asm function we will place a nop as the first instruction = followed by the standard stack frame manipulation instructions. In this = case the nop is unneeded, but should add minimal overhead if such a = function is added. I only mentioned leaf functions in the commit message as an example of = something that we may not have previously been able to trace due to a = lack of stack usage. Andrew=