mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 20:43:44 +02:00
22b310e67c
The original `ExecuteCommand()` called `system()` from the C library. The C library implementation of this on macOS contains a mutex which serializes calls to `system()`. This prevented the `-jobs=` flag from running copies of the fuzzing binary in parallel which is the opposite of what is intended. To fix this on macOS an alternative implementation of `ExecuteCommand()` is provided that can be used concurrently. This is provided in `FuzzerUtilDarwin.cpp` which is guarded to only compile code on Apple platforms. The existing implementation has been moved to a new file `FuzzerUtilLinux.cpp` which is guarded to only compile code on Linux. This commit includes a simple test to check that LibFuzzer is being executed in parallel when requested. Differential Revision: https://reviews.llvm.org/D22742 llvm-svn: 278544
30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
RUN: rm -rf %tmp
|
|
RUN: mkdir %tmp && cd %tmp
|
|
# Create a shared corpus directory
|
|
RUN: rm -rf FuzzerJobsTestCORPUS
|
|
RUN: mkdir FuzzerJobsTestCORPUS
|
|
RUN: rm -f fuzz-{0,1}.log
|
|
# Start fuzzer and in parallel check that the output files
|
|
# that should be created exist.
|
|
RUN: LLVMFuzzer-EmptyTest -max_total_time=4 -jobs=2 -workers=2 FuzzerJobsTestCORPUS > %t-fuzzer-jobs-test.log 2>&1 & export FUZZER_PID=$!
|
|
# Wait a short while to give time for the child processes
|
|
# to start fuzzing
|
|
RUN: sleep 1
|
|
# If the instances are running in parallel they should have created their log
|
|
# files by now.
|
|
RUN: ls fuzz-0.log
|
|
RUN: ls fuzz-1.log
|
|
# Wait for libfuzzer to finish.
|
|
# This probably isn't portable but we need a way to block until
|
|
# the fuzzer is done otherwise we might remove the files while
|
|
# they are being used.
|
|
RUN: while kill -0 ${FUZZER_PID}; do : ; done
|
|
RUN: rm -f fuzz-{0,1}.log
|
|
RUN: rm -rf FuzzerJobsTestCORPUS
|
|
RUN: FileCheck -input-file=%t-fuzzer-jobs-test.log %s
|
|
RUN: rm %t-fuzzer-jobs-test.log
|
|
RUN: cd ../
|
|
|
|
CHECK-DAG: Job 0 exited with exit code 0
|
|
CHECK-DAG: Job 1 exited with exit code 0
|