Messages in this thread | | | From | Arnd Bergmann <> | Date | Tue, 27 Aug 2019 21:47:02 +0200 | Subject | Re: objtool warning "uses BP as a scratch register" with clang-9 |
| |
On Tue, Aug 27, 2019 at 9:23 PM Josh Poimboeuf <jpoimboe@redhat.com> wrote: > On Tue, Aug 27, 2019 at 09:00:52PM +0200, Arnd Bergmann wrote: > > On Tue, Aug 27, 2019 at 5:00 PM Ilie Halip <ilie.halip@gmail.com> wrote: > > > > > > > > $ clang-9 -c crc32.i -O2 ; objtool check crc32.o > > > > > crc32.o: warning: objtool: fn1 uses BP as a scratch register > > > > > > Yes, I see it too. https://godbolt.org/z/N56HW1 > > > > > > > Do you still see this warning with -fno-omit-frame-pointer (assuming > > > > clang has that option)? > > > > > > Using this makes the warning go away. Running objtool with --no-fp > > > also gets rid of it. > > > > I still see the warning after adding back the -fno-omit-frame-pointer > > in my reduced test case: > > > > $ clang-9 -c crc32.i -Werror -Wno-address-of-packed-member -Wall > > -Wno-pointer-sign -Wno-unused-value -Wno-constant-logical-operand -O2 > > -Wno-unused -fno-omit-frame-pointer > > $ objtool check crc32.o > > crc32.o: warning: objtool: fn1 uses BP as a scratch register > > This warning most likely means that clang is clobbering RBP in leaf > functions. With -fno-omit-frame-pointer, leaf functions don't need to > set up the frame pointer, but they at least need to leave RBP untouched, > so that an interrupts/exceptions can unwind through the function.
Yes, that clearly matches what I see in the output where it does
0: 55 push %rbp ... 73: 0f b6 ef movzbl %bh,%ebp 76: 8b 1c 99 mov (%rcx,%rbx,4),%ebx 79: 33 1c aa xor (%rdx,%rbp,4),%ebx ... 95: 5d pop %rbp 96: c3 retq
I just did another simple test: an x86-64 defconfig build with UNWINDER_FRAME_POINTER shows the exact symptom as my randconfig, so it sounds like any configuration with frame pointers would, and there is nothing else to it (this also makes sense given that it happens with a relatively simple test case outside of the kernel).
Arnd
| |