From acf56204f2b11347d25b4ebbfcb0525941f86dd7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 11 Jul 2022 09:10:05 +1000 Subject: [PATCH] waf: added --ubsan and --ubsan-abort options --- Tools/ardupilotwaf/ardupilotwaf.py | 8 ++++++++ Tools/ardupilotwaf/boards.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Tools/ardupilotwaf/ardupilotwaf.py b/Tools/ardupilotwaf/ardupilotwaf.py index 3bc45b4d52..cc5272b139 100644 --- a/Tools/ardupilotwaf/ardupilotwaf.py +++ b/Tools/ardupilotwaf/ardupilotwaf.py @@ -582,6 +582,14 @@ Address Sanitizer support llvm-symbolizer is required to be on the PATH. This option is only supported on macOS versions of clang. ''') + g.add_option('--ubsan', + action='store_true', + help='''Build using the gcc undefined behaviour sanitizer''') + + g.add_option('--ubsan-abort', + action='store_true', + help='''Build using the gcc undefined behaviour sanitizer and abort on error''') + def build(bld): bld.add_pre_fun(_process_build_command) bld.add_pre_fun(_select_programs_from_group) diff --git a/Tools/ardupilotwaf/boards.py b/Tools/ardupilotwaf/boards.py index 33d26a3884..9196c7eafd 100644 --- a/Tools/ardupilotwaf/boards.py +++ b/Tools/ardupilotwaf/boards.py @@ -557,6 +557,21 @@ class sitl(Board): '-Werror=float-equal' ] + if cfg.options.ubsan or cfg.options.ubsan_abort: + env.CXXFLAGS += [ + "-fsanitize=undefined", + "-fsanitize=float-cast-overflow", + ] + env.LINKFLAGS += [ + "-fsanitize=undefined", + "-lubsan", + ] + + if cfg.options.ubsan_abort: + env.CXXFLAGS += [ + "-fno-sanitize-recover" + ] + if not cfg.env.DEBUG: env.CXXFLAGS += [ '-O3',