summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorMarcos Pividori <mpividori@google.com>2017-01-22 01:27:38 +0000
committerMarcos Pividori <mpividori@google.com>2017-01-22 01:27:38 +0000
commit6137f98c2a29852d74fed2901d1b3be676c2b030 (patch)
treee4daef2577b933d76daa32ca8e44a50cd0f230ac /llvm/lib
parentfb24f2257dd2e07b8ca28d6fbaed883a9ad75118 (diff)
downloadbcm5719-llvm-6137f98c2a29852d74fed2901d1b3be676c2b030.tar.gz
bcm5719-llvm-6137f98c2a29852d74fed2901d1b3be676c2b030.zip
[libFuzzer] Expose Sanitizer Coverage functions from libFuzzer.
We need to expose Sanitizer Coverage's functions that are rewritten with a different implementation, so compiler-rt's libraries have access to it. Differential Revision: https://reviews.llvm.org/D28618 llvm-svn: 292736
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Fuzzer/FuzzerDefs.h6
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.cpp28
2 files changed, 22 insertions, 12 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerDefs.h b/llvm/lib/Fuzzer/FuzzerDefs.h
index ef990e1937f..ea60747f24a 100644
--- a/llvm/lib/Fuzzer/FuzzerDefs.h
+++ b/llvm/lib/Fuzzer/FuzzerDefs.h
@@ -53,6 +53,12 @@
# define ALWAYS_INLINE
#endif // __clang__
+#if LIBFUZZER_WINDOWS
+#define ATTRIBUTE_INTERFACE __declspec(dllexport)
+#else
+#define ATTRIBUTE_INTERFACE __attribute__((visibility("default")))
+#endif
+
namespace fuzzer {
template <class T> T Min(T a, T b) { return a < b ? a : b; }
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
index 4c790946f25..2e386af8404 100644
--- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
@@ -257,45 +257,48 @@ inline ALWAYS_INLINE uintptr_t GetPreviousInstructionPc(void* pc) {
} // namespace fuzzer
extern "C" {
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_pc_guard(uint32_t *Guard) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleTrace(Guard, PC);
}
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_pc_guard_init(uint32_t *Start, uint32_t *Stop) {
fuzzer::TPC.HandleInit(Start, Stop);
}
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_pc_indir(uintptr_t Callee) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCallerCallee(PC, Callee);
}
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
}
-__attribute__((visibility("default")))
+
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
}
-__attribute__((visibility("default")))
+
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_cmp2(uint16_t Arg1, uint16_t Arg2) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
}
-__attribute__((visibility("default")))
+
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Arg1, Arg2);
}
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases) {
uint64_t N = Cases[0];
uint64_t ValSizeInBits = Cases[1];
@@ -320,20 +323,21 @@ void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases) {
fuzzer::TPC.HandleCmp(PC + i, Token, (uint64_t)(0));
}
-__attribute__((visibility("default")))
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_div4(uint32_t Val) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Val, (uint32_t)0);
}
-__attribute__((visibility("default")))
+
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_div8(uint64_t Val) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Val, (uint64_t)0);
}
-__attribute__((visibility("default")))
+
+ATTRIBUTE_INTERFACE
void __sanitizer_cov_trace_gep(uintptr_t Idx) {
uintptr_t PC = fuzzer::GetPreviousInstructionPc(__builtin_return_address(0));
fuzzer::TPC.HandleCmp(PC, Idx, (uintptr_t)0);
}
-
} // extern "C"
OpenPOWER on IntegriCloud