* Michael Davidson <m...@google.com> wrote: > Use the standard regparm=0 calling convention for memcpy and > memset when building with clang. > > This is a work around for a long standing clang bug > (see https://llvm.org/bugs/show_bug.cgi?id=3997) where > clang always uses the standard regparm=0 calling convention > for any implcit calls to memcpy and memset that it generates > (eg for structure assignments and initialization) even if an > alternate calling convention such as regparm=3 has been specified. > > Signed-off-by: Michael Davidson <m...@google.com> > --- > arch/x86/boot/copy.S | 15 +++++++++++++-- > arch/x86/boot/string.h | 13 +++++++++++++ > 2 files changed, 26 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/boot/copy.S b/arch/x86/boot/copy.S > index 1eb7d298b47d..57142d1ad0d2 100644 > --- a/arch/x86/boot/copy.S > +++ b/arch/x86/boot/copy.S > @@ -18,6 +18,12 @@ > .text > > GLOBAL(memcpy) > +#ifdef __clang__ /* Use normal ABI calling conventions */ > + movw 4(%esp), %ax > + movw 8(%esp), %dx > + movw 12(%esp), %cx > +#endif > +_memcpy: > pushw %si > pushw %di > movw %ax, %di > @@ -34,6 +40,11 @@ GLOBAL(memcpy) > ENDPROC(memcpy) > > GLOBAL(memset) > +#ifdef __clang__ /* Use normal ABI calling conventions */ > + movw 4(%esp), %ax > + movw 8(%esp), %dx > + movw 12(%esp), %cx > +#endif
I don't think we want to add such ugly workarounds for clang bugs in a piecemail wise manner. If this was the _only_ workaround required to have a working kernel built with clang then maybe, but there's no way to tell from this submission. Thanks, Ingo