summaryrefslogtreecommitdiff
path: root/libhfuzz/instrument.c
diff options
context:
space:
mode:
authorRobert Swiecki <robert@swiecki.net>2017-06-15 03:03:00 +0200
committerRobert Swiecki <robert@swiecki.net>2017-06-15 03:03:00 +0200
commite2e64b00b706ed8459b0c94f00d9e3a1615ff817 (patch)
tree9557ff753fe2fe407472966231cd3e8b3b1361a8 /libhfuzz/instrument.c
parentdc4567f82d007fae64c2557eb914580f57c66c9c (diff)
downloadhonggfuzz-e2e64b00b706ed8459b0c94f00d9e3a1615ff817.tar.gz
libhfuzz: implement __sanitizer_cov_indir_call16
Diffstat (limited to 'libhfuzz/instrument.c')
-rw-r--r--libhfuzz/instrument.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/libhfuzz/instrument.c b/libhfuzz/instrument.c
index c48b34c2..5a729ecb 100644
--- a/libhfuzz/instrument.c
+++ b/libhfuzz/instrument.c
@@ -93,21 +93,6 @@ ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_pc(void)
}
/*
- * -fsanitize-coverage=indirect-calls
- */
-ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_pc_indir(void *callee)
-{
- register size_t pos1 = (uintptr_t) __builtin_return_address(0) << 12;
- register size_t pos2 = (uintptr_t) callee & 0xFFF;
- register size_t pos = (pos1 | pos2) & _HF_PERF_BITMAP_BITSZ_MASK;
-
- register uint8_t prev = ATOMIC_BTS(feedback->bbMapPc, pos);
- if (!prev) {
- ATOMIC_PRE_INC_RELAXED(feedback->pidFeedbackPc[my_thread_no]);
- }
-}
-
-/*
* -fsanitize-coverage=trace-cmp
*/
ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2)
@@ -192,6 +177,34 @@ ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_cmp(uint64_t SizeAndType,
}
/*
+ * -fsanitize-coverage=indirect-calls
+ */
+ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_pc_indir(void *callee)
+{
+ register size_t pos1 = (uintptr_t) __builtin_return_address(0) << 12;
+ register size_t pos2 = (uintptr_t) callee & 0xFFF;
+ register size_t pos = (pos1 | pos2) & _HF_PERF_BITMAP_BITSZ_MASK;
+
+ register uint8_t prev = ATOMIC_BTS(feedback->bbMapPc, pos);
+ if (!prev) {
+ ATOMIC_PRE_INC_RELAXED(feedback->pidFeedbackPc[my_thread_no]);
+ }
+}
+
+ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_indir_call16(void *callee,
+ void *callee_cache16[]UNUSED)
+{
+ register size_t pos1 = (uintptr_t) __builtin_return_address(0) << 12;
+ register size_t pos2 = (uintptr_t) callee & 0xFFF;
+ register size_t pos = (pos1 | pos2) & _HF_PERF_BITMAP_BITSZ_MASK;
+
+ register uint8_t prev = ATOMIC_BTS(feedback->bbMapPc, pos);
+ if (!prev) {
+ ATOMIC_PRE_INC_RELAXED(feedback->pidFeedbackPc[my_thread_no]);
+ }
+}
+
+/*
* -fsanitize-coverage=trace-pc-guard
*/
ATTRIBUTE_X86_REQUIRE_SSE42 void __sanitizer_cov_trace_pc_guard_init(uint32_t * start,