12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Test for direct coverage writing with lots of data.
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Current implementation maps output file in chunks of 64K. This test overflows
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 1 chunk.
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_asan -mllvm -asan-coverage=1 -O0 %s -o %t
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: rm -rf %T/coverage-direct-large
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: mkdir -p %T/coverage-direct-large/normal && cd %T/coverage-direct-large/normal
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=0:verbosity=1 %run %t
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %sancov print *.sancov >out.txt
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: cd ../..
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: mkdir -p %T/coverage-direct-large/direct && cd %T/coverage-direct-large/direct
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:verbosity=1 %run %t
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %sancov rawunpack *.sancov.raw
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %sancov print *.sancov >out.txt
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: cd ../..
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: diff -u coverage-direct-large/normal/out.txt coverage-direct-large/direct/out.txt
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// XFAIL: android
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define F0(Q, x) Q(x)
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define F1(Q, x)                                                          \
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  F0(Q, x##0) F0(Q, x##1) F0(Q, x##2) F0(Q, x##3) F0(Q, x##4) F0(Q, x##5) \
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      F0(Q, x##6) F0(Q, x##7) F0(Q, x##8) F0(Q, x##9)
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define F2(Q, x)                                                          \
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  F1(Q, x##0) F1(Q, x##1) F1(Q, x##2) F1(Q, x##3) F1(Q, x##4) F1(Q, x##5) \
292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      F1(Q, x##6) F1(Q, x##7) F1(Q, x##8) F1(Q, x##9)
302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define F3(Q, x)                                                          \
312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  F2(Q, x##0) F2(Q, x##1) F2(Q, x##2) F2(Q, x##3) F2(Q, x##4) F2(Q, x##5) \
322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      F2(Q, x##6) F2(Q, x##7) F2(Q, x##8) F2(Q, x##9)
332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define F4(Q, x)                                                          \
342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  F3(Q, x##0) F3(Q, x##1) F3(Q, x##2) F3(Q, x##3) F3(Q, x##4) F3(Q, x##5) \
352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      F3(Q, x##6) F3(Q, x##7) F3(Q, x##8) F3(Q, x##9)
362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define DECL(x) __attribute__((noinline)) void x() {}
382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define CALL(x) x();
392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesF4(DECL, f)
412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(void) {
432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  F4(CALL, f)
442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  return 0;
452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
46