mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
03329c2c8b
In an effort to get libfuzzer working on Windows, we need to make a distinction between what functions require platform specific code (e.g. different code on Windows vs Linux) and what code doesn't. IO functions, for example, tend to be platform specific. This patch separates out some of the functions which will need to have platform specific implementations into different headers, so that we can then provide different implementations for each platform. Aside from that, this patch contains no functional change. It is purely a re-organization. Patch by Marcos Pividori Differential Revision: https://reviews.llvm.org/D27230 llvm-svn: 288264
52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
//===- FuzzerExtFunctionsWeak.cpp - Interface to external functions -------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// Implementation for Linux. This relies on the linker's support for weak
|
|
// symbols. We don't use this approach on Apple platforms because it requires
|
|
// clients of LibFuzzer to pass ``-U _<symbol_name>`` to the linker to allow
|
|
// weak symbols to be undefined. That is a complication we don't want to expose
|
|
// to clients right now.
|
|
//===----------------------------------------------------------------------===//
|
|
#include "FuzzerDefs.h"
|
|
#if LIBFUZZER_LINUX
|
|
|
|
#include "FuzzerExtFunctions.h"
|
|
#include "FuzzerIO.h"
|
|
|
|
extern "C" {
|
|
// Declare these symbols as weak to allow them to be optionally defined.
|
|
#define EXT_FUNC(NAME, RETURN_TYPE, FUNC_SIG, WARN) \
|
|
__attribute__((weak)) RETURN_TYPE NAME FUNC_SIG
|
|
|
|
#include "FuzzerExtFunctions.def"
|
|
|
|
#undef EXT_FUNC
|
|
}
|
|
|
|
using namespace fuzzer;
|
|
|
|
static void CheckFnPtr(void *FnPtr, const char *FnName, bool WarnIfMissing) {
|
|
if (FnPtr == nullptr && WarnIfMissing) {
|
|
Printf("WARNING: Failed to find function \"%s\".\n", FnName);
|
|
}
|
|
}
|
|
|
|
namespace fuzzer {
|
|
|
|
ExternalFunctions::ExternalFunctions() {
|
|
#define EXT_FUNC(NAME, RETURN_TYPE, FUNC_SIG, WARN) \
|
|
this->NAME = ::NAME; \
|
|
CheckFnPtr((void *)::NAME, #NAME, WARN);
|
|
|
|
#include "FuzzerExtFunctions.def"
|
|
|
|
#undef EXT_FUNC
|
|
}
|
|
} // namespace fuzzer
|
|
#endif // LIBFUZZER_LINUX
|