Messages in this thread |  | | From | "Jason A. Donenfeld" <> | Date | Tue, 21 Nov 2017 22:55:23 +0100 | Subject | objtool - what if I want to clobber rbp? |
| |
Hi Josh,
We're working on some highly optimized assembly crypto primitive implementations for WireGuard. The last 24 hours have been spent trying to make objtool happy with a variety of tricks, some more unfortunate than others. There's still one issue remaining, however, and I just can't figure out how to make it go away:
poly1305-x86_64.o: warning: objtool: poly1305_blocks_avx uses BP as a scratch register poly1305-x86_64.o: warning: objtool: poly1305_blocks_avx2 uses BP as a scratch register poly1305-x86_64.o: warning: objtool: poly1305_blocks_avx512 uses BP as a scratch register
The messages are right. We're using %rbp as a general purpose register, writing into it all sorts of crypto gibberish certainly not suitable for walking stack frames. It's hard to find a way of not using it, without incurring a speed penalty. We really do just need all the registers.
Of course the "problem" goes away with the new slick ORC unwinding, which is great. But for frame pointer unwinding, this problem remains.
I'm wondering if you can think of any clever way of marking a function or the like that will make this issue go away, somehow. Is there any path forward without sacrificing %rbp and hence performance to a useless frame pointer?
Thanks, Jason
|  |