[llvm] r227252 - Add a Fuzzer library

Kostya Serebryany kcc at google.com
Wed Jan 28 18:03:26 PST 2015


On Wed, Jan 28, 2015 at 5:00 PM, Pasi Parviainen <pasi.parviainen at iki.fi>
wrote:

> On 29.1.2015 2:30, Kostya Serebryany wrote:
>
>> You mean, someone will *explicitly* try to build a target that [s]he does
>> not care about?
>> Not sure I understand the workflow that this new thing breaks.
>>
>
> Yes, someone who cares or doesn't know the requirements will eventually
> try to build it on a host where it isn't supported. Also the library itself
> could be tested by default on wider range of configurations by enabling its
> own test on supported platforms (if that is desirable and feasible).
>
I hope to add gunite-style unit tests for the fuzzer itself that will not
have any dependencies and that will be run by default.
That's in my TODO.

>
> Main point here is to avoid false expectations, like if it's available it
> shall work ;)
>
> Pasi.
>
>
>  On Wed, Jan 28, 2015 at 3:45 PM, Pasi Parviainen <pasi.parviainen at iki.fi>
>> wrote:
>>
>>  On 29.1.2015 0:23, Kostya Serebryany wrote:
>>>
>>>  On Wed, Jan 28, 2015 at 1:54 PM, Pasi Parviainen <
>>>> pasi.parviainen at iki.fi>
>>>> wrote:
>>>>
>>>>   On 28.1.2015 0:08, Kostya Serebryany wrote:
>>>>
>>>>>
>>>>>   Author: kcc
>>>>>
>>>>>> Date: Tue Jan 27 16:08:41 2015
>>>>>> New Revision: 227252
>>>>>>
>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=227252&view=rev
>>>>>> Log:
>>>>>> Add a Fuzzer library
>>>>>>
>>>>>> Summary:
>>>>>> A simple genetic in-process coverage-guided fuzz testing library.
>>>>>>
>>>>>> I've used this fuzzer to test clang-format
>>>>>> (it found 12+ bugs, thanks djasper@ for the fixes!)
>>>>>> and it may also help us test other parts of LLVM.
>>>>>> So why not keep it in the LLVM repository?
>>>>>>
>>>>>> I plan to add the cmake build rules later (in a separate patch, if
>>>>>> that's
>>>>>> ok)
>>>>>> and also add a clang-format-fuzzer target.
>>>>>>
>>>>>> See README.txt for details.
>>>>>>
>>>>>> Test Plan: Tests will follow separately.
>>>>>>
>>>>>> Reviewers: djasper, chandlerc, rnk
>>>>>>
>>>>>> Reviewed By: rnk
>>>>>>
>>>>>> Subscribers: majnemer, ygribov, dblaikie, llvm-commits
>>>>>>
>>>>>> Differential Revision: http://reviews.llvm.org/D7184
>>>>>>
>>>>>> Added:
>>>>>>        llvm/trunk/lib/Fuzzer/
>>>>>>        llvm/trunk/lib/Fuzzer/CMakeLists.txt
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerCrossOver.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerFlags.def
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerIO.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerInternal.h
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerMain.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerMutate.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/FuzzerUtil.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/README.txt
>>>>>>        llvm/trunk/lib/Fuzzer/test/
>>>>>>        llvm/trunk/lib/Fuzzer/test/ExactTest.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/test/InfiniteTest.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/test/NullDerefTest.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/test/SimpleTest.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/test/TestFuzzerCrossOver.cpp
>>>>>>        llvm/trunk/lib/Fuzzer/test/TimeoutTest.cpp
>>>>>> Modified:
>>>>>>        llvm/trunk/lib/CMakeLists.txt
>>>>>>
>>>>>>
>>>>>>  Putting this library directly under lib/ tree feels a little bit out
>>>>> of
>>>>> place. Perhaps utils/ or even tools/ trees would be more appropriate
>>>>> locations for this library, since most of its value is in testing (on
>>>>> limited environments, see below).
>>>>>
>>>>>
>>>>
>>>> I don't have any strong opinion here. But none of the reviewers
>>>> objected.
>>>>
>>>>
>>>>
>>>>
>>>>>    Modified: llvm/trunk/lib/CMakeLists.txt
>>>>>
>>>>>  URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>>>>>> CMakeLists.txt?rev=227252&r1=227251&r2=227252&view=diff
>>>>>> ============================================================
>>>>>> ==================
>>>>>> --- llvm/trunk/lib/CMakeLists.txt (original)
>>>>>> +++ llvm/trunk/lib/CMakeLists.txt Tue Jan 27 16:08:41 2015
>>>>>> @@ -17,3 +17,4 @@ add_subdirectory(Target)
>>>>>>     add_subdirectory(AsmParser)
>>>>>>     add_subdirectory(LineEditor)
>>>>>>     add_subdirectory(ProfileData)
>>>>>> +add_subdirectory(Fuzzer)
>>>>>>
>>>>>> Added: llvm/trunk/lib/Fuzzer/CMakeLists.txt
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/
>>>>>> CMakeLists.txt?rev=227252&view=auto
>>>>>> ============================================================
>>>>>> ==================
>>>>>> --- llvm/trunk/lib/Fuzzer/CMakeLists.txt (added)
>>>>>> +++ llvm/trunk/lib/Fuzzer/CMakeLists.txt Tue Jan 27 16:08:41 2015
>>>>>> @@ -0,0 +1,9 @@
>>>>>> +add_library(LLVMFuzzer STATIC
>>>>>> +  EXCLUDE_FROM_ALL  # Do not build if you are not building fuzzers.
>>>>>> +  FuzzerCrossOver.cpp
>>>>>> +  FuzzerIO.cpp
>>>>>> +  FuzzerLoop.cpp
>>>>>> +  FuzzerMain.cpp
>>>>>> +  FuzzerMutate.cpp
>>>>>> +  FuzzerUtil.cpp
>>>>>> +  )
>>>>>>
>>>>>>
>>>>>>   This target should only be added when build environment can satisfy
>>>>>> its
>>>>>>
>>>>> requirements (sufficient posix interfaces + asan support), otherwise
>>>>> there
>>>>> will be a build target which is known to fail. Fuzzers depending on
>>>>> this
>>>>> library can then simply enable themselves by existence of this target.
>>>>>
>>>>>
>>>>
>>>> That's what EXCLUDE_FROM_ALL is for, right?
>>>>
>>>>
>>>>  The point was that, though it is excluded from a default target, it's
>>> still available as a target anyway. And when trying to build that target,
>>> it will fail on environments which can not satisfy its requirements, such
>>> as MSVC.
>>>
>>> Pasi.
>>>
>>>
>>>
>>>>
>>>>> Pasi.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150128/317b556b/attachment.html>


More information about the llvm-commits mailing list