diff options
author | Robert Swiecki <robert@swiecki.net> | 2017-06-15 03:03:00 +0200 |
---|---|---|
committer | Robert Swiecki <robert@swiecki.net> | 2017-06-15 03:03:00 +0200 |
commit | e2e64b00b706ed8459b0c94f00d9e3a1615ff817 (patch) | |
tree | 9557ff753fe2fe407472966231cd3e8b3b1361a8 /libhfuzz/instrument.c | |
parent | dc4567f82d007fae64c2557eb914580f57c66c9c (diff) | |
download | honggfuzz-e2e64b00b706ed8459b0c94f00d9e3a1615ff817.tar.gz |
libhfuzz: implement __sanitizer_cov_indir_call16
Diffstat (limited to 'libhfuzz/instrument.c')
-rw-r--r-- | libhfuzz/instrument.c | 43 |
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, |