diff options
author | Dan Liew <dan@su-root.co.uk> | 2016-06-07 23:32:50 +0000 |
---|---|---|
committer | Dan Liew <dan@su-root.co.uk> | 2016-06-07 23:32:50 +0000 |
commit | 1873a496e20a391633fc29665d6620c1ca3191f7 (patch) | |
tree | abb6a28df749fed5b9e653269cdcd941af9d7bb1 /llvm/lib/Fuzzer/FuzzerExtFunctions.h | |
parent | 32c940de377ec87a072e3d7c3f3200beec6fe90e (diff) | |
download | llvm-1873a496e20a391633fc29665d6620c1ca3191f7.zip llvm-1873a496e20a391633fc29665d6620c1ca3191f7.tar.gz llvm-1873a496e20a391633fc29665d6620c1ca3191f7.tar.bz2 |
[LibFuzzer] Declare and use sanitizer functions in ``fuzzer::ExternalFunctions``
This fixes linking problems on OSX.
Unfortunately it turns out we need to use an instance of the
``fuzzer::ExternalFunctions`` object in several places so this
commit also replaces all instances with a single global instance.
It also turns out initializing a global ``fuzzer::ExternalFunctions``
before main is entered (i.e. letting the object be initialised by the
global initializers) is not safe (on OSX the call to ``Printf()`` in the
CTOR crashes if it is called from a global initializer) so we instead
have a global ``fuzzer::ExternalFunctions*`` and initialize it inside
``FuzzerDriver()``.
Multiple unit tests depend also depend on the
``fuzzer::ExternalFunctions*`` global so a ``main()`` function has been
added that initializes it before running any tests.
Differential Revision: http://reviews.llvm.org/D20943
llvm-svn: 272072
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerExtFunctions.h')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerExtFunctions.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerExtFunctions.h b/llvm/lib/Fuzzer/FuzzerExtFunctions.h index 95b5240..2ec86cb 100644 --- a/llvm/lib/Fuzzer/FuzzerExtFunctions.h +++ b/llvm/lib/Fuzzer/FuzzerExtFunctions.h @@ -17,8 +17,9 @@ namespace fuzzer { struct ExternalFunctions { - // Initialize function pointers. Functions that are not available - // will be set to nullptr. + // Initialize function pointers. Functions that are not available will be set + // to nullptr. Do not call this constructor before ``main()`` has been + // entered. ExternalFunctions(); #define EXT_FUNC(NAME, RETURN_TYPE, FUNC_SIG, WARN) \ |