diff mbox series

build: fix check for -fsanitize-coverage-allowlist

Message ID 20220614155415.4023833-1-alxndr@bu.edu (mailing list archive)
State New, archived
Headers show
Series build: fix check for -fsanitize-coverage-allowlist | expand

Commit Message

Alexander Bulekov June 14, 2022, 3:54 p.m. UTC
The existing check has two problems:
1. Meson uses a private directory for the get_supported_arguments check.
./instrumentation-filter does not exist in that private directory (it is
copied into the root of the build-directory).

2. fsanitize-coverage-allowlist is unused when coverage instrumentation
is not configured. No instrumentation are passed for the
get_supported_arguments check

Thus the check always fails. To work around this, change the check to an
"if cc.compiles" check and provide /dev/null, instead of the real
filter.

Meson log:
Working directory:  build/meson-private/tmpl6wld2d9
Command line:  clang-13 -m64 -mcx16
build/meson-private/tmpl6wld2d9/output.obj -c -O3 -D_FILE_OFFSET_BITS=64
-O0 -Werror=implicit-function-declaration -Werror=unknown-warning-option
-Werror=unused-command-line-argument
-Werror=ignored-optimization-argument
-fsanitize-coverage-allowlist=instrumentation-filter

Error:
error: argument unused during compilation:
'-fsanitize-coverage-allowlist=instrumentation-filter'

Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
---
 meson.build | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Paolo Bonzini June 15, 2022, 8:19 a.m. UTC | #1
On 6/14/22 17:54, Alexander Bulekov wrote:
> The existing check has two problems:
> 1. Meson uses a private directory for the get_supported_arguments check.
> ./instrumentation-filter does not exist in that private directory (it is
> copied into the root of the build-directory).
> 
> 2. fsanitize-coverage-allowlist is unused when coverage instrumentation
> is not configured. No instrumentation are passed for the
> get_supported_arguments check
> 
> Thus the check always fails. To work around this, change the check to an
> "if cc.compiles" check and provide /dev/null, instead of the real
> filter.
> 
> Meson log:
> Working directory:  build/meson-private/tmpl6wld2d9
> Command line:  clang-13 -m64 -mcx16
> build/meson-private/tmpl6wld2d9/output.obj -c -O3 -D_FILE_OFFSET_BITS=64
> -O0 -Werror=implicit-function-declaration -Werror=unknown-warning-option
> -Werror=unused-command-line-argument
> -Werror=ignored-optimization-argument
> -fsanitize-coverage-allowlist=instrumentation-filter
> 
> Error:
> error: argument unused during compilation:
> '-fsanitize-coverage-allowlist=instrumentation-filter'
> 
> Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
> ---
>   meson.build | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index 0c2e11ff07..85134267b5 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -209,9 +209,13 @@ if get_option('fuzzing')
>     configure_file(output: 'instrumentation-filter',
>                    input: 'scripts/oss-fuzz/instrumentation-filter-template',
>                    copy: true)
> -  add_global_arguments(
> -      cc.get_supported_arguments('-fsanitize-coverage-allowlist=instrumentation-filter'),
> -      native: false, language: ['c', 'cpp', 'objc'])
> +
> +  if cc.compiles('int main () { return 0; }',
> +                  name: '-fsanitize-coverage-allowlist=/dev/null',
> +                 args: ['-fsanitize-coverage-allowlist=/dev/null'] )
> +    add_global_arguments('-fsanitize-coverage-allowlist=instrumentation-filter',
> +                         native: false, language: ['c', 'cpp', 'objc'])
> +  endif
>   
>     if get_option('fuzzing_engine') == ''
>       # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the

Queued, thanks.

Paolo
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index 0c2e11ff07..85134267b5 100644
--- a/meson.build
+++ b/meson.build
@@ -209,9 +209,13 @@  if get_option('fuzzing')
   configure_file(output: 'instrumentation-filter',
                  input: 'scripts/oss-fuzz/instrumentation-filter-template',
                  copy: true)
-  add_global_arguments(
-      cc.get_supported_arguments('-fsanitize-coverage-allowlist=instrumentation-filter'),
-      native: false, language: ['c', 'cpp', 'objc'])
+
+  if cc.compiles('int main () { return 0; }',
+                  name: '-fsanitize-coverage-allowlist=/dev/null',
+                 args: ['-fsanitize-coverage-allowlist=/dev/null'] )
+    add_global_arguments('-fsanitize-coverage-allowlist=instrumentation-filter',
+                         native: false, language: ['c', 'cpp', 'objc'])
+  endif
 
   if get_option('fuzzing_engine') == ''
     # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the