On Mon, 17 Apr 2023 at 21:52, Leif Lindholm <quic_llind...@quicinc.com> wrote:
>
> Hi Marvin,
>
> First of all - many thanks for tracking down the bug that creates the
> need for this.
>
> On Mon, Apr 17, 2023 at 18:09:15 +0000, Marvin Häuser wrote:
> > With the current ASM_FUNC() macro, there is no good way to declare an
> > alignment constraint for a function. As ASM_FUNC() switches sections,
> > declaring the constraint before the macro invocation applies it to the
> > current location in the previous section. Declaring the constraint after
> > the macro invocation lets the function label point to the location prior
> > to alignment. Depending on toolchain behaviour, this may cause the label
> > to point to alignment padding preceding the actual function definition.
> >
> > To address these issues, introduce the ASM_FUNC_ALIGN() macro, which
> > declares the alignment constraint right before the function label.
> >
> > Signed-off-by: Marvin Häuser <mhaeu...@posteo.de>
> > Cc: Leif Lindholm <quic_llind...@quicinc.com>
> > Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>
> > Cc: Sami Mujawar <sami.muja...@arm.com>
> > Cc: Vitaly Cheptsov <vit9...@protonmail.com>
> > ---
> >  ArmPkg/Include/AsmMacroIoLibV8.h | 22 ++++++++++++++++++----
> >  1 file changed, 18 insertions(+), 4 deletions(-)
> >
> > diff --git a/ArmPkg/Include/AsmMacroIoLibV8.h 
> > b/ArmPkg/Include/AsmMacroIoLibV8.h
> > index 135aaeca5d0b..919edc70384d 100644
> > --- a/ArmPkg/Include/AsmMacroIoLibV8.h
> > +++ b/ArmPkg/Include/AsmMacroIoLibV8.h
> > @@ -34,15 +34,29 @@
> >          cbnz   SAFE_XREG, 1f        ;\
> >          b      .                    ;// We should never get here
> >
> > -#define _ASM_FUNC(Name, Section)    \
> > -  .global   Name                  ; \
> > -  .section  #Section, "ax"        ; \
> > -  .type     Name, %function       ; \
> > +#define _ASM_FUNC_HDR(Name, Section) \
> > +  .global   Name                   ; \
> > +  .section  #Section, "ax"         ; \
> > +  .type     Name, %function
> > +
> > +#define _ASM_FUNC_FTR(Name)         \
> >    Name:                           ; \
> >    AARCH64_BTI(c)
> >
> > +#define _ASM_FUNC(Name, Section)    \
> > +  _ASM_FUNC_HDR(Name, Section)    ; \
> > +  _ASM_FUNC_FTR(Name)
> > +
> > +#define _ASM_FUNC_ALIGN(Name, Section, Align)       \
>
> I like this solution, but I'd like to hear Ard's opinion.
>
> I probably want to bikeshed some of the implementation details:
> Although I generally dislike duplicate definitions, I think I would
> prefer having _ASM_FUNC and _ASM_FUNC_ALIGN defined self-contained,
> without _HDR and _FTR.
> If we do keep the reused primitives, we need better language; the
> footer of the header is not a footer of the function.
>

Agree with all of this.

And thanks for tracking this down - must not have been fun :-)


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103121): https://edk2.groups.io/g/devel/message/103121
Mute This Topic: https://groups.io/mt/98325898/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to