Allow libFuzer to build with MSVC
Previously, libFuzzer on Windows could only be built with
clang-cl, this changes that by making libFuzzer compilable
with MSVC's cl.exe
The following changes were made to accomplish this:
- libFuzzer's handling of external functions on Windows was
changed to be compatible with MSVC (previously it relied on
attributes, which MSVC does not support.
- SanitizerCoverage's code-coverage instrumentation arrays
were changed so that MSVC's alignment wouldn't break
libFuzzer.
- Calls to __builtin functions were replaced with calls to
macros or functions that on POSIX call the builtins, but on
Windows, call Windows-specific intrinsics.
- Attributes were replaced by macros that on POSIX are
defined as attributes, but on Windows are defined as the
corresponding __declspec (if one exists).