Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0 2 : : 3 : : #include <linux/export.h> 4 : : #include <linux/kernel.h> 5 : : #include <linux/mutex.h> 6 : : #include "gcov.h" 7 : : 8 : : /* 9 : : * __gcov_init is called by gcc-generated constructor code for each object 10 : : * file compiled with -fprofile-arcs. 11 : : */ 12 : 3 : void __gcov_init(struct gcov_info *info) 13 : : { 14 : : static unsigned int gcov_version; 15 : : 16 : 3 : mutex_lock(&gcov_lock); 17 : 3 : if (gcov_version == 0) { 18 : 3 : gcov_version = gcov_info_version(info); 19 : : /* 20 : : * Printing gcc's version magic may prove useful for debugging 21 : : * incompatibility reports. 22 : : */ 23 : 3 : pr_info("version magic: 0x%x\n", gcov_version); 24 : : } 25 : : /* 26 : : * Add new profiling data structure to list and inform event 27 : : * listener. 28 : : */ 29 : 3 : gcov_info_link(info); 30 : 3 : if (gcov_events_enabled) 31 : 3 : gcov_event(GCOV_ADD, info); 32 : 3 : mutex_unlock(&gcov_lock); 33 : 3 : } 34 : : EXPORT_SYMBOL(__gcov_init); 35 : : 36 : : /* 37 : : * These functions may be referenced by gcc-generated profiling code but serve 38 : : * no function for kernel profiling. 39 : : */ 40 : 0 : void __gcov_flush(void) 41 : : { 42 : : /* Unused. */ 43 : 0 : } 44 : : EXPORT_SYMBOL(__gcov_flush); 45 : : 46 : 0 : void __gcov_merge_add(gcov_type *counters, unsigned int n_counters) 47 : : { 48 : : /* Unused. */ 49 : 0 : } 50 : : EXPORT_SYMBOL(__gcov_merge_add); 51 : : 52 : 0 : void __gcov_merge_single(gcov_type *counters, unsigned int n_counters) 53 : : { 54 : : /* Unused. */ 55 : 0 : } 56 : : EXPORT_SYMBOL(__gcov_merge_single); 57 : : 58 : 0 : void __gcov_merge_delta(gcov_type *counters, unsigned int n_counters) 59 : : { 60 : : /* Unused. */ 61 : 0 : } 62 : : EXPORT_SYMBOL(__gcov_merge_delta); 63 : : 64 : 0 : void __gcov_merge_ior(gcov_type *counters, unsigned int n_counters) 65 : : { 66 : : /* Unused. */ 67 : 0 : } 68 : : EXPORT_SYMBOL(__gcov_merge_ior); 69 : : 70 : 0 : void __gcov_merge_time_profile(gcov_type *counters, unsigned int n_counters) 71 : : { 72 : : /* Unused. */ 73 : 0 : } 74 : : EXPORT_SYMBOL(__gcov_merge_time_profile); 75 : : 76 : 0 : void __gcov_merge_icall_topn(gcov_type *counters, unsigned int n_counters) 77 : : { 78 : : /* Unused. */ 79 : 0 : } 80 : : EXPORT_SYMBOL(__gcov_merge_icall_topn); 81 : : 82 : 0 : void __gcov_exit(void) 83 : : { 84 : : /* Unused. */ 85 : 0 : } 86 : : EXPORT_SYMBOL(__gcov_exit);