> On 3 Mar 2021, at 14:37, Jessica Clarke <jrt...@freebsd.org> wrote: > > On 3 Mar 2021, at 14:29, Jessica Clarke <jrt...@freebsd.org > <mailto:jrt...@freebsd.org>> wrote: >> On 3 Mar 2021, at 14:26, Andrew Turner <and...@freebsd.org> wrote: >>> >>> The branch main has been updated by andrew: >>> >>> URL: >>> https://cgit.FreeBSD.org/src/commit/?id=28d945204ea1014d7de6906af8470ed8b3311335 >>> >>> commit 28d945204ea1014d7de6906af8470ed8b3311335 >>> Author: Andrew Turner <and...@freebsd.org> >>> AuthorDate: 2021-01-13 11:08:19 +0000 >>> Commit: Andrew Turner <and...@freebsd.org> >>> CommitDate: 2021-03-03 14:18:03 +0000 >>> >>> Handle functions that use a nop in the arm64 fbt >>> >>> To trace leaf asm functions we can insert a single nop instruction as >>> the first instruction in a function and trigger off this. >>> >>> 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(-) >>> >>> 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 @@ >>> >>> #define _C_LABEL(x) x >>> >>> +#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) >> >> Doesn't this mean ENTRY incorrectly also has the nop? > > 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?
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’t have the needed instructions to manage the stack frame as they don’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. Andrew _______________________________________________ dev-commits-src-main@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"