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

Reply via email to