On Tue, Jan 14, 2020 at 12:36:11PM +0100, Martin Liška wrote: > The missing sanitizer reports about violations of function signatures > for indirect calls, like: > > $ cat sanitize-function.cpp > #include <inttypes.h> > > void f() {} > void (*fnpointer) (int); > > void save () { > fnpointer = reinterpret_cast<void (*)(int)>(reinterpret_cast<uintptr_t>(f)); > } > > int main(void) { > save (); > fnpointer (32); > }
_Z4savev: # @_Z4savev .cfi_startproc .long 846595819 # 0x327606eb .long .L__unnamed_2-_Z4savev # %bb.0: # %entry ... seems to be what they emit on x86_64. Now, wonder what they do on other targets, and how does it play with all the other options that add stuff to the start of functions, e.g. -fcf-protection=full (where it needs to really start with endbr64 instruction), or the various options for patcheable function entries, -mfentry, profiling and the like. Jakub