On Sun, Jan 30, 2022 at 04:46:36PM -0800, Greg Steuck wrote:

> In case somebody hits this, here's a resolved issue: -fno-wrapv is
> matters for UBSan coverage.
> 
> Confusion starts with:
> 
> $ uname -srm; cat a.c && clang -fsanitize=undefined a.c -c -o a.o && nm a.o
> OpenBSD 7.0 amd64
> int main(int argc, char **argv) {
>   int k = 0x7fffffff;
>   k += argc;
>   return 0;
> }
> 00000000 W __llvm_retpoline_r11
> 00000000 W __retguard_2371
> 00000000 F a.c
> 00000000 T main
> 
> Notice the lack of `__ubsan` symbols. Adding -fno-wrav (which I found in
> kernel Makefile.amd64) restores the desired instrumentation:
> 
> % clang -fsanitize=undefined -fno-wrapv a.c -c -o a.o && nm a.o
> 00000000 W __llvm_retpoline_r11
> 00000000 W __retguard_2371
>          U __ubsan_handle_add_overflow
> 00000000 F a.c
> 00000000 T main
> 

With -fwrapv the addition is no longer undefined behaviour, so the
compiler does not need to insert the __ubsan_handle_add_overflow hook. 

        -Otto

Reply via email to