- = { #COUNTER, COUNTER##_count, 0 }; \
- extern struct coverage_counter *counter_ptr_##COUNTER; \
- struct coverage_counter *counter_ptr_##COUNTER \
- __attribute__((section("coverage"))) = &counter_##COUNTER
-#else
-#define COVERAGE_DEFINE(COUNTER) \
- DECLARE_EXTERN_PER_THREAD_DATA(unsigned int, \
- counter_##COUNTER); \
- static inline void COUNTER##_add(unsigned int n) \
- { \
- *counter_##COUNTER##_get() += n; \
- } \
- extern struct coverage_counter counter_##COUNTER
-#endif
+ = { #COUNTER, COUNTER##_count, 0, 0, {0}, {0} }; \
+ OVS_CONSTRUCTOR(COUNTER##_init) { \
+ coverage_counter_register(&counter_##COUNTER); \
+ }