On 3 Mar 2021, at 14:55, Andrew Turner <and...@freebsd.org> wrote:
> 
>> 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> 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.

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.

Jess

_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to