Messages in this thread | | | From | Geert Uytterhoeven <> | Date | Wed, 4 Sep 2019 13:53:55 +0200 | Subject | Re: objtool warning "uses BP as a scratch register" with clang-9 |
| |
Hi Linus,
On Thu, Aug 29, 2019 at 8:31 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Thu, Aug 29, 2019 at 10:35 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote: > > > > Peter suggested to try WRITE_ONCE for the two zero writes to see if that > > "fixes" it. > > I'm sure it "fixes" it. > > .. and then where else will we hit this? > > It's one thing to turn a structure zeroing into "memset()", but some > places really can't do it. > > We use "-ffreestanding" in some places to make sure that gcc doesn't > start calling random libc routines. I wonder if we need to make it a > general rule that it's done unconditionally. > > Sadly, I think that ends up also disabling things like > "__builtin_memcpy()" and friends. Which we _do_ want to have access > to, because then gcc can inline the memcpy() when we _do_ use > memcpy(). > > We used to do all of those heuristics by hand, but wanted to let the > compiler do them for us. > > So: > > - we do want "memcpy()" to become "__builtin_memcpy()" which can then > be optimized to either individual inlined assignments _or_ to an > out-of-line call to memcpy().
You can do
#define memcpy(d, s, n) __builtin_memcpy(d, s, n)
Alpha, m68k, sparc, and x86 already do.
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
| |